From 0d92359da71a0127a83c982bd86d16cd5666eef1 Mon Sep 17 00:00:00 2001 From: Batrachophreno Date: Fri, 5 Jun 2026 09:55:22 -0400 Subject: [PATCH] Bun, Inferno->React migration (#22529) Re-creation of https://github.com/Aurorastation/Aurora.3/pull/21046 to skip merge conflict hell. Brings us modern TGUI. **ALTERNATE TITLE: TGUI HELLSCAPE PR ABANDON ALL HOPE YE WHO ENTER HERE** - [x] Migrate build tools (javascript -> typescript, bun for package management). - [x] Upgrade all TGUI dependencies and associated root files to TG-congruent versions (axios, babel, dompurify, eslint, highlight, marked, prettier, sass, source-map, stacktrace-parser, typescript). - [x] InfernoJS -> React migrations - [x] React cleanup and polish (migrate all remaining .js files to appropriate .ts or .tsx filetype, all remaining hooks, linting, error corrections, etc.) - [ ] Test all remaining TGUI interfaces --- .github/actions/setup_bun/action.yml | 17 + .github/actions/setup_node/action.yml | 26 + .github/workflows/byond.yml | 12 +- .github/workflows/update_tgui.yml | 31 + .gitignore | 3 + .vscode/extensions.json | 7 +- .vscode/settings.json | 18 +- .vscode/tasks.json | 38 +- aurorastation.dme | 18 +- biome.json | 68 + bun.lock | 32 + .../signals/signals_atom/signals_atom_main.dm | 2 + code/__DEFINES/dcs/signals/signals_tgui.dm | 2 + code/__DEFINES/span.dm | 4 + code/__DEFINES/subsystem-priority.dm | 1 - code/__DEFINES/subsystems.dm | 1 + code/__DEFINES/text.dm | 2 +- code/__DEFINES/tgs.config.dm | 11 + code/__DEFINES/tgs.dm | 176 +- code/__DEFINES/tgui.dm | 10 + code/__HELPERS/text.dm | 28 + code/controllers/subsystems/chat.dm | 93 +- code/controllers/subsystems/night_lighting.dm | 14 +- .../subsystems/processing/nanoui.dm | 241 - .../subsystems/{processing => }/tgui.dm | 89 +- code/datums/chat_payload.dm | 16 + code/datums/components/local_network.dm | 5 - code/datums/mind.dm | 1 - code/datums/wires/alarm.dm | 13 +- code/datums/wires/radio.dm | 4 +- code/game/atom/atom_examine.dm | 38 + code/game/objects/items.dm | 31 +- code/game/objects/items/stacks/telecrystal.dm | 2 +- code/game/objects/structures.dm | 20 +- code/game/objects/structures/_machinery.dm | 5 +- .../objects/structures/machinery/alarm.dm | 53 +- .../structures/machinery/atmo_control.dm | 2 +- .../structures/machinery/computer/computer.dm | 8 +- .../structures/machinery/dna_machines.dm | 5 +- .../embedded_controller/docking_program.dm | 1 - .../structures/machinery/vending/_vending.dm | 3 +- code/game/turfs/simulated/floor.dm | 3 + code/game/turfs/simulated/walls.dm | 3 + code/game/turfs/unsimulated/floor.dm | 3 + code/game/turfs/unsimulated/walls.dm | 3 + code/game/verbs/ooc.dm | 8 - code/modules/admin/admin_verbs.dm | 3 - code/modules/admin/verbs/debug.dm | 15 - .../client/preference_setup/global/01_ui.dm | 11 - code/modules/client/preferences.dm | 1 - code/modules/clothing/clothing.dm | 10 + code/modules/clothing/head/hardhat.dm | 1 + code/modules/heavy_vehicle/mecha.dm | 3 - code/modules/mob/logout.dm | 1 - .../modules/modular_computers/_description.dm | 3 +- .../computers/modular_computer/core.dm | 19 +- .../computers/modular_computer/ui.dm | 16 +- .../computers/subtypes/dev_silicon.dm | 3 + .../modular_computers/file_system/program.dm | 36 +- .../file_system/program_events.dm | 5 - .../file_system/programs/_program.dm | 38 +- .../programs/civilian/cargo_order.dm | 1 - .../file_system/programs/command/card.dm | 1 - .../command/command_and_communications.dm | 8 +- .../programs/engineering/atmoscontrol.dm | 5 +- .../programs/engineering/lightingcontrol.dm | 7 +- .../file_system/programs/engineering/rcon.dm | 1 - .../file_system/programs/security/camera.dm | 55 +- .../programs/security/penalmechs.dm | 9 - .../programs/system/file_browser.dm | 53 +- code/modules/nano/modules/nano_module.dm | 63 - code/modules/nano/nanoexternal.dm | 37 - code/modules/nano/nanomapgen.dm | 90 - code/modules/nano/nanoui.dm | 537 - code/modules/organs/subtypes/vaurca.dm | 72 +- .../overmap/ships/computers/engine_control.dm | 2 +- code/modules/overmap/ships/computers/helm.dm | 126 +- code/modules/overmap/ships/computers/ship.dm | 5 - code/modules/power/sensors/powernet_sensor.dm | 1 - code/modules/research/xenoarchaeology/misc.dm | 1 - code/modules/tgchat/README.md | 31 + code/modules/tgchat/to_chat.dm | 21 +- code/modules/tgs/LICENSE | 2 +- code/modules/tgs/README.md | 8 +- code/modules/tgs/core/README.md | 4 +- code/modules/tgs/core/byond_world_export.dm | 22 + code/modules/tgs/core/core.dm | 28 +- code/modules/tgs/core/datum.dm | 9 +- code/modules/tgs/core/tgs_version.dm | 1 + code/modules/tgs/includes.dm | 1 + code/modules/tgs/v4/api.dm | 6 +- code/modules/tgs/v5/README.md | 4 +- code/modules/tgs/v5/__interop_version.dm | 2 +- code/modules/tgs/v5/_defines.dm | 14 +- code/modules/tgs/v5/api.dm | 126 +- code/modules/tgs/v5/bridge.dm | 29 +- code/modules/tgs/v5/topic.dm | 38 +- code/modules/tgs/v5/undefs.dm | 16 +- code/modules/tgui/external.dm | 2 +- .../{nano => tgui}/modules/follow_menu.dm | 0 .../modules/human_appearance.dm | 0 .../{nano => tgui}/modules/narrate_panel.dm | 0 code/modules/tgui/states.dm | 5 +- code/modules/tgui/states/default.dm | 7 +- code/modules/tgui/status_composers.dm | 11 + code/modules/tgui/tgui.dm | 86 +- code/modules/tgui/tgui_window.dm | 101 +- code/modules/tgui_input/alert.dm | 22 +- code/modules/tgui_input/checkboxes.dm | 139 + code/modules/tgui_input/keycombo.dm | 126 + code/modules/tgui_input/list.dm | 36 +- code/modules/tgui_input/number.dm | 18 +- code/modules/tgui_input/say_modal/modal.dm | 1 - code/modules/tgui_input/text.dm | 16 +- code/modules/tgui_panel/external.dm | 8 + config/example/config.txt | 4 + dependencies.sh | 5 +- html/changelogs/Bat-TGUIReactMigration.yml | 66 + html/statbrowser.css | 476 +- html/statbrowser.html | 9 +- html/statbrowser.js | 1565 ++- nano/TemplatesGuide.txt | 10 - nano/To BYOND Cache.bat | 4 - nano/css/icons.css | 315 - nano/css/layout_basic.css | 21 - nano/css/layout_default.css | 128 - nano/css/shared.css | 599 - nano/images/c_charging.gif | Bin 960 -> 0 bytes nano/images/c_discharging.gif | Bin 922 -> 0 bytes nano/images/c_max.gif | Bin 125 -> 0 bytes nano/images/status_icons/alarm_green.gif | Bin 107 -> 0 bytes nano/images/status_icons/alarm_red.gif | Bin 163 -> 0 bytes nano/images/status_icons/batt_100.gif | Bin 173 -> 0 bytes nano/images/status_icons/batt_20.gif | Bin 284 -> 0 bytes nano/images/status_icons/batt_40.gif | Bin 185 -> 0 bytes nano/images/status_icons/batt_5.gif | Bin 273 -> 0 bytes nano/images/status_icons/batt_60.gif | Bin 166 -> 0 bytes nano/images/status_icons/batt_80.gif | Bin 172 -> 0 bytes nano/images/status_icons/charging.gif | Bin 160 -> 0 bytes .../status_icons/downloader_finished.gif | Bin 130 -> 0 bytes .../status_icons/downloader_running.gif | Bin 574 -> 0 bytes nano/images/status_icons/ntnrc_idle.gif | Bin 113 -> 0 bytes nano/images/status_icons/ntnrc_new.gif | Bin 181 -> 0 bytes nano/images/status_icons/power_norm.gif | Bin 431 -> 0 bytes nano/images/status_icons/power_warn.gif | Bin 485 -> 0 bytes nano/images/status_icons/sig_high.gif | Bin 182 -> 0 bytes nano/images/status_icons/sig_lan.gif | Bin 191 -> 0 bytes nano/images/status_icons/sig_low.gif | Bin 179 -> 0 bytes nano/images/status_icons/sig_none.gif | Bin 202 -> 0 bytes nano/images/uiBackground-Syndicate.png | Bin 154853 -> 0 bytes nano/images/uiBackground.png | Bin 9693 -> 0 bytes nano/images/uiBasicBackground.png | Bin 3707 -> 0 bytes nano/images/uiIcons16.png | Bin 2288 -> 0 bytes nano/images/uiIcons16Green.png | Bin 18091 -> 0 bytes nano/images/uiIcons16Red.png | Bin 17681 -> 0 bytes nano/images/uiIcons24.png | Bin 987 -> 0 bytes nano/images/uiLinkPendingIcon.gif | Bin 673 -> 0 bytes nano/images/uiMaskBackground.png | Bin 98 -> 0 bytes nano/images/uiNoticeBackground.jpg | Bin 40135 -> 0 bytes nano/images/uiTitleFluff-Syndicate.png | Bin 1338 -> 0 bytes nano/images/uiTitleFluff.png | Bin 612 -> 0 bytes nano/js/libraries.min.js | 1 - nano/js/libraries/doT.js | 157 - nano/js/libraries/jquery.timers.js | 4 - nano/js/nano_base_callbacks.js | 126 - nano/js/nano_base_helpers.js | 213 - nano/js/nano_state.js | 121 - nano/js/nano_state_default.js | 14 - nano/js/nano_state_manager.js | 220 - nano/js/nano_template.js | 135 - nano/js/nano_utility.js | 161 - nano/mapbase1024.png | Bin 525330 -> 0 bytes nano/templates/engines_control.tmpl | 110 - nano/templates/hardsuit.tmpl | 257 - nano/templates/layout_basic.tmpl | 3 - nano/templates/layout_default.tmpl | 73 - package.json | 10 + tgui/.eslintignore | 6 - tgui/.eslintrc-sonar.yml | 26 - tgui/.eslintrc.yml | 766 -- tgui/.gitattributes | 1 - tgui/.gitignore | 19 +- tgui/.prettierignore | 12 +- tgui/.prettierrc.yml | 2 +- tgui/.swcrc | 15 + .../@yarnpkg/plugin-interactive-tools.cjs | 363 - tgui/.yarn/releases/yarn-3.3.1.cjs | 823 -- tgui/.yarn/sdks/eslint/bin/eslint.js | 20 - tgui/.yarn/sdks/eslint/lib/api.js | 20 - tgui/.yarn/sdks/eslint/package.json | 9 - tgui/.yarn/sdks/integrations.yml | 5 - tgui/.yarn/sdks/prettier/bin/prettier.cjs | 20 - tgui/.yarn/sdks/prettier/index.cjs | 20 - tgui/.yarn/sdks/prettier/package.json | 7 - tgui/.yarn/sdks/typescript/bin/tsc | 20 - tgui/.yarn/sdks/typescript/bin/tsserver | 20 - tgui/.yarn/sdks/typescript/lib/tsc.js | 20 - tgui/.yarn/sdks/typescript/lib/tsserver.js | 272 - .../sdks/typescript/lib/tsserverlibrary.js | 272 - tgui/.yarn/sdks/typescript/lib/typescript.js | 20 - tgui/.yarn/sdks/typescript/package.json | 10 - tgui/.yarnrc.yml | 19 - tgui/README.md | 194 +- tgui/babel.config.js | 44 - tgui/bunfig.toml | 2 + tgui/docs/chat-embedded-components.md | 8 +- tgui/docs/component-reference.md | 1137 -- tgui/docs/converting-old-tgui-interfaces.md | 52 +- tgui/docs/state-usage.md | 30 + tgui/docs/tgui-for-custom-html-popups.md | 64 +- tgui/docs/tutorial-and-examples.md | 151 +- tgui/docs/writing-tests.md | 2 +- tgui/global.d.ts | 77 +- tgui/happydom.ts | 5 + tgui/package.json | 90 +- tgui/packages/common/assets.ts | 30 + tgui/packages/common/collections.spec.ts | 20 - tgui/packages/common/collections.ts | 313 +- tgui/packages/common/color.js | 84 - tgui/packages/common/events.js | 41 - tgui/packages/common/exhaustive.ts | 19 - tgui/packages/common/fp.js | 49 - tgui/packages/common/keycodes.js | 86 - tgui/packages/common/keys.ts | 139 - tgui/packages/common/math.ts | 107 - tgui/packages/common/package.json | 9 +- tgui/packages/common/{perf.js => perf.ts} | 53 +- tgui/packages/common/random.ts | 32 - tgui/packages/common/react.spec.ts | 20 - tgui/packages/common/react.ts | 77 - tgui/packages/common/redux.test.ts | 16 +- tgui/packages/common/redux.ts | 26 +- tgui/packages/common/storage.js | 308 - tgui/packages/common/storage.ts | 261 + tgui/packages/common/string.babel-plugin.cjs | 73 - tgui/packages/common/string.js | 196 - tgui/packages/common/timer.js | 58 - tgui/packages/common/type-safety.test.ts | 53 + tgui/packages/common/type-safety.ts | 56 + tgui/packages/common/types.ts | 6 - tgui/packages/common/uuid.js | 20 - tgui/packages/common/vector.js | 48 - tgui/packages/common/vector.ts | 55 + ...N_TUTORIAL.txt => README_ICON_TUTORIAL.md} | 0 tgui/packages/tgfont/config.cjs | 18 - tgui/packages/tgfont/icons/air-tank-slash.svg | 2 +- tgui/packages/tgfont/icons/air-tank.svg | 2 +- tgui/packages/tgfont/icons/bad-touch.svg | 47 +- tgui/packages/tgfont/icons/image-minus.svg | 2 +- tgui/packages/tgfont/icons/image-plus.svg | 2 +- .../packages/tgfont/icons/nanotrasen-logo.svg | 4 +- tgui/packages/tgfont/icons/non-binary.svg | 45 +- .../packages/tgfont/icons/prosthetic-full.svg | 28 +- tgui/packages/tgfont/icons/prosthetic-leg.svg | 36 +- tgui/packages/tgfont/icons/sound-minus.svg | 2 +- tgui/packages/tgfont/icons/sound-plus.svg | 2 +- tgui/packages/tgfont/icons/syndicate-logo.svg | 14 +- tgui/packages/tgfont/mkdist.cjs | 13 - tgui/packages/tgfont/package.json | 20 +- tgui/packages/tgfont/static/tgfont.css | 89 +- tgui/packages/tgfont/static/tgfont.eot | Bin 4292 -> 0 bytes tgui/packages/tgfont/static/tgfont.woff2 | Bin 1952 -> 2472 bytes tgui/packages/tgfont/svgtofont.mjs | 20 + tgui/packages/tgui-bench/entrypoint.tsx | 72 - tgui/packages/tgui-bench/index.js | 93 - tgui/packages/tgui-bench/lib/benchmark.d.ts | 219 - tgui/packages/tgui-bench/lib/benchmark.js | 2760 ---- tgui/packages/tgui-bench/package.json | 15 - .../packages/tgui-bench/tests/Button.test.tsx | 85 - tgui/packages/tgui-bench/tests/Flex.test.tsx | 16 - tgui/packages/tgui-bench/tests/Stack.test.tsx | 16 - .../tgui-bench/tests/Tooltip.test.tsx | 20 - tgui/packages/tgui-chat-dark/index.ts | 1 + tgui/packages/tgui-dev-server/dreamseeker.js | 101 - tgui/packages/tgui-dev-server/dreamseeker.ts | 115 + tgui/packages/tgui-dev-server/index.js | 30 - tgui/packages/tgui-dev-server/index.ts | 31 + tgui/packages/tgui-dev-server/link/client.cjs | 179 - tgui/packages/tgui-dev-server/link/client.ts | 172 + .../link/{retrace.js => retrace.ts} | 66 +- tgui/packages/tgui-dev-server/link/server.js | 144 - tgui/packages/tgui-dev-server/link/server.ts | 116 + tgui/packages/tgui-dev-server/logging.js | 72 - tgui/packages/tgui-dev-server/logging.ts | 72 + tgui/packages/tgui-dev-server/package.json | 20 +- .../{reloader.js => reloader.ts} | 106 +- .../{require.js => require.ts} | 2 +- tgui/packages/tgui-dev-server/util.js | 31 - tgui/packages/tgui-dev-server/util.ts | 40 + tgui/packages/tgui-dev-server/webpack.js | 83 - tgui/packages/tgui-dev-server/webpack.ts | 69 + .../tgui-dev-server/{winreg.js => winreg.ts} | 32 +- .../{Notifications.js => Notifications.tsx} | 14 +- .../tgui-panel/{Panel.js => Panel.tsx} | 93 +- tgui/packages/tgui-panel/app.tsx | 12 + ...wPlayingWidget.js => NowPlayingWidget.tsx} | 94 +- tgui/packages/tgui-panel/audio/atoms.ts | 22 + tgui/packages/tgui-panel/audio/handlers.ts | 39 + tgui/packages/tgui-panel/audio/hooks.js | 17 - tgui/packages/tgui-panel/audio/index.js | 10 - tgui/packages/tgui-panel/audio/middleware.js | 37 - tgui/packages/tgui-panel/audio/player.ts | 48 +- tgui/packages/tgui-panel/audio/reducer.js | 50 - tgui/packages/tgui-panel/audio/selectors.js | 7 - .../tgui-panel/chat/ChatPageSettings.js | 99 - .../tgui-panel/chat/ChatPageSettings.tsx | 113 + tgui/packages/tgui-panel/chat/ChatPanel.js | 74 - tgui/packages/tgui-panel/chat/ChatPanel.tsx | 76 + tgui/packages/tgui-panel/chat/ChatTabs.js | 70 - tgui/packages/tgui-panel/chat/ChatTabs.tsx | 61 + tgui/packages/tgui-panel/chat/actions.js | 22 - tgui/packages/tgui-panel/chat/atom.ts | 29 + .../chat/{constants.js => constants.ts} | 26 +- tgui/packages/tgui-panel/chat/handlers.ts | 58 + tgui/packages/tgui-panel/chat/helpers.ts | 101 + tgui/packages/tgui-panel/chat/index.js | 11 - tgui/packages/tgui-panel/chat/middleware.js | 185 - tgui/packages/tgui-panel/chat/migration.ts | 207 + tgui/packages/tgui-panel/chat/model.js | 56 - tgui/packages/tgui-panel/chat/model.ts | 85 + tgui/packages/tgui-panel/chat/reducer.js | 192 - .../chat/{renderer.js => renderer.tsx} | 369 +- ...laceInTextNode.js => replaceInTextNode.ts} | 174 +- tgui/packages/tgui-panel/chat/selectors.js | 17 - tgui/packages/tgui-panel/chat/types.ts | 25 + .../tgui-panel/chat/use-chat-pages.ts | 146 + .../tgui-panel/chat/use-chat-persistence.ts | 99 + .../tgui-panel/events/handlers/assets.ts | 8 + .../events/handlers/roundrestart.ts | 8 + tgui/packages/tgui-panel/events/listeners.ts | 28 + tgui/packages/tgui-panel/events/store.ts | 3 + tgui/packages/tgui-panel/game/actions.js | 11 - tgui/packages/tgui-panel/game/atoms.ts | 40 + .../game/{constants.js => constants.ts} | 0 tgui/packages/tgui-panel/game/hooks.js | 12 - tgui/packages/tgui-panel/game/index.js | 9 - tgui/packages/tgui-panel/game/middleware.js | 53 - tgui/packages/tgui-panel/game/reducer.js | 39 - tgui/packages/tgui-panel/game/selectors.js | 7 - .../tgui-panel/game/use-keep-alive.ts | 16 + tgui/packages/tgui-panel/index.js | 108 - tgui/packages/tgui-panel/index.tsx | 65 + tgui/packages/tgui-panel/package.json | 26 +- tgui/packages/tgui-panel/panelFocus.ts | 18 +- .../{PingIndicator.js => PingIndicator.tsx} | 21 +- tgui/packages/tgui-panel/ping/actions.js | 25 - tgui/packages/tgui-panel/ping/atoms.ts | 11 + .../ping/{constants.js => constants.ts} | 0 tgui/packages/tgui-panel/ping/handlers.ts | 38 + tgui/packages/tgui-panel/ping/helpers.ts | 75 + tgui/packages/tgui-panel/ping/index.js | 9 - tgui/packages/tgui-panel/ping/middleware.js | 60 - tgui/packages/tgui-panel/ping/reducer.js | 50 - tgui/packages/tgui-panel/ping/selectors.js | 7 - tgui/packages/tgui-panel/reconnect.tsx | 14 +- .../tgui-panel/settings/SettingsGeneral.tsx | 202 + .../tgui-panel/settings/SettingsPanel.js | 451 - .../tgui-panel/settings/SettingsPanel.tsx | 54 + .../tgui-panel/settings/SettingsStatPanel.tsx | 77 + .../tgui-panel/settings/TextHighlight.tsx | 211 + tgui/packages/tgui-panel/settings/actions.js | 26 - tgui/packages/tgui-panel/settings/atoms.ts | 56 + .../packages/tgui-panel/settings/constants.js | 39 - .../packages/tgui-panel/settings/constants.ts | 64 + tgui/packages/tgui-panel/settings/helpers.ts | 74 + tgui/packages/tgui-panel/settings/hooks.js | 20 - tgui/packages/tgui-panel/settings/index.js | 10 - .../tgui-panel/settings/middleware.ts | 130 - .../packages/tgui-panel/settings/migration.ts | 128 + tgui/packages/tgui-panel/settings/model.js | 22 - tgui/packages/tgui-panel/settings/reducer.js | 185 - tgui/packages/tgui-panel/settings/scaling.ts | 19 +- .../packages/tgui-panel/settings/selectors.js | 12 - .../tgui-panel/settings/settingsImExport.ts | 92 + .../tgui-panel/{ => settings}/themes.ts | 59 +- tgui/packages/tgui-panel/settings/types.ts | 46 + .../tgui-panel/settings/use-highlights.ts | 109 + .../tgui-panel/settings/use-settings.ts | 56 + .../tgui-panel/styles/components/Chat.scss | 50 +- .../styles/components/Notifications.scss | 4 +- .../tgui-panel/styles/components/Ping.scss | 20 +- .../styles/components/UnreadCount.scss | 12 + tgui/packages/tgui-panel/styles/main.scss | 51 +- .../tgui-panel/styles/tgchat/chat-dark.scss | 5 + .../tgui-panel/styles/tgchat/chat-light.scss | 5 + .../tgui-panel/styles/themes/light.scss | 92 +- tgui/packages/tgui-panel/telemetry.js | 97 - .../tgui-panel/telemetry/constants.ts | 1 + .../packages/tgui-panel/telemetry/handlers.ts | 102 + tgui/packages/tgui-panel/telemetry/helpers.ts | 16 + tgui/packages/tgui-polyfill/00-html5shiv.js | 331 - tgui/packages/tgui-polyfill/01-ie8.js | 837 -- tgui/packages/tgui-polyfill/02-dom4.js | 973 -- tgui/packages/tgui-polyfill/03-css-om.js | 45 - tgui/packages/tgui-polyfill/10-misc.js | 62 - tgui/packages/tgui-polyfill/index.js | 15 - tgui/packages/tgui-polyfill/package.json | 16 - .../packages/tgui-say/ChannelIterator.test.ts | 13 +- tgui/packages/tgui-say/ChannelIterator.ts | 25 +- tgui/packages/tgui-say/ChatHistory.test.ts | 2 + tgui/packages/tgui-say/TguiSay.tsx | 526 +- tgui/packages/tgui-say/constants.ts | 29 +- tgui/packages/tgui-say/helpers.ts | 66 +- tgui/packages/tgui-say/index.tsx | 15 +- tgui/packages/tgui-say/package.json | 19 +- tgui/packages/tgui-say/styles/button.scss | 38 - tgui/packages/tgui-say/styles/colors.scss | 53 +- tgui/packages/tgui-say/styles/content.scss | 7 - tgui/packages/tgui-say/styles/dragzone.scss | 53 - tgui/packages/tgui-say/styles/main.scss | 69 +- tgui/packages/tgui-say/styles/styles.scss | 112 + tgui/packages/tgui-say/styles/textarea.scss | 51 - tgui/packages/tgui-say/styles/window.scss | 35 - tgui/packages/tgui-say/timers.ts | 12 +- tgui/packages/tgui-setup/helpers.js | 520 + tgui/packages/tgui-setup/ntos-error.css | 112 + tgui/packages/tgui-setup/package.json | 14 + tgui/packages/tgui/App.tsx | 11 + tgui/packages/tgui/__mocks__/byond.ts | 30 + tgui/packages/tgui/__mocks__/layouts.tsx | 32 + tgui/packages/tgui/__mocks__/setup.ts | 21 + tgui/packages/tgui/assets.ts | 48 +- .../tgui/assets/transparency_checkerboard.svg | 10 + tgui/packages/tgui/backend.ts | 358 +- .../tgui/components/AnimatedNumber.tsx | 189 - tgui/packages/tgui/components/Autofocus.tsx | 19 - tgui/packages/tgui/components/Blink.js | 69 - tgui/packages/tgui/components/BlockQuote.js | 13 - .../tgui/components/BodyZoneSelector.tsx | 153 - tgui/packages/tgui/components/Box.tsx | 278 - tgui/packages/tgui/components/Button.js | 365 - tgui/packages/tgui/components/ByondUi.js | 138 - tgui/packages/tgui/components/Chart.js | 128 - tgui/packages/tgui/components/Collapsible.js | 46 - tgui/packages/tgui/components/ColorBox.js | 32 - tgui/packages/tgui/components/Dialog.tsx | 85 - tgui/packages/tgui/components/Dimmer.js | 17 - tgui/packages/tgui/components/Divider.js | 20 - .../tgui/components/DraggableControl.js | 287 - tgui/packages/tgui/components/Dropdown.js | 165 - tgui/packages/tgui/components/FitText.tsx | 92 - tgui/packages/tgui/components/Flex.tsx | 115 - tgui/packages/tgui/components/Grid.js | 38 - tgui/packages/tgui/components/Icon.js | 78 - .../packages/tgui/components/InfinitePlane.js | 191 - tgui/packages/tgui/components/Input.js | 160 - tgui/packages/tgui/components/KeyListener.tsx | 39 - tgui/packages/tgui/components/Knob.js | 143 - .../tgui/components/LabeledControls.js | 44 - tgui/packages/tgui/components/LabeledList.tsx | 108 - tgui/packages/tgui/components/MenuBar.tsx | 237 - tgui/packages/tgui/components/Modal.js | 23 - tgui/packages/tgui/components/NoticeBox.js | 27 - tgui/packages/tgui/components/NumberInput.js | 285 - tgui/packages/tgui/components/Popper.tsx | 84 - tgui/packages/tgui/components/ProgressBar.js | 66 - .../tgui/components/RestrictedInput.js | 177 - tgui/packages/tgui/components/RoundGauge.js | 137 - tgui/packages/tgui/components/Section.tsx | 105 - tgui/packages/tgui/components/Slider.js | 129 - tgui/packages/tgui/components/Stack.tsx | 83 - .../tgui/components/StyleableSection.tsx | 26 - tgui/packages/tgui/components/Table.js | 65 - tgui/packages/tgui/components/Tabs.js | 65 - tgui/packages/tgui/components/TextArea.js | 239 - tgui/packages/tgui/components/TimeDisplay.js | 63 - tgui/packages/tgui/components/Tooltip.tsx | 150 - .../tgui/components/TrackOutsideClicks.tsx | 35 - tgui/packages/tgui/components/index.js | 49 - .../{contants.test.ts => constants.test.ts} | 2 + tgui/packages/tgui/constants.ts | 66 +- tgui/packages/tgui/constants/theme.ts | 31 + tgui/packages/tgui/debug/KitchenSink.js | 55 - tgui/packages/tgui/debug/KitchenSink.tsx | 65 + .../tgui/debug/{actions.js => actions.ts} | 0 tgui/packages/tgui/debug/hooks.js | 10 - tgui/packages/tgui/debug/hooks.ts | 12 + .../tgui/debug/{index.js => index.ts} | 0 .../debug/{middleware.js => middleware.ts} | 35 +- .../tgui/debug/{reducer.js => reducer.ts} | 11 +- tgui/packages/tgui/debug/selectors.js | 7 - tgui/packages/tgui/debug/selectors.ts | 9 + tgui/packages/tgui/debug/use-debug.ts | 27 + tgui/packages/tgui/drag.ts | 217 +- tgui/packages/tgui/events.test.ts | 66 - tgui/packages/tgui/events.ts | 233 - tgui/packages/tgui/events/README.md | 114 + tgui/packages/tgui/events/act.ts | 101 + tgui/packages/tgui/events/handlers/assets.ts | 27 + .../packages/tgui/events/handlers/chunking.ts | 66 + tgui/packages/tgui/events/handlers/ping.ts | 5 + .../packages/tgui/events/handlers/suspense.ts | 55 + tgui/packages/tgui/events/handlers/update.ts | 100 + tgui/packages/tgui/events/listeners.ts | 29 + tgui/packages/tgui/events/store.ts | 37 + tgui/packages/tgui/events/types.ts | 48 + tgui/packages/tgui/format.test.ts | 118 - tgui/packages/tgui/format.ts | 169 - tgui/packages/tgui/hotkeys.ts | 220 - tgui/packages/tgui/http.ts | 16 - tgui/packages/tgui/index.tsx | 65 +- tgui/packages/tgui/interfaces/AICard.tsx | 22 +- .../tgui/interfaces/AIMaintenance.tsx | 16 +- tgui/packages/tgui/interfaces/ATM.tsx | 61 +- .../tgui/interfaces/AccessTerminal.tsx | 10 +- .../tgui/interfaces/AccountDatabase.tsx | 72 +- tgui/packages/tgui/interfaces/AgentID.tsx | 40 +- tgui/packages/tgui/interfaces/AirAlarm.tsx | 376 +- .../tgui/interfaces/AirlockConsoleAccess.tsx | 10 +- .../interfaces/AirlockConsoleAdvanced.tsx | 14 +- .../interfaces/AirlockConsoleStandard.tsx | 14 +- .../tgui/interfaces/AlarmMonitoring.tsx | 8 +- tgui/packages/tgui/interfaces/AlertModal.tsx | 31 +- tgui/packages/tgui/interfaces/Apc.tsx | 28 +- .../tgui/interfaces/AppearanceChanger.tsx | 60 +- tgui/packages/tgui/interfaces/AreaAtmos.tsx | 24 +- tgui/packages/tgui/interfaces/ArmorValues.tsx | 18 +- .../packages/tgui/interfaces/AtmoScrubber.tsx | 33 +- .../tgui/interfaces/AtmosAlarmControl.tsx | 18 +- .../tgui/interfaces/AtmosAlertComputer.tsx | 6 +- .../packages/tgui/interfaces/AtmosControl.tsx | 12 +- .../tgui/interfaces/AtmosControlInjector.tsx | 14 +- .../interfaces/AtmosControlSupermatter.tsx | 29 +- .../tgui/interfaces/AtmosControlTank.tsx | 29 +- .../interfaces/AtmosPressureRegulator.tsx | 17 +- tgui/packages/tgui/interfaces/AtmosPump.tsx | 19 +- tgui/packages/tgui/interfaces/Autolathe.tsx | 42 +- .../tgui/interfaces/AwayShuttleManifest.tsx | 28 +- .../tgui/interfaces/BluespaceDriveControl.tsx | 24 +- .../tgui/interfaces/BluespaceDriveJump.tsx | 33 +- tgui/packages/tgui/interfaces/BodyScanner.tsx | 38 +- .../packages/tgui/interfaces/BotanyEditor.tsx | 19 +- .../tgui/interfaces/BotanyIsolator.tsx | 15 +- .../tgui/interfaces/CameraMonitoring.tsx | 28 +- tgui/packages/tgui/interfaces/Canister.tsx | 26 +- .../packages/tgui/interfaces/CargoControl.tsx | 47 +- .../tgui/interfaces/CargoDelivery.tsx | 32 +- tgui/packages/tgui/interfaces/CargoOrder.tsx | 51 +- tgui/packages/tgui/interfaces/CargoPack.tsx | 8 +- .../{Changelog.js => Changelog.jsx} | 35 +- tgui/packages/tgui/interfaces/ChatClient.tsx | 151 +- tgui/packages/tgui/interfaces/ChemCodex.tsx | 16 +- tgui/packages/tgui/interfaces/ChemMaster.tsx | 48 +- .../tgui/interfaces/ChemicalDispenser.tsx | 26 +- .../tgui/interfaces/CircuitPrinter.tsx | 21 +- tgui/packages/tgui/interfaces/CleanBot.tsx | 6 +- .../tgui/interfaces/CommandCommunications.tsx | 51 +- .../tgui/interfaces/ComputerFabricator.tsx | 12 +- .../packages/tgui/interfaces/CookingCodex.tsx | 27 +- .../tgui/interfaces/CoolingUnitThermostat.tsx | 23 +- .../tgui/interfaces/CrusherControl.tsx | 23 +- tgui/packages/tgui/interfaces/CryoTube.tsx | 30 +- tgui/packages/tgui/interfaces/DamageMenu.tsx | 14 +- .../tgui/interfaces/DiagnosticsUnit.tsx | 17 +- .../tgui/interfaces/DigitalWarrant.tsx | 24 +- .../packages/tgui/interfaces/DisposalUnit.tsx | 17 +- .../packages/tgui/interfaces/DnaForensics.tsx | 16 +- .../tgui/interfaces/DockingAirlockConsole.tsx | 14 +- tgui/packages/tgui/interfaces/Docks.tsx | 8 +- tgui/packages/tgui/interfaces/Doors.tsx | 20 +- tgui/packages/tgui/interfaces/DropPod.tsx | 8 +- tgui/packages/tgui/interfaces/EchoEditor.tsx | 8 +- .../tgui/interfaces/EnginesControl.tsx | 14 +- tgui/packages/tgui/interfaces/EnvEditor.tsx | 8 +- .../tgui/interfaces/EscapePodBerthConsole.tsx | 8 +- .../tgui/interfaces/EscapePodConsole.tsx | 8 +- .../EscapeShuttleControlConsole.tsx | 16 +- .../tgui/interfaces/FactionSelect.tsx | 51 +- tgui/packages/tgui/interfaces/Fax.tsx | 42 +- tgui/packages/tgui/interfaces/FileManager.tsx | 25 +- tgui/packages/tgui/interfaces/FireAlarm.tsx | 19 +- tgui/packages/tgui/interfaces/FlavorText.tsx | 11 +- tgui/packages/tgui/interfaces/FollowMenu.tsx | 23 +- tgui/packages/tgui/interfaces/Freezer.tsx | 14 +- tgui/packages/tgui/interfaces/FusionCodex.tsx | 14 +- .../tgui/interfaces/FusionCoreControl.tsx | 32 +- .../tgui/interfaces/FusionGyrotronControl.tsx | 20 +- .../tgui/interfaces/FusionInjectorControl.tsx | 22 +- tgui/packages/tgui/interfaces/GPS.tsx | 25 +- tgui/packages/tgui/interfaces/GeoScanner.tsx | 13 +- .../packages/tgui/interfaces/GhostSpawner.tsx | 134 +- tgui/packages/tgui/interfaces/GunTracker.tsx | 6 +- tgui/packages/tgui/interfaces/Gunnery.tsx | 39 +- tgui/packages/tgui/interfaces/Hardsuit.tsx | 52 +- .../tgui/interfaces/HealthAnalyzer.tsx | 13 +- tgui/packages/tgui/interfaces/Helm.tsx | 779 +- .../tgui/interfaces/HivenetManifest.tsx | 19 +- tgui/packages/tgui/interfaces/Holopad.tsx | 28 +- tgui/packages/tgui/interfaces/Howitzer.tsx | 11 +- .../tgui/interfaces/IDCardModification.tsx | 16 +- .../tgui/interfaces/IPCDiagnostics.tsx | 41 +- .../tgui/interfaces/ImplantTracker.tsx | 6 +- tgui/packages/tgui/interfaces/Infrared.tsx | 12 +- tgui/packages/tgui/interfaces/Jammer.tsx | 8 +- tgui/packages/tgui/interfaces/Janitor.tsx | 8 +- tgui/packages/tgui/interfaces/Jukebox.tsx | 17 +- .../tgui/interfaces/KineticHarvester.tsx | 20 +- tgui/packages/tgui/interfaces/LateJoin.tsx | 41 +- tgui/packages/tgui/interfaces/LawManager.tsx | 56 +- .../tgui/interfaces/LibraryComputer.tsx | 67 +- .../tgui/interfaces/LibraryPublicComputer.tsx | 29 +- .../tgui/interfaces/LibraryScanner.tsx | 8 +- .../tgui/interfaces/LightingControl.tsx | 34 +- .../tgui/interfaces/ListInputModal.tsx | 257 - .../ListInputWindow/ListInputModal.tsx | 225 + .../tgui/interfaces/ListInputWindow/index.tsx | 44 + tgui/packages/tgui/interfaces/ListViewer.tsx | 12 +- tgui/packages/tgui/interfaces/LoreConsole.tsx | 13 +- tgui/packages/tgui/interfaces/Maglock.tsx | 18 +- tgui/packages/tgui/interfaces/Map.tsx | 29 +- tgui/packages/tgui/interfaces/Merchant.tsx | 117 +- .../tgui/interfaces/MiningProcessor.tsx | 8 +- .../packages/tgui/interfaces/MiningVendor.tsx | 8 +- tgui/packages/tgui/interfaces/MobTracker.tsx | 18 +- .../tgui/interfaces/MultiDockingConsole.tsx | 8 +- tgui/packages/tgui/interfaces/Multitool.tsx | 16 +- tgui/packages/tgui/interfaces/NTMonitor.tsx | 14 +- tgui/packages/tgui/interfaces/NTNetRelay.tsx | 10 +- tgui/packages/tgui/interfaces/NTOSArcade.tsx | 18 +- .../tgui/interfaces/NTOSClientManager.tsx | 28 +- tgui/packages/tgui/interfaces/NTOSConfig.tsx | 44 +- .../tgui/interfaces/NTOSDownloader.tsx | 24 +- tgui/packages/tgui/interfaces/NTOSMain.tsx | 10 +- .../tgui/interfaces/NTOSNewsBrowser.tsx | 29 +- .../packages/tgui/interfaces/NarratePanel.tsx | 46 +- tgui/packages/tgui/interfaces/Nav.tsx | 128 +- .../tgui/interfaces/NeuralConfiguration.tsx | 15 +- tgui/packages/tgui/interfaces/NuclearBomb.tsx | 8 +- .../tgui/interfaces/NumberInputModal.tsx | 194 +- .../packages/tgui/interfaces/OdysseyPanel.tsx | 22 +- tgui/packages/tgui/interfaces/OmniFilter.tsx | 10 +- tgui/packages/tgui/interfaces/OmniMixer.tsx | 10 +- tgui/packages/tgui/interfaces/Operating.tsx | 22 +- .../tgui/interfaces/OrderTerminal.tsx | 34 +- tgui/packages/tgui/interfaces/OreDetector.tsx | 10 +- .../tgui/interfaces/OverlayChoice.tsx | 22 +- .../tgui/interfaces/OxyRegenerator.tsx | 8 +- tgui/packages/tgui/interfaces/PenalMechs.tsx | 8 +- .../tgui/interfaces/PermissionsPanel.tsx | 14 +- tgui/packages/tgui/interfaces/Photocopier.tsx | 31 +- tgui/packages/tgui/interfaces/PlayerPanel.tsx | 18 +- .../tgui/interfaces/PortableGenerator.tsx | 24 +- .../packages/tgui/interfaces/PortablePump.tsx | 22 +- .../packages/tgui/interfaces/PowerMonitor.tsx | 28 +- tgui/packages/tgui/interfaces/Proximity.tsx | 22 +- tgui/packages/tgui/interfaces/PsionicShop.tsx | 32 +- tgui/packages/tgui/interfaces/PussyWagon.tsx | 19 +- tgui/packages/tgui/interfaces/QuikPay.tsx | 44 +- tgui/packages/tgui/interfaces/RCON.tsx | 38 +- tgui/packages/tgui/interfaces/Radio.tsx | 20 +- tgui/packages/tgui/interfaces/Records.tsx | 191 +- .../tgui/interfaces/RequestsConsole.tsx | 10 +- .../tgui/interfaces/RoboticsComputer.tsx | 6 +- .../tgui/interfaces/RoboticsControl.tsx | 10 +- tgui/packages/tgui/interfaces/RoundStatus.tsx | 22 +- tgui/packages/tgui/interfaces/SMES.tsx | 38 +- tgui/packages/tgui/interfaces/SeedStorage.tsx | 10 +- tgui/packages/tgui/interfaces/Sensors.tsx | 641 +- .../tgui/interfaces/ShieldCapacitor.tsx | 18 +- .../tgui/interfaces/ShieldGenerator.tsx | 24 +- .../tgui/interfaces/ShuttleControlConsole.tsx | 8 +- .../interfaces/ShuttleControlConsoleLift.tsx | 8 +- .../interfaces/ShuttleControlConsoleMulti.tsx | 8 +- .../ShuttleControlConsoleMultiAntag.tsx | 9 +- .../ShuttleControlConsoleMultiExplore.tsx | 9 +- .../ShuttleControlConsoleMultiLift.tsx | 8 +- tgui/packages/tgui/interfaces/Signaler.tsx | 20 +- .../tgui/interfaces/SimpleDockingConsole.tsx | 8 +- tgui/packages/tgui/interfaces/Sleeper.tsx | 27 +- tgui/packages/tgui/interfaces/SmartFridge.tsx | 43 +- tgui/packages/tgui/interfaces/SongEditor.tsx | 8 +- .../tgui/interfaces/SongUsageInfo.tsx | 6 +- tgui/packages/tgui/interfaces/SpaceHeater.tsx | 16 +- .../tgui/interfaces/StackingMachine.tsx | 12 +- .../tgui/interfaces/StirlingEngine.tsx | 10 +- tgui/packages/tgui/interfaces/SuitCycler.tsx | 22 +- tgui/packages/tgui/interfaces/SuitSensors.tsx | 14 +- tgui/packages/tgui/interfaces/Supermatter.tsx | 18 +- .../tgui/interfaces/SuspensionGenerator.tsx | 15 +- tgui/packages/tgui/interfaces/Synthesizer.tsx | 14 +- .../tgui/interfaces/SyntheticFabricator.tsx | 39 +- tgui/packages/tgui/interfaces/Tank.tsx | 23 +- .../tgui/interfaces/TankDispenser.tsx | 8 +- tgui/packages/tgui/interfaces/Teleporter.tsx | 16 +- .../tgui/interfaces/TextInputModal.tsx | 89 +- tgui/packages/tgui/interfaces/Timer.tsx | 87 +- tgui/packages/tgui/interfaces/TrainEngine.tsx | 15 +- .../tgui/interfaces/TransferValve.tsx | 16 +- .../tgui/interfaces/TurbineComputer.js | 23 +- tgui/packages/tgui/interfaces/TurboLift.tsx | 8 +- .../tgui/interfaces/TurretControl.tsx | 18 +- .../tgui/interfaces/TurretControlPorta.tsx | 14 +- tgui/packages/tgui/interfaces/Uplink.tsx | 340 +- tgui/packages/tgui/interfaces/Vending.tsx | 31 +- .../tgui/interfaces/VitalsMonitor.tsx | 14 +- tgui/packages/tgui/interfaces/VotePanel.tsx | 27 +- tgui/packages/tgui/interfaces/Voting.tsx | 21 +- .../tgui/interfaces/WeaponsAnalyzer.tsx | 28 +- tgui/packages/tgui/interfaces/Wires.tsx | 149 +- .../tgui/interfaces/common/AccessConfig.js | 137 - .../tgui/interfaces/common/AccessConfig.tsx | 202 + .../common/{AccessList.js => AccessList.jsx} | 135 +- .../tgui/interfaces/common/AtmosControls.tsx | 82 +- .../tgui/interfaces/common/AtmosHandbook.tsx | 126 +- .../{BeakerContents.js => BeakerContents.tsx} | 2 +- .../interfaces/common/CharacterPreview.tsx | 2 +- .../tgui/interfaces/common/EditableText.tsx | 27 +- .../tgui/interfaces/common/FakeTerminal.tsx | 58 + .../tgui/interfaces/common/GasmixParser.tsx | 137 - .../tgui/interfaces/common/InputButtons.tsx | 39 +- ...oticeBox.js => InterfaceLockNoticeBox.jsx} | 7 +- .../tgui/interfaces/common/JobToIcon.ts | 14 +- .../tgui/interfaces/common/Loader.tsx | 6 +- .../tgui/interfaces/common/LoadingScreen.tsx | 35 + .../tgui/interfaces/common/Manifest.tsx | 2 +- .../interfaces/common/ManifestSection.tsx | 35 +- .../tgui/interfaces/common/MinimapView.tsx | 4 +- .../tgui/interfaces/common/PaginatedBook.tsx | 404 + .../{PortableAtmos.js => PortableAtmos.jsx} | 9 +- .../{ReagentLookup.js => ReagentLookup.jsx} | 9 +- .../{RecipeLookup.js => RecipeLookup.jsx} | 31 +- .../tgui/interfaces/common/SearchBar.tsx | 58 + .../common/StatusDisplayControls.tsx | 61 +- .../tgui/interfaces/pAIDirectives.tsx | 6 +- tgui/packages/tgui/interfaces/pAIDoorjack.tsx | 8 +- tgui/packages/tgui/interfaces/pAIRadio.tsx | 12 +- .../tgui/interfaces/pAIRecruitment.tsx | 22 +- tgui/packages/tgui/layouts/Layout.js | 49 - tgui/packages/tgui/layouts/Layout.tsx | 79 + .../layouts/{NtosWindow.js => NtosWindow.tsx} | 120 +- tgui/packages/tgui/layouts/Pane.js | 40 - tgui/packages/tgui/layouts/Pane.tsx | 56 + tgui/packages/tgui/layouts/TitleBar.tsx | 73 + tgui/packages/tgui/layouts/Window.js | 212 - tgui/packages/tgui/layouts/Window.tsx | 199 + .../tgui/layouts/{index.js => index.ts} | 0 tgui/packages/tgui/links.test.ts | 79 - tgui/packages/tgui/links.ts | 46 - tgui/packages/tgui/logging.ts | 2 +- tgui/packages/tgui/package.json | 39 +- tgui/packages/tgui/process.ts | 30 + tgui/packages/tgui/renderer.ts | 67 +- tgui/packages/tgui/routes.tsx | 148 +- tgui/packages/tgui/sanitize.test.ts | 36 - tgui/packages/tgui/sanitize.ts | 12 +- tgui/packages/tgui/stack.ts | 28 + tgui/packages/tgui/store.ts | 126 - tgui/packages/tgui/stories/Blink.stories.js | 4 +- tgui/packages/tgui/stories/Blink.stories.tsx | 20 + .../tgui/stories/BlockQuote.stories.js | 4 +- .../tgui/stories/BlockQuote.stories.tsx | 24 + tgui/packages/tgui/stories/Box.stories.js | 4 +- tgui/packages/tgui/stories/Box.stories.tsx | 27 + tgui/packages/tgui/stories/Button.stories.js | 4 +- tgui/packages/tgui/stories/Button.stories.tsx | 67 + tgui/packages/tgui/stories/ByondUi.stories.js | 4 +- .../packages/tgui/stories/ByondUi.stories.tsx | 63 + .../tgui/stories/Collapsible.stories.js | 4 +- .../tgui/stories/Collapsible.stories.tsx | 24 + tgui/packages/tgui/stories/Flex.stories.js | 4 +- tgui/packages/tgui/stories/Flex.stories.tsx | 68 + tgui/packages/tgui/stories/Input.stories.js | 54 +- tgui/packages/tgui/stories/Input.stories.tsx | 74 + .../tgui/stories/LabeledList.stories.js | 4 +- .../tgui/stories/LabeledList.stories.tsx | 73 + tgui/packages/tgui/stories/Popper.stories.js | 2 +- .../tgui/stories/ProgressBar.stories.js | 6 +- .../tgui/stories/ProgressBar.stories.tsx | 54 + tgui/packages/tgui/stories/Stack.stories.js | 4 +- tgui/packages/tgui/stories/Stack.stories.tsx | 59 + tgui/packages/tgui/stories/Storage.stories.js | 4 +- .../packages/tgui/stories/Storage.stories.tsx | 42 + tgui/packages/tgui/stories/Tabs.stories.js | 6 +- tgui/packages/tgui/stories/Tabs.stories.tsx | 152 + tgui/packages/tgui/stories/Themes.stories.js | 4 +- tgui/packages/tgui/stories/Themes.stories.tsx | 28 + tgui/packages/tgui/stories/Tooltip.stories.js | 2 +- .../packages/tgui/stories/Tooltip.stories.tsx | 57 + tgui/packages/tgui/stories/common.js | 2 +- tgui/packages/tgui/stories/common.tsx | 19 + .../tgui/styles/assets/bg-deforest.svg | 3 + .../tgui/styles/atomic/candystripe.scss | 8 - .../tgui/styles/atomic/centered-image.scss | 7 - tgui/packages/tgui/styles/atomic/color.scss | 21 - .../tgui/styles/atomic/debug-layout.scss | 17 - .../packages/tgui/styles/atomic/fit-text.scss | 14 - tgui/packages/tgui/styles/atomic/links.scss | 12 - tgui/packages/tgui/styles/atomic/outline.scss | 47 - tgui/packages/tgui/styles/atomic/text.scss | 44 - tgui/packages/tgui/styles/base_original.scss | 32 + tgui/packages/tgui/styles/colors.scss | 52 +- .../packages/tgui/styles/colors_original.scss | 100 + .../tgui/styles/components/BlockQuote.scss | 20 - .../tgui/styles/components/Button.scss | 172 - .../tgui/styles/components/ColorBox.scss | 12 - .../tgui/styles/components/Dialog.scss | 105 - .../tgui/styles/components/Dimmer.scss | 22 - .../tgui/styles/components/Divider.scss | 27 - .../tgui/styles/components/Dropdown.scss | 80 - .../packages/tgui/styles/components/Flex.scss | 31 - .../packages/tgui/styles/components/Icon.scss | 25 - .../tgui/styles/components/Input.scss | 75 - .../packages/tgui/styles/components/Knob.scss | 131 - .../tgui/styles/components/LabeledList.scss | 49 - .../tgui/styles/components/MenuBar.scss | 75 - .../tgui/styles/components/Modal.scss | 14 - .../tgui/styles/components/NoticeBox.scss | 65 - .../tgui/styles/components/NumberInput.scss | 76 - .../tgui/styles/components/ProgressBar.scss | 63 - .../tgui/styles/components/RoundGauge.scss | 88 - .../tgui/styles/components/Section.scss | 143 - .../tgui/styles/components/Slider.scss | 54 - .../tgui/styles/components/Stack.scss | 35 - .../tgui/styles/components/Table.scss | 44 - .../packages/tgui/styles/components/Tabs.scss | 144 - .../tgui/styles/components/TextArea.scss | 90 - .../tgui/styles/components/Tooltip.scss | 24 - tgui/packages/tgui/styles/css-variables.scss | 13 + tgui/packages/tgui/styles/functions.scss | 62 +- .../tgui/styles/interfaces/Accounting.scss | 42 + .../tgui/styles/interfaces/AlertModal.scss | 10 +- .../tgui/styles/interfaces/AnomalyTower.scss | 33 + .../styles/interfaces/AntagInfoHeretic.scss | 193 + .../tgui/styles/interfaces/Changelog.scss | 13 + .../interfaces/CivCargoHoldTerminal.scss | 23 + .../tgui/styles/interfaces/ColorPicker.scss | 150 + .../tgui/styles/interfaces/CrewManifest.scss | 91 +- .../tgui/styles/interfaces/DeForestLogo.scss | 7 + .../styles/interfaces/DetectiveBoard.scss | 230 + .../tgui/styles/interfaces/Emojipedia.scss | 8 + .../tgui/styles/interfaces/EventLogger.scss | 16 + .../interfaces/ExperimentConfigure.scss | 108 + .../tgui/styles/interfaces/Fabricator.scss | 207 + .../tgui/styles/interfaces/HellishRunes.scss | 20 + .../tgui/styles/interfaces/HotKeysHelp.scss | 4 + .../tgui/styles/interfaces/Hypertorus.scss | 158 + .../styles/interfaces/IntegratedCircuit.scss | 143 + .../tgui/styles/interfaces/LibraryAdmin.scss | 18 + .../styles/interfaces/LibraryComputer.scss | 11 + .../tgui/styles/interfaces/ListInput.scss | 12 +- .../tgui/styles/interfaces/LoreConsole.scss | 17 - .../tgui/styles/interfaces/Mecha.scss | 41 + .../tgui/styles/interfaces/NtosMessenger.scss | 101 + .../tgui/styles/interfaces/NtosNanopaint.scss | 34 + .../tgui/styles/interfaces/NtosNotepad.scss | 43 + .../tgui/styles/interfaces/NuclearBomb.scss | 102 + .../styles/interfaces/OperatingComputer.scss | 25 + .../tgui/styles/interfaces/Orbit.scss | 19 + .../tgui/styles/interfaces/Paper.scss | 18 + .../styles/interfaces/PreferencesMenu.scss | 240 + .../tgui/styles/interfaces/Radio.scss | 53 - .../styles/interfaces/RequestManager.scss | 93 +- .../tgui/styles/interfaces/Roulette.scss | 96 + .../packages/tgui/styles/interfaces/Safe.scss | 92 + .../tgui/styles/interfaces/SlotMachine.scss | 186 + .../tgui/styles/interfaces/SpriteAuditor.scss | 3 + .../tgui/styles/interfaces/Techweb.scss | 68 + .../tgui/styles/interfaces/Trophycase.scss | 5 + .../tgui/styles/interfaces/Uplink.scss | 103 + tgui/packages/tgui/styles/layouts/Layout.scss | 62 +- .../tgui/styles/layouts/NtosHeader.scss | 28 + .../tgui/styles/layouts/NtosWindow.scss | 8 +- .../tgui/styles/layouts/TitleBar.scss | 186 +- tgui/packages/tgui/styles/layouts/Window.scss | 59 +- tgui/packages/tgui/styles/main.scss | 87 +- tgui/packages/tgui/styles/main_original.scss | 80 + tgui/packages/tgui/styles/reset.scss | 18 +- .../packages/tgui/styles/themes/abductor.scss | 77 +- tgui/packages/tgui/styles/themes/admin.scss | 24 +- .../tgui/styles/themes/cardtable.scss | 61 +- .../tgui/styles/themes/hackerman.scss | 60 +- .../tgui/styles/themes/hammertail.scss | 75 +- .../tgui/styles/themes/hephaestus.scss | 78 +- tgui/packages/tgui/styles/themes/idris.scss | 75 +- .../tgui/styles/themes/malfunction.scss | 75 +- .../tgui/styles/themes/nanotrasen.scss | 75 +- tgui/packages/tgui/styles/themes/neutral.scss | 44 +- tgui/packages/tgui/styles/themes/ntOS95.scss | 67 +- tgui/packages/tgui/styles/themes/ntos.scss | 39 +- .../packages/tgui/styles/themes/ntos_cat.scss | 66 +- .../tgui/styles/themes/ntos_darkmode.scss | 39 +- .../tgui/styles/themes/ntos_lightmode.scss | 48 +- .../tgui/styles/themes/ntos_spooky.scss | 81 +- .../tgui/styles/themes/ntos_synth.scss | 66 +- .../tgui/styles/themes/ntos_terminal.scss | 62 +- tgui/packages/tgui/styles/themes/paper.scss | 71 +- tgui/packages/tgui/styles/themes/retro.scss | 59 +- .../tgui/styles/themes/spookyconsole.scss | 84 +- .../tgui/styles/themes/syndicate.scss | 75 +- tgui/packages/tgui/styles/themes/vaurca.scss | 63 +- tgui/packages/tgui/styles/themes/wizard.scss | 77 +- .../tgui/styles/themes/zavodskoi.scss | 73 +- tgui/packages/tgui/styles/themes/zenghu.scss | 78 +- tgui/public/bg-deforest.svg | 3 + tgui/public/bg-nanotrasen.svg | 8 + tgui/public/helpers.min.js | 1 + tgui/public/iframe.html | 283 +- tgui/public/ntos-error.min.css | 1 + tgui/public/tgui-polyfill.min.js | 1 - tgui/public/tgui.html | 744 +- tgui/public/transparency_checkerboard.svg | 10 + tgui/rspack.config-dev.ts | 29 + tgui/rspack.config.ts | 141 + tgui/tsconfig.json | 48 +- tgui/webpack.config.js | 15 +- tgui/yarn.lock | 10379 ---------------- tools/bootstrap/javascript.bat | 27 + tools/bootstrap/javascript.sh | 32 + tools/bootstrap/javascript_.ps1 | 116 + tools/bootstrap/node | 73 - tools/bootstrap/node.bat | 20 - tools/bootstrap/node_.ps1 | 60 - tools/build/build | 4 - tools/build/build.bat | 2 +- tools/build/build.sh | 5 + tools/build/{build.js => build.ts} | 259 +- tools/build/bun.lock | 19 + tools/build/juke/index.d.ts | 481 +- tools/build/juke/index.js | 3352 ++--- tools/build/lib/bun.ts | 28 + tools/build/lib/byond.js | 195 - tools/build/lib/byond.ts | 237 + tools/build/lib/download.ts | 39 + tools/build/lib/helpers.ts | 11 + tools/build/lib/tgs.ts | 15 + tools/build/lib/{winreg.js => winreg.ts} | 32 +- tools/build/lib/yarn.js | 16 - tools/build/package.json | 7 +- tools/requirements.txt | 3 +- tools/tgs_scripts/PreCompile.sh | 2 +- 930 files changed, 23130 insertions(+), 50520 deletions(-) create mode 100644 .github/actions/setup_bun/action.yml create mode 100644 .github/actions/setup_node/action.yml create mode 100644 .github/workflows/update_tgui.yml create mode 100644 biome.json create mode 100644 bun.lock create mode 100644 code/__DEFINES/dcs/signals/signals_tgui.dm create mode 100644 code/__DEFINES/tgs.config.dm delete mode 100644 code/controllers/subsystems/processing/nanoui.dm rename code/controllers/subsystems/{processing => }/tgui.dm (71%) create mode 100644 code/datums/chat_payload.dm delete mode 100644 code/modules/nano/modules/nano_module.dm delete mode 100644 code/modules/nano/nanoexternal.dm delete mode 100644 code/modules/nano/nanomapgen.dm delete mode 100644 code/modules/nano/nanoui.dm create mode 100644 code/modules/tgchat/README.md create mode 100644 code/modules/tgs/core/byond_world_export.dm rename code/modules/{nano => tgui}/modules/follow_menu.dm (100%) rename code/modules/{nano => tgui}/modules/human_appearance.dm (100%) rename code/modules/{nano => tgui}/modules/narrate_panel.dm (100%) create mode 100644 code/modules/tgui_input/checkboxes.dm create mode 100644 code/modules/tgui_input/keycombo.dm create mode 100644 html/changelogs/Bat-TGUIReactMigration.yml delete mode 100644 nano/TemplatesGuide.txt delete mode 100644 nano/To BYOND Cache.bat delete mode 100644 nano/css/icons.css delete mode 100644 nano/css/layout_basic.css delete mode 100644 nano/css/layout_default.css delete mode 100644 nano/css/shared.css delete mode 100644 nano/images/c_charging.gif delete mode 100644 nano/images/c_discharging.gif delete mode 100644 nano/images/c_max.gif delete mode 100644 nano/images/status_icons/alarm_green.gif delete mode 100644 nano/images/status_icons/alarm_red.gif delete mode 100644 nano/images/status_icons/batt_100.gif delete mode 100644 nano/images/status_icons/batt_20.gif delete mode 100644 nano/images/status_icons/batt_40.gif delete mode 100644 nano/images/status_icons/batt_5.gif delete mode 100644 nano/images/status_icons/batt_60.gif delete mode 100644 nano/images/status_icons/batt_80.gif delete mode 100644 nano/images/status_icons/charging.gif delete mode 100644 nano/images/status_icons/downloader_finished.gif delete mode 100644 nano/images/status_icons/downloader_running.gif delete mode 100644 nano/images/status_icons/ntnrc_idle.gif delete mode 100644 nano/images/status_icons/ntnrc_new.gif delete mode 100644 nano/images/status_icons/power_norm.gif delete mode 100644 nano/images/status_icons/power_warn.gif delete mode 100644 nano/images/status_icons/sig_high.gif delete mode 100644 nano/images/status_icons/sig_lan.gif delete mode 100644 nano/images/status_icons/sig_low.gif delete mode 100644 nano/images/status_icons/sig_none.gif delete mode 100644 nano/images/uiBackground-Syndicate.png delete mode 100644 nano/images/uiBackground.png delete mode 100644 nano/images/uiBasicBackground.png delete mode 100644 nano/images/uiIcons16.png delete mode 100644 nano/images/uiIcons16Green.png delete mode 100644 nano/images/uiIcons16Red.png delete mode 100644 nano/images/uiIcons24.png delete mode 100644 nano/images/uiLinkPendingIcon.gif delete mode 100644 nano/images/uiMaskBackground.png delete mode 100644 nano/images/uiNoticeBackground.jpg delete mode 100644 nano/images/uiTitleFluff-Syndicate.png delete mode 100644 nano/images/uiTitleFluff.png delete mode 100644 nano/js/libraries.min.js delete mode 100644 nano/js/libraries/doT.js delete mode 100644 nano/js/libraries/jquery.timers.js delete mode 100644 nano/js/nano_base_callbacks.js delete mode 100644 nano/js/nano_base_helpers.js delete mode 100644 nano/js/nano_state.js delete mode 100644 nano/js/nano_state_default.js delete mode 100644 nano/js/nano_state_manager.js delete mode 100644 nano/js/nano_template.js delete mode 100644 nano/js/nano_utility.js delete mode 100644 nano/mapbase1024.png delete mode 100644 nano/templates/engines_control.tmpl delete mode 100644 nano/templates/hardsuit.tmpl delete mode 100644 nano/templates/layout_basic.tmpl delete mode 100644 nano/templates/layout_default.tmpl create mode 100644 package.json delete mode 100644 tgui/.eslintignore delete mode 100644 tgui/.eslintrc-sonar.yml delete mode 100644 tgui/.eslintrc.yml create mode 100644 tgui/.swcrc delete mode 100644 tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs delete mode 100644 tgui/.yarn/releases/yarn-3.3.1.cjs delete mode 100644 tgui/.yarn/sdks/eslint/bin/eslint.js delete mode 100644 tgui/.yarn/sdks/eslint/lib/api.js delete mode 100644 tgui/.yarn/sdks/eslint/package.json delete mode 100644 tgui/.yarn/sdks/integrations.yml delete mode 100644 tgui/.yarn/sdks/prettier/bin/prettier.cjs delete mode 100644 tgui/.yarn/sdks/prettier/index.cjs delete mode 100644 tgui/.yarn/sdks/prettier/package.json delete mode 100644 tgui/.yarn/sdks/typescript/bin/tsc delete mode 100644 tgui/.yarn/sdks/typescript/bin/tsserver delete mode 100644 tgui/.yarn/sdks/typescript/lib/tsc.js delete mode 100644 tgui/.yarn/sdks/typescript/lib/tsserver.js delete mode 100644 tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js delete mode 100644 tgui/.yarn/sdks/typescript/lib/typescript.js delete mode 100644 tgui/.yarn/sdks/typescript/package.json delete mode 100644 tgui/.yarnrc.yml delete mode 100644 tgui/babel.config.js create mode 100644 tgui/bunfig.toml delete mode 100644 tgui/docs/component-reference.md create mode 100644 tgui/docs/state-usage.md create mode 100644 tgui/happydom.ts create mode 100644 tgui/packages/common/assets.ts delete mode 100644 tgui/packages/common/collections.spec.ts delete mode 100644 tgui/packages/common/color.js delete mode 100644 tgui/packages/common/events.js delete mode 100644 tgui/packages/common/exhaustive.ts delete mode 100644 tgui/packages/common/fp.js delete mode 100644 tgui/packages/common/keycodes.js delete mode 100644 tgui/packages/common/keys.ts delete mode 100644 tgui/packages/common/math.ts rename tgui/packages/common/{perf.js => perf.ts} (50%) delete mode 100644 tgui/packages/common/random.ts delete mode 100644 tgui/packages/common/react.spec.ts delete mode 100644 tgui/packages/common/react.ts delete mode 100644 tgui/packages/common/storage.js create mode 100644 tgui/packages/common/storage.ts delete mode 100644 tgui/packages/common/string.babel-plugin.cjs delete mode 100644 tgui/packages/common/string.js delete mode 100644 tgui/packages/common/timer.js create mode 100644 tgui/packages/common/type-safety.test.ts create mode 100644 tgui/packages/common/type-safety.ts delete mode 100644 tgui/packages/common/types.ts delete mode 100644 tgui/packages/common/uuid.js delete mode 100644 tgui/packages/common/vector.js create mode 100644 tgui/packages/common/vector.ts rename tgui/packages/tgfont/{README_ICON_TUTORIAL.txt => README_ICON_TUTORIAL.md} (100%) delete mode 100644 tgui/packages/tgfont/config.cjs delete mode 100644 tgui/packages/tgfont/mkdist.cjs delete mode 100644 tgui/packages/tgfont/static/tgfont.eot create mode 100644 tgui/packages/tgfont/svgtofont.mjs delete mode 100644 tgui/packages/tgui-bench/entrypoint.tsx delete mode 100644 tgui/packages/tgui-bench/index.js delete mode 100644 tgui/packages/tgui-bench/lib/benchmark.d.ts delete mode 100644 tgui/packages/tgui-bench/lib/benchmark.js delete mode 100644 tgui/packages/tgui-bench/package.json delete mode 100644 tgui/packages/tgui-bench/tests/Button.test.tsx delete mode 100644 tgui/packages/tgui-bench/tests/Flex.test.tsx delete mode 100644 tgui/packages/tgui-bench/tests/Stack.test.tsx delete mode 100644 tgui/packages/tgui-bench/tests/Tooltip.test.tsx create mode 100644 tgui/packages/tgui-chat-dark/index.ts delete mode 100644 tgui/packages/tgui-dev-server/dreamseeker.js create mode 100644 tgui/packages/tgui-dev-server/dreamseeker.ts delete mode 100644 tgui/packages/tgui-dev-server/index.js create mode 100644 tgui/packages/tgui-dev-server/index.ts delete mode 100644 tgui/packages/tgui-dev-server/link/client.cjs create mode 100644 tgui/packages/tgui-dev-server/link/client.ts rename tgui/packages/tgui-dev-server/link/{retrace.js => retrace.ts} (56%) delete mode 100644 tgui/packages/tgui-dev-server/link/server.js create mode 100644 tgui/packages/tgui-dev-server/link/server.ts delete mode 100644 tgui/packages/tgui-dev-server/logging.js create mode 100644 tgui/packages/tgui-dev-server/logging.ts rename tgui/packages/tgui-dev-server/{reloader.js => reloader.ts} (52%) rename tgui/packages/tgui-dev-server/{require.js => require.ts} (73%) delete mode 100644 tgui/packages/tgui-dev-server/util.js create mode 100644 tgui/packages/tgui-dev-server/util.ts delete mode 100644 tgui/packages/tgui-dev-server/webpack.js create mode 100644 tgui/packages/tgui-dev-server/webpack.ts rename tgui/packages/tgui-dev-server/{winreg.js => winreg.ts} (69%) rename tgui/packages/tgui-panel/{Notifications.js => Notifications.tsx} (80%) rename tgui/packages/tgui-panel/{Panel.js => Panel.tsx} (50%) create mode 100644 tgui/packages/tgui-panel/app.tsx rename tgui/packages/tgui-panel/audio/{NowPlayingWidget.js => NowPlayingWidget.tsx} (51%) create mode 100644 tgui/packages/tgui-panel/audio/atoms.ts create mode 100644 tgui/packages/tgui-panel/audio/handlers.ts delete mode 100644 tgui/packages/tgui-panel/audio/hooks.js delete mode 100644 tgui/packages/tgui-panel/audio/index.js delete mode 100644 tgui/packages/tgui-panel/audio/middleware.js delete mode 100644 tgui/packages/tgui-panel/audio/reducer.js delete mode 100644 tgui/packages/tgui-panel/audio/selectors.js delete mode 100644 tgui/packages/tgui-panel/chat/ChatPageSettings.js create mode 100644 tgui/packages/tgui-panel/chat/ChatPageSettings.tsx delete mode 100644 tgui/packages/tgui-panel/chat/ChatPanel.js create mode 100644 tgui/packages/tgui-panel/chat/ChatPanel.tsx delete mode 100644 tgui/packages/tgui-panel/chat/ChatTabs.js create mode 100644 tgui/packages/tgui-panel/chat/ChatTabs.tsx delete mode 100644 tgui/packages/tgui-panel/chat/actions.js create mode 100644 tgui/packages/tgui-panel/chat/atom.ts rename tgui/packages/tgui-panel/chat/{constants.js => constants.ts} (83%) create mode 100644 tgui/packages/tgui-panel/chat/handlers.ts create mode 100644 tgui/packages/tgui-panel/chat/helpers.ts delete mode 100644 tgui/packages/tgui-panel/chat/index.js delete mode 100644 tgui/packages/tgui-panel/chat/middleware.js create mode 100644 tgui/packages/tgui-panel/chat/migration.ts delete mode 100644 tgui/packages/tgui-panel/chat/model.js create mode 100644 tgui/packages/tgui-panel/chat/model.ts delete mode 100644 tgui/packages/tgui-panel/chat/reducer.js rename tgui/packages/tgui-panel/chat/{renderer.js => renderer.tsx} (68%) rename tgui/packages/tgui-panel/chat/{replaceInTextNode.js => replaceInTextNode.ts} (59%) delete mode 100644 tgui/packages/tgui-panel/chat/selectors.js create mode 100644 tgui/packages/tgui-panel/chat/types.ts create mode 100644 tgui/packages/tgui-panel/chat/use-chat-pages.ts create mode 100644 tgui/packages/tgui-panel/chat/use-chat-persistence.ts create mode 100644 tgui/packages/tgui-panel/events/handlers/assets.ts create mode 100644 tgui/packages/tgui-panel/events/handlers/roundrestart.ts create mode 100644 tgui/packages/tgui-panel/events/listeners.ts create mode 100644 tgui/packages/tgui-panel/events/store.ts delete mode 100644 tgui/packages/tgui-panel/game/actions.js create mode 100644 tgui/packages/tgui-panel/game/atoms.ts rename tgui/packages/tgui-panel/game/{constants.js => constants.ts} (100%) delete mode 100644 tgui/packages/tgui-panel/game/hooks.js delete mode 100644 tgui/packages/tgui-panel/game/index.js delete mode 100644 tgui/packages/tgui-panel/game/middleware.js delete mode 100644 tgui/packages/tgui-panel/game/reducer.js delete mode 100644 tgui/packages/tgui-panel/game/selectors.js create mode 100644 tgui/packages/tgui-panel/game/use-keep-alive.ts delete mode 100644 tgui/packages/tgui-panel/index.js create mode 100644 tgui/packages/tgui-panel/index.tsx rename tgui/packages/tgui-panel/ping/{PingIndicator.js => PingIndicator.tsx} (57%) delete mode 100644 tgui/packages/tgui-panel/ping/actions.js create mode 100644 tgui/packages/tgui-panel/ping/atoms.ts rename tgui/packages/tgui-panel/ping/{constants.js => constants.ts} (100%) create mode 100644 tgui/packages/tgui-panel/ping/handlers.ts create mode 100644 tgui/packages/tgui-panel/ping/helpers.ts delete mode 100644 tgui/packages/tgui-panel/ping/index.js delete mode 100644 tgui/packages/tgui-panel/ping/middleware.js delete mode 100644 tgui/packages/tgui-panel/ping/reducer.js delete mode 100644 tgui/packages/tgui-panel/ping/selectors.js create mode 100644 tgui/packages/tgui-panel/settings/SettingsGeneral.tsx delete mode 100644 tgui/packages/tgui-panel/settings/SettingsPanel.js create mode 100644 tgui/packages/tgui-panel/settings/SettingsPanel.tsx create mode 100644 tgui/packages/tgui-panel/settings/SettingsStatPanel.tsx create mode 100644 tgui/packages/tgui-panel/settings/TextHighlight.tsx delete mode 100644 tgui/packages/tgui-panel/settings/actions.js create mode 100644 tgui/packages/tgui-panel/settings/atoms.ts delete mode 100644 tgui/packages/tgui-panel/settings/constants.js create mode 100644 tgui/packages/tgui-panel/settings/constants.ts create mode 100644 tgui/packages/tgui-panel/settings/helpers.ts delete mode 100644 tgui/packages/tgui-panel/settings/hooks.js delete mode 100644 tgui/packages/tgui-panel/settings/index.js delete mode 100644 tgui/packages/tgui-panel/settings/middleware.ts create mode 100644 tgui/packages/tgui-panel/settings/migration.ts delete mode 100644 tgui/packages/tgui-panel/settings/model.js delete mode 100644 tgui/packages/tgui-panel/settings/reducer.js delete mode 100644 tgui/packages/tgui-panel/settings/selectors.js create mode 100644 tgui/packages/tgui-panel/settings/settingsImExport.ts rename tgui/packages/tgui-panel/{ => settings}/themes.ts (64%) create mode 100644 tgui/packages/tgui-panel/settings/types.ts create mode 100644 tgui/packages/tgui-panel/settings/use-highlights.ts create mode 100644 tgui/packages/tgui-panel/settings/use-settings.ts create mode 100644 tgui/packages/tgui-panel/styles/components/UnreadCount.scss delete mode 100644 tgui/packages/tgui-panel/telemetry.js create mode 100644 tgui/packages/tgui-panel/telemetry/constants.ts create mode 100644 tgui/packages/tgui-panel/telemetry/handlers.ts create mode 100644 tgui/packages/tgui-panel/telemetry/helpers.ts delete mode 100644 tgui/packages/tgui-polyfill/00-html5shiv.js delete mode 100644 tgui/packages/tgui-polyfill/01-ie8.js delete mode 100644 tgui/packages/tgui-polyfill/02-dom4.js delete mode 100644 tgui/packages/tgui-polyfill/03-css-om.js delete mode 100644 tgui/packages/tgui-polyfill/10-misc.js delete mode 100644 tgui/packages/tgui-polyfill/index.js delete mode 100644 tgui/packages/tgui-polyfill/package.json delete mode 100644 tgui/packages/tgui-say/styles/button.scss delete mode 100644 tgui/packages/tgui-say/styles/content.scss delete mode 100644 tgui/packages/tgui-say/styles/dragzone.scss create mode 100644 tgui/packages/tgui-say/styles/styles.scss delete mode 100644 tgui/packages/tgui-say/styles/textarea.scss delete mode 100644 tgui/packages/tgui-say/styles/window.scss create mode 100644 tgui/packages/tgui-setup/helpers.js create mode 100644 tgui/packages/tgui-setup/ntos-error.css create mode 100644 tgui/packages/tgui-setup/package.json create mode 100644 tgui/packages/tgui/App.tsx create mode 100644 tgui/packages/tgui/__mocks__/byond.ts create mode 100644 tgui/packages/tgui/__mocks__/layouts.tsx create mode 100644 tgui/packages/tgui/__mocks__/setup.ts create mode 100644 tgui/packages/tgui/assets/transparency_checkerboard.svg delete mode 100644 tgui/packages/tgui/components/AnimatedNumber.tsx delete mode 100644 tgui/packages/tgui/components/Autofocus.tsx delete mode 100644 tgui/packages/tgui/components/Blink.js delete mode 100644 tgui/packages/tgui/components/BlockQuote.js delete mode 100644 tgui/packages/tgui/components/BodyZoneSelector.tsx delete mode 100644 tgui/packages/tgui/components/Box.tsx delete mode 100644 tgui/packages/tgui/components/Button.js delete mode 100644 tgui/packages/tgui/components/ByondUi.js delete mode 100644 tgui/packages/tgui/components/Chart.js delete mode 100644 tgui/packages/tgui/components/Collapsible.js delete mode 100644 tgui/packages/tgui/components/ColorBox.js delete mode 100644 tgui/packages/tgui/components/Dialog.tsx delete mode 100644 tgui/packages/tgui/components/Dimmer.js delete mode 100644 tgui/packages/tgui/components/Divider.js delete mode 100644 tgui/packages/tgui/components/DraggableControl.js delete mode 100644 tgui/packages/tgui/components/Dropdown.js delete mode 100644 tgui/packages/tgui/components/FitText.tsx delete mode 100644 tgui/packages/tgui/components/Flex.tsx delete mode 100644 tgui/packages/tgui/components/Grid.js delete mode 100644 tgui/packages/tgui/components/Icon.js delete mode 100644 tgui/packages/tgui/components/InfinitePlane.js delete mode 100644 tgui/packages/tgui/components/Input.js delete mode 100644 tgui/packages/tgui/components/KeyListener.tsx delete mode 100644 tgui/packages/tgui/components/Knob.js delete mode 100644 tgui/packages/tgui/components/LabeledControls.js delete mode 100644 tgui/packages/tgui/components/LabeledList.tsx delete mode 100644 tgui/packages/tgui/components/MenuBar.tsx delete mode 100644 tgui/packages/tgui/components/Modal.js delete mode 100644 tgui/packages/tgui/components/NoticeBox.js delete mode 100644 tgui/packages/tgui/components/NumberInput.js delete mode 100644 tgui/packages/tgui/components/Popper.tsx delete mode 100644 tgui/packages/tgui/components/ProgressBar.js delete mode 100644 tgui/packages/tgui/components/RestrictedInput.js delete mode 100644 tgui/packages/tgui/components/RoundGauge.js delete mode 100644 tgui/packages/tgui/components/Section.tsx delete mode 100644 tgui/packages/tgui/components/Slider.js delete mode 100644 tgui/packages/tgui/components/Stack.tsx delete mode 100644 tgui/packages/tgui/components/StyleableSection.tsx delete mode 100644 tgui/packages/tgui/components/Table.js delete mode 100644 tgui/packages/tgui/components/Tabs.js delete mode 100644 tgui/packages/tgui/components/TextArea.js delete mode 100644 tgui/packages/tgui/components/TimeDisplay.js delete mode 100644 tgui/packages/tgui/components/Tooltip.tsx delete mode 100644 tgui/packages/tgui/components/TrackOutsideClicks.tsx delete mode 100644 tgui/packages/tgui/components/index.js rename tgui/packages/tgui/{contants.test.ts => constants.test.ts} (97%) create mode 100644 tgui/packages/tgui/constants/theme.ts delete mode 100644 tgui/packages/tgui/debug/KitchenSink.js create mode 100644 tgui/packages/tgui/debug/KitchenSink.tsx rename tgui/packages/tgui/debug/{actions.js => actions.ts} (100%) delete mode 100644 tgui/packages/tgui/debug/hooks.js create mode 100644 tgui/packages/tgui/debug/hooks.ts rename tgui/packages/tgui/debug/{index.js => index.ts} (100%) rename tgui/packages/tgui/debug/{middleware.js => middleware.ts} (71%) rename tgui/packages/tgui/debug/{reducer.js => reducer.ts} (67%) delete mode 100644 tgui/packages/tgui/debug/selectors.js create mode 100644 tgui/packages/tgui/debug/selectors.ts create mode 100644 tgui/packages/tgui/debug/use-debug.ts delete mode 100644 tgui/packages/tgui/events.test.ts delete mode 100644 tgui/packages/tgui/events.ts create mode 100644 tgui/packages/tgui/events/README.md create mode 100644 tgui/packages/tgui/events/act.ts create mode 100644 tgui/packages/tgui/events/handlers/assets.ts create mode 100644 tgui/packages/tgui/events/handlers/chunking.ts create mode 100644 tgui/packages/tgui/events/handlers/ping.ts create mode 100644 tgui/packages/tgui/events/handlers/suspense.ts create mode 100644 tgui/packages/tgui/events/handlers/update.ts create mode 100644 tgui/packages/tgui/events/listeners.ts create mode 100644 tgui/packages/tgui/events/store.ts create mode 100644 tgui/packages/tgui/events/types.ts delete mode 100644 tgui/packages/tgui/format.test.ts delete mode 100644 tgui/packages/tgui/format.ts delete mode 100644 tgui/packages/tgui/hotkeys.ts delete mode 100644 tgui/packages/tgui/http.ts rename tgui/packages/tgui/interfaces/{Changelog.js => Changelog.jsx} (93%) delete mode 100644 tgui/packages/tgui/interfaces/ListInputModal.tsx create mode 100644 tgui/packages/tgui/interfaces/ListInputWindow/ListInputModal.tsx create mode 100644 tgui/packages/tgui/interfaces/ListInputWindow/index.tsx delete mode 100644 tgui/packages/tgui/interfaces/common/AccessConfig.js create mode 100644 tgui/packages/tgui/interfaces/common/AccessConfig.tsx rename tgui/packages/tgui/interfaces/common/{AccessList.js => AccessList.jsx} (73%) rename tgui/packages/tgui/interfaces/common/{BeakerContents.js => BeakerContents.tsx} (89%) create mode 100644 tgui/packages/tgui/interfaces/common/FakeTerminal.tsx delete mode 100644 tgui/packages/tgui/interfaces/common/GasmixParser.tsx rename tgui/packages/tgui/interfaces/common/{InterfaceLockNoticeBox.js => InterfaceLockNoticeBox.jsx} (89%) create mode 100644 tgui/packages/tgui/interfaces/common/LoadingScreen.tsx create mode 100644 tgui/packages/tgui/interfaces/common/PaginatedBook.tsx rename tgui/packages/tgui/interfaces/common/{PortableAtmos.js => PortableAtmos.jsx} (94%) rename tgui/packages/tgui/interfaces/common/{ReagentLookup.js => ReagentLookup.jsx} (96%) rename tgui/packages/tgui/interfaces/common/{RecipeLookup.js => RecipeLookup.jsx} (91%) create mode 100644 tgui/packages/tgui/interfaces/common/SearchBar.tsx delete mode 100644 tgui/packages/tgui/layouts/Layout.js create mode 100644 tgui/packages/tgui/layouts/Layout.tsx rename tgui/packages/tgui/layouts/{NtosWindow.js => NtosWindow.tsx} (59%) delete mode 100644 tgui/packages/tgui/layouts/Pane.js create mode 100644 tgui/packages/tgui/layouts/Pane.tsx create mode 100644 tgui/packages/tgui/layouts/TitleBar.tsx delete mode 100644 tgui/packages/tgui/layouts/Window.js create mode 100644 tgui/packages/tgui/layouts/Window.tsx rename tgui/packages/tgui/layouts/{index.js => index.ts} (100%) delete mode 100644 tgui/packages/tgui/links.test.ts delete mode 100644 tgui/packages/tgui/links.ts create mode 100644 tgui/packages/tgui/process.ts delete mode 100644 tgui/packages/tgui/sanitize.test.ts create mode 100644 tgui/packages/tgui/stack.ts delete mode 100644 tgui/packages/tgui/store.ts create mode 100644 tgui/packages/tgui/stories/Blink.stories.tsx create mode 100644 tgui/packages/tgui/stories/BlockQuote.stories.tsx create mode 100644 tgui/packages/tgui/stories/Box.stories.tsx create mode 100644 tgui/packages/tgui/stories/Button.stories.tsx create mode 100644 tgui/packages/tgui/stories/ByondUi.stories.tsx create mode 100644 tgui/packages/tgui/stories/Collapsible.stories.tsx create mode 100644 tgui/packages/tgui/stories/Flex.stories.tsx create mode 100644 tgui/packages/tgui/stories/Input.stories.tsx create mode 100644 tgui/packages/tgui/stories/LabeledList.stories.tsx create mode 100644 tgui/packages/tgui/stories/ProgressBar.stories.tsx create mode 100644 tgui/packages/tgui/stories/Stack.stories.tsx create mode 100644 tgui/packages/tgui/stories/Storage.stories.tsx create mode 100644 tgui/packages/tgui/stories/Tabs.stories.tsx create mode 100644 tgui/packages/tgui/stories/Themes.stories.tsx create mode 100644 tgui/packages/tgui/stories/Tooltip.stories.tsx create mode 100644 tgui/packages/tgui/stories/common.tsx create mode 100644 tgui/packages/tgui/styles/assets/bg-deforest.svg delete mode 100644 tgui/packages/tgui/styles/atomic/candystripe.scss delete mode 100644 tgui/packages/tgui/styles/atomic/centered-image.scss delete mode 100644 tgui/packages/tgui/styles/atomic/color.scss delete mode 100644 tgui/packages/tgui/styles/atomic/debug-layout.scss delete mode 100644 tgui/packages/tgui/styles/atomic/fit-text.scss delete mode 100644 tgui/packages/tgui/styles/atomic/links.scss delete mode 100644 tgui/packages/tgui/styles/atomic/outline.scss delete mode 100644 tgui/packages/tgui/styles/atomic/text.scss create mode 100644 tgui/packages/tgui/styles/base_original.scss create mode 100644 tgui/packages/tgui/styles/colors_original.scss delete mode 100644 tgui/packages/tgui/styles/components/BlockQuote.scss delete mode 100644 tgui/packages/tgui/styles/components/Button.scss delete mode 100644 tgui/packages/tgui/styles/components/ColorBox.scss delete mode 100644 tgui/packages/tgui/styles/components/Dialog.scss delete mode 100644 tgui/packages/tgui/styles/components/Dimmer.scss delete mode 100644 tgui/packages/tgui/styles/components/Divider.scss delete mode 100644 tgui/packages/tgui/styles/components/Dropdown.scss delete mode 100644 tgui/packages/tgui/styles/components/Flex.scss delete mode 100644 tgui/packages/tgui/styles/components/Icon.scss delete mode 100644 tgui/packages/tgui/styles/components/Input.scss delete mode 100644 tgui/packages/tgui/styles/components/Knob.scss delete mode 100644 tgui/packages/tgui/styles/components/LabeledList.scss delete mode 100644 tgui/packages/tgui/styles/components/MenuBar.scss delete mode 100644 tgui/packages/tgui/styles/components/Modal.scss delete mode 100644 tgui/packages/tgui/styles/components/NoticeBox.scss delete mode 100644 tgui/packages/tgui/styles/components/NumberInput.scss delete mode 100644 tgui/packages/tgui/styles/components/ProgressBar.scss delete mode 100644 tgui/packages/tgui/styles/components/RoundGauge.scss delete mode 100644 tgui/packages/tgui/styles/components/Section.scss delete mode 100644 tgui/packages/tgui/styles/components/Slider.scss delete mode 100644 tgui/packages/tgui/styles/components/Stack.scss delete mode 100644 tgui/packages/tgui/styles/components/Table.scss delete mode 100644 tgui/packages/tgui/styles/components/Tabs.scss delete mode 100644 tgui/packages/tgui/styles/components/TextArea.scss delete mode 100644 tgui/packages/tgui/styles/components/Tooltip.scss create mode 100644 tgui/packages/tgui/styles/css-variables.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Accounting.scss create mode 100644 tgui/packages/tgui/styles/interfaces/AnomalyTower.scss create mode 100644 tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Changelog.scss create mode 100644 tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss create mode 100644 tgui/packages/tgui/styles/interfaces/ColorPicker.scss create mode 100644 tgui/packages/tgui/styles/interfaces/DeForestLogo.scss create mode 100644 tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Emojipedia.scss create mode 100644 tgui/packages/tgui/styles/interfaces/EventLogger.scss create mode 100644 tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Fabricator.scss create mode 100644 tgui/packages/tgui/styles/interfaces/HellishRunes.scss create mode 100644 tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Hypertorus.scss create mode 100644 tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss create mode 100644 tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss create mode 100644 tgui/packages/tgui/styles/interfaces/LibraryComputer.scss delete mode 100644 tgui/packages/tgui/styles/interfaces/LoreConsole.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Mecha.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NtosMessenger.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NtosNotepad.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NuclearBomb.scss create mode 100644 tgui/packages/tgui/styles/interfaces/OperatingComputer.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Orbit.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Paper.scss create mode 100644 tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss delete mode 100644 tgui/packages/tgui/styles/interfaces/Radio.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Roulette.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Safe.scss create mode 100644 tgui/packages/tgui/styles/interfaces/SlotMachine.scss create mode 100644 tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Techweb.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Trophycase.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Uplink.scss create mode 100644 tgui/packages/tgui/styles/main_original.scss create mode 100644 tgui/public/bg-deforest.svg create mode 100644 tgui/public/bg-nanotrasen.svg create mode 100644 tgui/public/helpers.min.js create mode 100644 tgui/public/ntos-error.min.css delete mode 100644 tgui/public/tgui-polyfill.min.js create mode 100644 tgui/public/transparency_checkerboard.svg create mode 100644 tgui/rspack.config-dev.ts create mode 100644 tgui/rspack.config.ts delete mode 100644 tgui/yarn.lock create mode 100644 tools/bootstrap/javascript.bat create mode 100644 tools/bootstrap/javascript.sh create mode 100644 tools/bootstrap/javascript_.ps1 delete mode 100755 tools/bootstrap/node delete mode 100644 tools/bootstrap/node.bat delete mode 100644 tools/bootstrap/node_.ps1 delete mode 100755 tools/build/build create mode 100644 tools/build/build.sh rename tools/build/{build.js => build.ts} (63%) create mode 100644 tools/build/bun.lock create mode 100644 tools/build/lib/bun.ts delete mode 100644 tools/build/lib/byond.js create mode 100644 tools/build/lib/byond.ts create mode 100644 tools/build/lib/download.ts create mode 100644 tools/build/lib/helpers.ts create mode 100644 tools/build/lib/tgs.ts rename tools/build/lib/{winreg.js => winreg.ts} (56%) delete mode 100644 tools/build/lib/yarn.js diff --git a/.github/actions/setup_bun/action.yml b/.github/actions/setup_bun/action.yml new file mode 100644 index 00000000000..727596ed3ab --- /dev/null +++ b/.github/actions/setup_bun/action.yml @@ -0,0 +1,17 @@ +# This action is a wrapper around `oven-sh/setup-bun` to use the version specified in +# `dependencies.sh`. +name: Setup Bun +description: Install Bun using the version specified in `dependencies.sh` + +runs: + using: composite + steps: + - name: Configure Bun version + shell: bash + run: | + source dependencies.sh + echo "BUN_VERSION_REQUIRED=$BUN_VERSION" >> $GITHUB_ENV + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: ${{ env.BUN_VERSION_REQUIRED }} diff --git a/.github/actions/setup_node/action.yml b/.github/actions/setup_node/action.yml new file mode 100644 index 00000000000..d017766117f --- /dev/null +++ b/.github/actions/setup_node/action.yml @@ -0,0 +1,26 @@ +# This action is a wrapper around `actions/setup-node`, to use the version specified in +# `dependencies.sh`. +name: Setup Node +description: Install Node using the version specified in `dependencies.sh`; additionally, restores the Yarn cache if one exists + +inputs: + restore-yarn-cache: + description: "If `true`, restores the Yarn cache alongside installing node." + required: false + type: boolean + default: false + +runs: + using: composite + steps: + - name: Configure Node version + shell: bash + run: | + source dependencies.sh + echo "NODE_VERSION_REQUIRED=$NODE_VERSION_LTS" >> $GITHUB_ENV + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION_REQUIRED }} + cache: ${{ fromJSON(inputs.restore-yarn-cache) && 'yarn' || '' }} + cache-dependency-path: ${{ fromJSON(inputs.restore-yarn-cache) && 'tgui/yarn.lock' || '' }} diff --git a/.github/workflows/byond.yml b/.github/workflows/byond.yml index 3c0012a9ce5..ff62e8bb0bc 100644 --- a/.github/workflows/byond.yml +++ b/.github/workflows/byond.yml @@ -281,18 +281,14 @@ jobs: - name: Set ENV variables run: bash dependencies.sh - #Setup NodeJS using YARN as cache - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION_LTS }} - cache: "yarn" - cache-dependency-path: tgui/yarn.lock + #Setup bun + - name: Setup Bun + uses: ./.github/actions/setup_bun #Lint TGUI - name: Check Tgui run: | - tools/build/build --ci lint tgui-test + tools/build/build.sh --ci lint tgui-test ########################################### ############### MISC LINTING ############## diff --git a/.github/workflows/update_tgui.yml b/.github/workflows/update_tgui.yml new file mode 100644 index 00000000000..a023a52b467 --- /dev/null +++ b/.github/workflows/update_tgui.yml @@ -0,0 +1,31 @@ +name: "Build TGUI" +on: + workflow_dispatch: + +jobs: + update-tgui: + concurrency: tgui + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-24.04 + steps: + - name: Install Bun + uses: ./.github/actions/setup_bun + + - name: Update TGUI + run: | + tools/bootstrap/javascript tools/build/build.sh tgui + + - name: Commit TGUI + run: | + git pull origin master + git config --local user.email "action@github.com" + git config --local user.name "AuroraBuildBot" + git add --force tgui/public/* + git commit -m "Automatic TGUI compile [ci skip]" -a || true + + - name: Push + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.BOT_TOKEN_AURORA }} diff --git a/.gitignore b/.gitignore index e8f27065444..e24b8fa4900 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,6 @@ define_sanity_output.txt # Tracy dumps *.utracy + +# JavaScript tools +**/node_modules diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d0ecf1ccc9a..9fa094b0aa0 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,6 +7,9 @@ "vscode.typescript-language-features", "redhat.vscode-yaml", "esbenp.prettier-vscode", - "rome.rome" - ] + "rome.rome", + "dbaeumer.vscode-eslint", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "biomejs.biome" } diff --git a/.vscode/settings.json b/.vscode/settings.json index 4a44976f9ca..1e74c4aca2f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,25 +1,27 @@ { - "eslint.nodePath": "./tgui/.yarn/sdks", - "eslint.workingDirectories": ["./tgui"], - "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.cjs", - "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "search.exclude": { "**/.yarn": true, "**/.pnp.*": true }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "source.organizeImports.biome": "explicit", + "source.fixAll.biome": "explicit" }, "editor.insertSpaces": false, "files.eol": "\n", "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, "gitlens.advanced.blame.customArguments": ["-w"], - "[javascript][typescript][typescriptreact][javascriptreact][html][scss][css][json][jsonc][markdown][yaml]": { - "editor.rulers": [80], + "[javascript][typescript][javascriptreact][typescriptreact][css][json][jsonc]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + "editor.rulers": [80] + }, + "[yaml][markdown][html][scss]": { "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true + "editor.formatOnSave": true, + "editor.rulers": [80] }, "workbench.editorAssociations": { "*.dmi": "dmiEditor.dmiEditor" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index defa41d9ba9..1f7c9117e5e 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -16,8 +16,7 @@ }, "problemMatcher": [ "$dreammaker", - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": { "kind": "build", @@ -61,8 +60,7 @@ "command": ".\\bin\\tgui-build.cmd" }, "problemMatcher": [ - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": "build", "label": "tgui: build" @@ -74,38 +72,11 @@ "command": ".\\bin\\tgui-dev.cmd" }, "problemMatcher": [ - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": "build", "label": "tgui: dev server" }, - { - "type": "shell", - "command": "bin/tgui-bench", - "windows": { - "command": ".\\bin\\tgui-bench.cmd" - }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], - "group": "build", - "label": "tgui: bench" - }, - { - "type": "shell", - "command": "bin/tgui-sonar", - "windows": { - "command": ".\\bin\\tgui-sonar.cmd" - }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], - "group": "build", - "label": "tgui: sonar" - }, { "type": "shell", "command": "bin/tgfont", @@ -113,8 +84,7 @@ "command": ".\\bin\\tgfont.cmd" }, "problemMatcher": [ - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": "build", "label": "tgui: rebuild tgfont" diff --git a/aurorastation.dme b/aurorastation.dme index 35b72eeee3b..96147b23f3c 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -155,6 +155,7 @@ #include "code\__DEFINES\targeting.dm" #include "code\__DEFINES\technomancer.dm" #include "code\__DEFINES\text.dm" +#include "code\__DEFINES\tgs.config.dm" #include "code\__DEFINES\tgs.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" @@ -184,6 +185,7 @@ #include "code\__DEFINES\dcs\signals\signals_record.dm" #include "code\__DEFINES\dcs\signals\signals_spatial_grid.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" +#include "code\__DEFINES\dcs\signals\signals_tgui.dm" #include "code\__DEFINES\dcs\signals\signals_tools.dm" #include "code\__DEFINES\dcs\signals\signals_turf.dm" #include "code\__DEFINES\dcs\signals\signals_weather.dm" @@ -404,6 +406,7 @@ #include "code\controllers\subsystems\stickyban.dm" #include "code\controllers\subsystems\sun.dm" #include "code\controllers\subsystems\sunlight.dm" +#include "code\controllers\subsystems\tgui.dm" #include "code\controllers\subsystems\throwing.dm" #include "code\controllers\subsystems\ticker.dm" #include "code\controllers\subsystems\time_track.dm" @@ -448,7 +451,6 @@ #include "code\controllers\subsystems\processing\electronics.dm" #include "code\controllers\subsystems\processing\fast_process.dm" #include "code\controllers\subsystems\processing\modifiers.dm" -#include "code\controllers\subsystems\processing\nanoui.dm" #include "code\controllers\subsystems\processing\ntsl2.dm" #include "code\controllers\subsystems\processing\obj_tab_items.dm" #include "code\controllers\subsystems\processing\odyssey.dm" @@ -457,7 +459,6 @@ #include "code\controllers\subsystems\processing\projectiles.dm" #include "code\controllers\subsystems\processing\psi.dm" #include "code\controllers\subsystems\processing\shuttle.dm" -#include "code\controllers\subsystems\processing\tgui.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\beam.dm" @@ -465,6 +466,7 @@ #include "code\datums\callback.dm" #include "code\datums\cargo.dm" #include "code\datums\category.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\computerfiles.dm" #include "code\datums\datum.dm" #include "code\datums\datumvars.dm" @@ -3167,13 +3169,6 @@ #include "code\modules\multiz\zmimic\mimic_common.dm" #include "code\modules\multiz\zmimic\mimic_movable.dm" #include "code\modules\multiz\zmimic\mimic_turf.dm" -#include "code\modules\nano\nanoexternal.dm" -#include "code\modules\nano\nanomapgen.dm" -#include "code\modules\nano\nanoui.dm" -#include "code\modules\nano\modules\follow_menu.dm" -#include "code\modules\nano\modules\human_appearance.dm" -#include "code\modules\nano\modules\nano_module.dm" -#include "code\modules\nano\modules\narrate_panel.dm" #include "code\modules\ntsl2\guide.dm" #include "code\modules\ntsl2\ntsl2_program.dm" #include "code\modules\ntsl2\ntsl2_types.dm" @@ -3936,8 +3931,11 @@ #include "code\modules\tgui\modules\armor_values.dm" #include "code\modules\tgui\modules\faction_select.dm" #include "code\modules\tgui\modules\flavor_text.dm" +#include "code\modules\tgui\modules\follow_menu.dm" #include "code\modules\tgui\modules\hivenet_manifest.dm" +#include "code\modules\tgui\modules\human_appearance.dm" #include "code\modules\tgui\modules\ipc_diagnostic.dm" +#include "code\modules\tgui\modules\narrate_panel.dm" #include "code\modules\tgui\modules\neural_configuration.dm" #include "code\modules\tgui\states\admin.dm" #include "code\modules\tgui\states\always.dm" @@ -3960,6 +3958,8 @@ #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tgui_input\alert.dm" +#include "code\modules\tgui_input\checkboxes.dm" +#include "code\modules\tgui_input\keycombo.dm" #include "code\modules\tgui_input\list.dm" #include "code\modules\tgui_input\number.dm" #include "code\modules\tgui_input\text.dm" diff --git a/biome.json b/biome.json new file mode 100644 index 00000000000..8f792f2b57b --- /dev/null +++ b/biome.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.1.2/schema.json", + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + }, + "enabled": true + }, + "css": { + "formatter": { + "quoteStyle": "double" + } + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "!**/node_modules", + "!tgui/public", + "tgui/public/tgui.html", + "!tgui/packages/tgui-setup/helpers.js" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab", + "lineEnding": "lf" + }, + "javascript": { + "formatter": { + "indentStyle": "space", + "quoteStyle": "single" + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "a11y": "off", + "correctness": { + "noUnusedImports": "warn", + "noUnusedVariables": "off", + "useExhaustiveDependencies": "off", + "noUnusedFunctionParameters": "off", + "useHookAtTopLevel": "off" + }, + "security": { + "noDangerouslySetInnerHtml": "warn" + }, + "style": { + "noNonNullAssertion": "off", + "useSelfClosingElements": "error" + }, + "suspicious": { + "noArrayIndexKey": "off", + "noExplicitAny": "off", + "noImplicitAnyLet": "off" + } + } + }, + "vcs": { + "clientKind": "git", + "enabled": false, + "useIgnoreFile": false + } +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000000..779e0ce9801 --- /dev/null +++ b/bun.lock @@ -0,0 +1,32 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "devDependencies": { + "@biomejs/biome": "^2.1.2", + "prettier": "^3.6.2", + }, + }, + }, + "packages": { + "@biomejs/biome": ["@biomejs/biome@2.4.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.15", "@biomejs/cli-darwin-x64": "2.4.15", "@biomejs/cli-linux-arm64": "2.4.15", "@biomejs/cli-linux-arm64-musl": "2.4.15", "@biomejs/cli-linux-x64": "2.4.15", "@biomejs/cli-linux-x64-musl": "2.4.15", "@biomejs/cli-win32-arm64": "2.4.15", "@biomejs/cli-win32-x64": "2.4.15" }, "bin": { "biome": "bin/biome" } }, "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.15", "", { "os": "win32", "cpu": "x64" }, "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ=="], + + "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], + } +} diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index f5d03812dcd..2d526bf5c34 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -9,6 +9,8 @@ #define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON "atom_init_success_on" ///from base of atom/examine(): (/mob, list/examine_text) #define COMSIG_ATOM_EXAMINE "atom_examine" +///from base of atom/examine_tags(): (/mob, list/examine_tags) +#define COMSIG_ATOM_EXAMINE_TAGS "atom_examine_tags" ///from base of atom/Entered(): (atom/movable/arrived, atom/old_loc, list/atom/old_locs) #define COMSIG_ATOM_ENTERED "atom_entered" /// Sent from the atom that just Entered src. From base of atom/Entered(): (/atom/destination, atom/old_loc, list/atom/old_locs) diff --git a/code/__DEFINES/dcs/signals/signals_tgui.dm b/code/__DEFINES/dcs/signals/signals_tgui.dm new file mode 100644 index 00000000000..67b979be780 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_tgui.dm @@ -0,0 +1,2 @@ +/// Window is fully visible and we can make fragile calls +#define COMSIG_TGUI_WINDOW_VISIBLE "tgui_window_visible" diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 3ccaa9294d5..61c79492ecd 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -24,6 +24,7 @@ #define SPAN_COLOR(color, str) SPAN_STYLE("color: [color]", "[str]") #define SPAN_CAUTION(str) ("" + str + "") #define SPAN_STORYTELLER(str) ("" + str + "") +#define SPAN_BOLDANNOUNCE(str) ("" + str + "") #define SPAN_MACHINE_WARNING(str) ("" + str + "") #define SPAN_MACHINE_DANGER(str) ("" + str + "") @@ -42,6 +43,9 @@ #define SPAN_BOLDNOTICE(str) ("" + str + "") #define SPAN_BOLDWARNING(X) "[X]" +// Spans that use embedded tgui components: +#define SPAN_TOOLTIP(tip, main_text) ("" + main_text + "") + /* ##################### Font sizes diff --git a/code/__DEFINES/subsystem-priority.dm b/code/__DEFINES/subsystem-priority.dm index 572c39c4edb..2ec6f3aadcf 100644 --- a/code/__DEFINES/subsystem-priority.dm +++ b/code/__DEFINES/subsystem-priority.dm @@ -36,7 +36,6 @@ #define SS_PRIORITY_STATPANELS 25 // Statpanels. #define SS_PRIORITY_LIGHTING 25 // Queued lighting engine updates. #define SS_PRIORITY_MACHINERY 25 // Machinery + powernet ticks. -#define SS_PRIORITY_NANOUI 25 // UI updates. #define SS_PRIORITY_ELECTRONICS 20 // Integrated Electronics processing. #define SS_PRIORITY_CALAMITY 20 // Singularity, Tesla, Nar'sie, blob, etc. #define SS_PRIORITY_EVENT 20 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 864b8941fd4..9a3bb4d4ce8 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -277,6 +277,7 @@ #define FIRE_PRIORITY_SPACEDRIFT 30 #define FIRE_PRIORITY_DEFAULT 50 #define FIRE_PRIORITY_MOBS 100 +#define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_STATPANEL 390 #define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_RUNECHAT 410 diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 63bafbaa4c4..d0a991f5ca1 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -50,7 +50,7 @@ #define CHAT_MESSAGE_WIDTH 112 // Setting this much higher than 1024 could allow spammers to DOS the server easily. -#define MAX_MESSAGE_LEN 1024 +#define MAX_MESSAGE_LEN 4096 #define MAX_PAPER_MESSAGE_LEN 3072 #define MAX_BOOK_MESSAGE_LEN 9216 #define MAX_LNAME_LEN 64 diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm new file mode 100644 index 00000000000..4f6ba1af61c --- /dev/null +++ b/code/__DEFINES/tgs.config.dm @@ -0,0 +1,11 @@ +#define TGS_EXTERNAL_CONFIGURATION +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) +#define TGS_READ_GLOBAL(Name) GLOB.##Name +#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value +#define TGS_WORLD_ANNOUNCE(message) to_chat(world, SPAN_BOLDANNOUNCE("[html_encode(##message)]")) +#define TGS_INFO_LOG(message) log_world("TGS Info: [##message]") +#define TGS_WARNING_LOG(message) log_world("TGS Warn: [##message]") +#define TGS_ERROR_LOG(message) stack_trace("TGS Error: [##message]") +#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_CLIENT_COUNT GLOB.clients.len +#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index ef53d466e84..24887137230 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,55 +1,68 @@ // tgstation-server DMAPI +// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "6.6.2" +#define TGS_DMAPI_VERSION "7.3.3" // All functions and datums outside this document are subject to change with any version and should not be relied on. // CONFIGURATION -/// Create this define if you want to do TGS configuration outside of this file. +/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file. #ifndef TGS_EXTERNAL_CONFIGURATION -// Comment this out once you've filled in the below. -//#error TGS API unconfigured +// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION]. +// #error TGS API unconfigured -// Uncomment this if you wish to allow the game to interact with TGS 3.. +// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3. // This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()(). //#define TGS_V3_API // Required interfaces (fill in with your codebase equivalent): /// Create a global variable named `Name` and set it to `Value`. -#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) var/global/##Name = ##Value +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) /// Read the value in the global variable `Name`. -#define TGS_READ_GLOBAL(Name) global.##Name +#define TGS_READ_GLOBAL(Name) /// Set the value in the global variable `Name` to `Value`. -#define TGS_WRITE_GLOBAL(Name, Value) global.##Name = ##Value +#define TGS_WRITE_GLOBAL(Name, Value) /// Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game use of DD -> TGS capabilities. #define TGS_PROTECT_DATUM(Path) /// Display an announcement `message` from the server to all players. -#define TGS_WORLD_ANNOUNCE(message) world << "TGS Notification: [html_encode(##message)]" +#define TGS_WORLD_ANNOUNCE(message) /// Notify current in-game administrators of a string `event`. -#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_NOTIFY_ADMINS(event) /// Write an info `message` to a server log. -#define TGS_INFO_LOG(message) log_tgs("[##message]") +#define TGS_INFO_LOG(message) /// Write an warning `message` to a server log. -#define TGS_WARNING_LOG(message) log_tgs("[##message]", SEVERITY_WARNING) +#define TGS_WARNING_LOG(message) /// Write an error `message` to a server log. -#define TGS_ERROR_LOG(message) log_tgs("[##message]", SEVERITY_ERROR) +#define TGS_ERROR_LOG(message) /// Get the number of connected /clients. -#define TGS_CLIENT_COUNT clients.len +#define TGS_CLIENT_COUNT #endif +#ifndef TGS_FILE2TEXT_NATIVE +#ifdef file2text +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#endif +#define TGS_FILE2TEXT_NATIVE file2text +#endif + +// SpacemanDMM compatibility +#ifndef CAN_BE_REDEFINED +#define CAN_BE_REDEFINED(X) +#endif + // EVENT CODES /// Before a reboot mode change, extras parameters are the current and new reboot mode enums. @@ -73,12 +86,12 @@ #define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 /// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. #define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND. -#define TGS_EVENT_BYOND_INSTALL_START 5 -/// When a BYOND install operation fails. Parameters: Error message -#define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND. -#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 +/// Before a engine install operation begins. Parameters: Version string of the installing engine. +#define TGS_EVENT_ENGINE_INSTALL_START 5 +/// When a engine install operation fails. Parameters: Error message +#define TGS_EVENT_ENGINE_INSTALL_FAIL 6 +/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine. +#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7 /// When the compiler starts running. Parameters: Game directory path, origin commit SHA. #define TGS_EVENT_COMPILE_START 8 /// When a compile is cancelled. No parameters. @@ -108,7 +121,7 @@ // #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 /// After a single submodule update is performed. Parameters: Updated submodule name. #define TGS_EVENT_REPO_SUBMODULE_UPDATE 23 -/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version. +/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine. #define TGS_EVENT_PRE_DREAM_MAKER 24 /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path. #define TGS_EVENT_DEPLOYMENT_CLEANUP 25 @@ -122,6 +135,7 @@ /// The watchdog will restart on reboot. #define TGS_REBOOT_MODE_RESTART 2 +// Note that security levels are currently meaningless in OpenDream /// DreamDaemon Trusted security level. #define TGS_SECURITY_TRUSTED 0 /// DreamDaemon Safe security level. @@ -136,20 +150,26 @@ /// DreamDaemon invisible visibility level. #define TGS_VISIBILITY_INVISIBLE 2 +/// The Build Your Own Net Dream engine. +#define TGS_ENGINE_TYPE_BYOND 0 +/// The OpenDream engine. +#define TGS_ENGINE_TYPE_OPENDREAM 1 + //REQUIRED HOOKS /** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep! * * * event_handler - Optional user defined [/datum/tgs_event_handler]. * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + * * http_handler - Optional user defined [/datum/tgs_http_handler]. */ -/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler) CAN_BE_REDEFINED(TRUE) return /** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen. * * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 @@ -159,12 +179,10 @@ CAN_BE_REDEFINED(TRUE) return -/// Put this at the start of [/world/proc/Topic]. +/// Consumers MUST run this macro at the start of [/world/proc/Topic]. #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return -/** - * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()). - */ +/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()). /world/proc/TgsReboot() CAN_BE_REDEFINED(TRUE) return @@ -261,7 +279,7 @@ /// The [/datum/tgs_chat_channel] the user was from. var/datum/tgs_chat_channel/channel -/// User definable handler for TGS events. +/// User definable handler for TGS events This abstract version SHOULD be overridden to be used. /datum/tgs_event_handler /// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events. var/receive_health_checks = FALSE @@ -275,7 +293,41 @@ set waitfor = FALSE return -/// User definable chat command. +/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used. +/datum/tgs_http_handler + +/** + * User definable callback for executing HTTP GET requests. + * MUST perform BYOND sleeps while the request is in flight. + * MUST return a [/datum/tgs_http_result]. + * SHOULD log its own errors + * + * url - The full URL to execute the GET request for including query parameters. + */ +/datum/tgs_http_handler/proc/PerformGet(url) + CRASH("[type]/PerformGet not implemented!") + +/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden. +/datum/tgs_http_result + /// HTTP response as text + var/response_text + /// Boolean request success flag. Set for any 2XX response code. + var/success + +/** + * Create a [/datum/tgs_http_result]. + * + * * response_text - HTTP response as text. Must be provided in New(). + * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New(). + */ +/datum/tgs_http_result/New(response_text, success) + if(response_text && !istext(response_text)) + CRASH("response_text was not text!") + + src.response_text = response_text + src.success = success + +/// User definable chat command. This abstract version MUST be overridden to be used. /datum/tgs_chat_command /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`. var/name = "" @@ -288,29 +340,36 @@ /** * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. + * MUST be implemented * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + * * sender - The [/datum/tgs_chat_user] who issued the command. + * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. */ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") -/// User definable chat message. +/// User definable chat message. MUST NOT be overridden. /datum/tgs_message_content - /// The tring content of the message. Must be provided in New(). + /// The string content of the message. Must be provided in New(). var/text /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. var/datum/tgs_chat_embed/structure/embed +/** + * Create a [/datum/tgs_message_content]. + * + * * text - The string content of the message. + */ /datum/tgs_message_content/New(text) + ..() if(!istext(text)) TGS_ERROR_LOG("[/datum/tgs_message_content] created with no text!") text = null src.text = text -/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details. /datum/tgs_chat_embed/structure var/title var/description @@ -322,13 +381,13 @@ /// Colour must be #AARRGGBB or #RRGGBB hex string. var/colour - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details. var/datum/tgs_chat_embed/media/image - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details. var/datum/tgs_chat_embed/media/thumbnail - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details. var/datum/tgs_chat_embed/media/video var/datum/tgs_chat_embed/footer/footer @@ -337,7 +396,7 @@ var/list/datum/tgs_chat_embed/field/fields -/// Common datum for similar discord embed medias. +/// Common datum for similar Discord embed medias. /datum/tgs_chat_embed/media /// Must be set in New(). var/url @@ -345,48 +404,58 @@ var/height var/proxy_url +/// Create a [/datum/tgs_chat_embed]. /datum/tgs_chat_embed/media/New(url) + ..() if(!istext(url)) CRASH("[/datum/tgs_chat_embed/media] created with no url!") src.url = url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details. /datum/tgs_chat_embed/footer /// Must be set in New(). var/text var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/footer/New(text) + ..() if(!istext(text)) CRASH("[/datum/tgs_chat_embed/footer] created with no text!") src.text = text -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details. /datum/tgs_chat_embed/provider var/name var/url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New(). /datum/tgs_chat_embed/provider/author var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/provider/author/New(name) + ..() if(!istext(name)) CRASH("[/datum/tgs_chat_embed/provider/author] created with no name!") src.name = name -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details. /datum/tgs_chat_embed/field + /// Must be set in New(). var/name + /// Must be set in New(). var/value var/is_inline +/// Create a [/datum/tgs_chat_embed/field]. /datum/tgs_chat_embed/field/New(name, value) + ..() if(!istext(name)) CRASH("[/datum/tgs_chat_embed/field] created with no name!") @@ -429,6 +498,7 @@ /** * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. @@ -439,6 +509,7 @@ /** * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. @@ -449,6 +520,7 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. @@ -462,6 +534,11 @@ CAN_BE_REDEFINED(TRUE) return +/// Returns the running engine type +/world/proc/TgsEngine() + CAN_BE_REDEFINED(TRUE) + return + /// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsApiVersion() CAN_BE_REDEFINED(TRUE) @@ -497,10 +574,21 @@ CAN_BE_REDEFINED(TRUE) return +/** + * Trigger an event in TGS. Requires TGS version >= 6.3.0. Returns [TRUE] if the event was triggered successfully, [FALSE] otherwise. This function may sleep! + * + * event_name - The name of the event to trigger + * parameters - Optional list of string parameters to pass as arguments to the event script. The first parameter passed to a script will always be the running game's directory followed by these parameters. + * wait_for_completion - If set, this function will not return until the event has run to completion. + */ +/world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + CAN_BE_REDEFINED(TRUE) + return + /* The MIT License -Copyright (c) 2017-2023 Jordan Brown +Copyright (c) 2017-2024 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm index db68d7089a6..b0cd0a979d4 100644 --- a/code/__DEFINES/tgui.dm +++ b/code/__DEFINES/tgui.dm @@ -24,6 +24,16 @@ /// Window is free and ready to receive data #define TGUI_WINDOW_READY 2 +/// Though not the maximum renderable ByondUis within tgui, this is the maximum that the server will manage per-UI +#define TGUI_MANAGED_BYONDUI_LIMIT 10 + +// These are defines instead of being inline, as they're being sent over +// from tgui-core, so can't be easily played with +#define TGUI_MANAGED_BYONDUI_TYPE_RENDER "renderByondUi" +#define TGUI_MANAGED_BYONDUI_TYPE_UNMOUNT "unmountByondUi" + +#define TGUI_MANAGED_BYONDUI_PAYLOAD_ID "renderByondUi" + /// Get a window id based on the provided pool index #define TGUI_WINDOW_ID(index) "tgui-window-[index]" /// Get a pool index of the provided window id diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 8b6897358a6..d0baafa1094 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -912,3 +912,31 @@ /proc/endswith(input_text, ending) var/input_length = LAZYLEN(ending) return !!findtext(input_text, ending, -input_length) + +///Returns a string based on the weight class define used as argument +/proc/weight_class_to_text(w_class) + switch(w_class) + if(WEIGHT_CLASS_TINY) + . = "tiny" + if(WEIGHT_CLASS_SMALL) + . = "small" + if(WEIGHT_CLASS_NORMAL) + . = "normal-sized" + if(WEIGHT_CLASS_BULKY) + . = "bulky" + if(WEIGHT_CLASS_HUGE) + . = "huge" + if(WEIGHT_CLASS_GIGANTIC) + . = "gigantic" + else + . = "" + +/proc/weight_class_to_tooltip(w_class) + switch(w_class) + if(WEIGHT_CLASS_TINY to WEIGHT_CLASS_SMALL) + return "This item can fit into pockets, boxes and backpacks." + if(WEIGHT_CLASS_NORMAL) + return "This item can fit into backpacks." + if(WEIGHT_CLASS_BULKY to WEIGHT_CLASS_GIGANTIC) + return "This item is too large to fit into any standard storage." + return "" diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm index d76ce698d6f..2d227a07ed9 100644 --- a/code/controllers/subsystems/chat.dm +++ b/code/controllers/subsystems/chat.dm @@ -10,31 +10,82 @@ SUBSYSTEM_DEF(chat) flags = SS_TICKER | SS_NO_INIT wait = 1 priority = FIRE_PRIORITY_CHAT - init_order = INIT_ORDER_CHAT + init_order = INITSTAGE_MAX - var/list/payload_by_client = list() + /// Assosciates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() + + /// Associates a ckey with an assosciative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Assosciates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > 5) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) /datum/controller/subsystem/chat/fire() - for(var/key in payload_by_client) - var/client/client = key - var/payload = payload_by_client[key] - payload_by_client -= key - if(client) - // Send to tgchat - client.tgui_panel?.window.send_message("chat/message", payload) - // Send to old chat - for(var/message in payload) - to_target(client, message_to_html(message)) + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + if(MC_TICK_CHECK) return -/datum/controller/subsystem/chat/proc/queue(target, message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - LAZYADD(payload_by_client[client], list(message)) +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOCLIST(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - LAZYADD(payload_by_client[client], list(message)) + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > 3) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) diff --git a/code/controllers/subsystems/night_lighting.dm b/code/controllers/subsystems/night_lighting.dm index 9780477bf75..625269650d4 100644 --- a/code/controllers/subsystems/night_lighting.dm +++ b/code/controllers/subsystems/night_lighting.dm @@ -50,12 +50,16 @@ SUBSYSTEM_DEF(nightlight) /datum/controller/subsystem/nightlight/proc/get_apc_list(var/whitelisted_only = 1) var/list/obj/structure/machinery/power/apc/lighting_apcs = list() - for (var/A in get_sorted_areas()) - var/area/B = A - if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only)) + for (var/obj/structure/machinery/power/apc/APC in SSmachinery.apc_units) + if (QDELETED(APC) || APC.aidisabled) continue - if (B.apc && !B.apc.aidisabled) - lighting_apcs += B.apc + + var/area/apc_area = APC.area || get_area(APC) + if (!apc_area) + continue + if (apc_area.no_light_control || (!(apc_area.allow_nightmode) && whitelisted_only)) + continue + lighting_apcs += APC CHECK_TICK diff --git a/code/controllers/subsystems/processing/nanoui.dm b/code/controllers/subsystems/processing/nanoui.dm deleted file mode 100644 index ee84adf78be..00000000000 --- a/code/controllers/subsystems/processing/nanoui.dm +++ /dev/null @@ -1,241 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(nanoui) - // Subsystem stuff. - name = "NanoUI" - flags = SS_NO_INIT - priority = SS_PRIORITY_NANOUI - stat_tag = "A" - - // NanoUI stuff. - var/list/open_nanouis = list() - -/** - * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data - * - * * user - /mob The mob who opened/owns the ui - * * src_object - /obj|/mob The obj or mob which the ui belongs to - * * ui_key - A string key used for the ui - * * data - List, the data to be passed to the ui, if it exists - * * force_open - Boolean, the ui is being forced to (re)open, so close ui if it exists (instead of updating) - * - * Returns the `/nanoui` found ui, for null if none exists - */ -/datum/controller/subsystem/processing/nanoui/proc/try_update_ui(mob/user, src_object, ui_key, datum/nanoui/ui, data, force_open = FALSE) - if (!ui) // no ui has been passed, so we'll search for one - ui = get_open_ui(user, src_object, ui_key) - - if (ui) - // The UI is already open - if (!force_open) - ui.push_data(data) - return ui - else - ui.reinitialise(new_initial_data=data) - return ui - - return null - -/** - * Get an open /nanoui ui for the current user, src_object and ui_key - * - * * user - The `/mob` who opened/owns the ui - * * src_object - The `/obj` or `/mob` which the ui belongs to - * * ui_key - A string key used for the ui - */ -/datum/controller/subsystem/processing/nanoui/proc/get_open_ui(mob/user, src_object, ui_key) - var/src_object_key = REF(src_object) - if (!LAZYLEN(open_nanouis[src_object_key]) || !LAZYLEN(open_nanouis[src_object_key][ui_key])) - return null - - for (var/datum/nanoui/ui in open_nanouis[src_object_key][ui_key]) - if (ui.user == user) - return ui - - //testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - ui not found") - return null - -/** - * Update all `/nanoui` uis attached to src_object - * - * * src_object - The `/obj` or `/mob` which the uis are attached to - * - * Returns the number of UIs updated - */ -/datum/controller/subsystem/processing/nanoui/proc/update_uis(src_object) - var/src_object_key = REF(src_object) - if (!LAZYLEN(open_nanouis[src_object_key])) - return 0 - - . = 0 - var/list/obj_uis = open_nanouis[src_object_key] - for (var/ui_key in obj_uis) - for (var/thing in obj_uis[ui_key]) - var/datum/nanoui/ui = thing - if(ui && ui.src_object && ui.user && ui.src_object.ui_host()) - ui.process(1) - .++ - -/** - * Close all `/nanoui` uis attached to src_object - * - * * src_object - The `/obj` or `/mob` which the uis are attached to - * - * Returns the number of UIs closed - */ -/datum/controller/subsystem/processing/nanoui/proc/close_uis(src_object) - var/src_object_key = REF(src_object) - if (!open_nanouis[src_object_key] || !islist(open_nanouis[src_object_key])) - return 0 - - . = 0 - var/list/obj_uis = open_nanouis[src_object_key] - for (var/ui_key in obj_uis) - for (var/thing in obj_uis[ui_key]) - var/datum/nanoui/ui = thing - if(ui && ui.src_object && ui.user && ui.src_object.ui_host()) - ui.close() - .++ - -/** - * Update /nanoui uis belonging to user - * - * * user - The `/mob` who owns the uis - * * src_object - An `/obj` or `/mob` that, if is provided, only update uis which are attached to it (optional) - * * ui_key - A string, if ui_key is provided, only update uis with a matching ui_key (optional) - * - * Returns the number of UIs updated - */ -/datum/controller/subsystem/processing/nanoui/proc/update_user_uis(mob/user, src_object, ui_key) - if (!LAZYLEN(user.open_nanouis)) - return 0 // has no open uis - - . = 0 - for (var/thing in user.open_nanouis) - var/datum/nanoui/ui = thing - if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key)) - ui.process(1) - .++ - -/datum/controller/subsystem/processing/nanoui/proc/close_user_uis(mob/user, src_object, ui_key) - if (!LAZYLEN(user.open_nanouis)) - return 0 - - for (var/thing in user.open_nanouis) - var/datum/nanoui/ui = thing - if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key)) - ui.close() - .++ - - //testing("nanomanager/close_user_uis mob [user.name] closed [open_nanouis.len] of [.] uis") - -/** - * Add a /nanoui ui to the list of open uis - * This is called by the /nanoui open() proc - * - * * ui - The `/nanoui` ui to add - */ -/datum/controller/subsystem/processing/nanoui/proc/ui_opened(datum/nanoui/ui) - var/src_object_key = REF(ui.src_object) - LAZYINITLIST(open_nanouis[src_object_key]) - - LAZYADD(ui.user.open_nanouis, ui) - LAZYADD(open_nanouis[src_object_key][ui.ui_key], ui) - START_PROCESSING(SSnanoui, ui) - //testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_nanouis [ui.user.open_nanouis.len] | uis [uis.len] | processing_uis [processing_uis.len]") - -/** - * Remove a /nanoui ui from the list of open uis - * This is called by the /nanoui close() proc - * - * * ui - A `/nanoui` to remove - * - * Returns FALSE if no ui was removed, TRUE if removed successfully - */ -/datum/controller/subsystem/processing/nanoui/proc/ui_closed(datum/nanoui/ui) - var/src_object_key = REF(ui.src_object) - var/ui_key = ui.ui_key - var/list/obj_uis = open_nanouis[src_object_key] - - if (!LAZYLEN(obj_uis) || !obj_uis[ui_key]) - return 0 // Wasn't open. - - STOP_PROCESSING(SSnanoui, ui) - if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface) - LAZYREMOVE(ui.user.open_nanouis, ui) - - obj_uis[ui_key] -= ui - - if (!LAZYLEN(obj_uis[ui_key])) - obj_uis -= ui_key - - if (!LAZYLEN(obj_uis)) - open_nanouis -= src_object_key - - //testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_nanouis [ui.user.open_nanouis.len] | uis [uis.len] | processing_uis [processing_uis.len]") - - return 1 - -/** - * This is called on user logout - * Closes/clears all uis attached to the user's `/mob` - * - * * user - The user's `/mob` - */ -/datum/controller/subsystem/processing/nanoui/proc/user_logout(mob/user) - return close_user_uis(user) - -/** - * This is called when a player transfers from one mob to another - * Transfers all open UIs to the new mob - * - * * oldMob - The user's old `/mob` - * * newMob - The user's new `/mob` - */ -/datum/controller/subsystem/processing/nanoui/proc/user_transferred(mob/oldMob, mob/newMob) - //testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]") - if (!oldMob || !LAZYLEN(oldMob.open_nanouis) || !LAZYLEN(open_nanouis)) - //testing("nanomanager/user_transferred mob [oldMob.name] has no open uis") - return 0 // has no open uis - - for (var/thing in oldMob.open_nanouis) - var/datum/nanoui/ui = thing - ui.user = newMob - LAZYADD(newMob.open_nanouis, ui) - - oldMob.open_nanouis = null - - return 1 // success - -/datum/asset/nanoui - var/list/common = list() - - var/list/common_dirs = list( - "nano/css/", - "nano/js/", - "nano/images/", - "nano/images/status_icons/", - "nano/templates/" - ) - var/list/uncommon_dirs = list() - -/datum/asset/nanoui/register() - // Crawl the directories to find files. - for (var/path in common_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename)) != "/") // Ignore directories. - if(fexists(path + filename)) - common[filename] = fcopy_rsc(path + filename) - SSassets.transport.register_asset(filename, common[filename]) - for (var/path in uncommon_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename)) != "/") // Ignore directories. - if(fexists(path + filename)) - SSassets.transport.register_asset(filename, fcopy_rsc(path + filename)) - -/datum/asset/nanoui/send(client, uncommon) - if(!islist(uncommon)) - uncommon = list(uncommon) - - SSassets.transport.send_assets(client, uncommon) - SSassets.transport.send_assets(client, common) diff --git a/code/controllers/subsystems/processing/tgui.dm b/code/controllers/subsystems/tgui.dm similarity index 71% rename from code/controllers/subsystems/processing/tgui.dm rename to code/controllers/subsystems/tgui.dm index 77186dbf75b..563730f6b77 100644 --- a/code/controllers/subsystems/processing/tgui.dm +++ b/code/controllers/subsystems/tgui.dm @@ -10,11 +10,11 @@ * */ -PROCESSING_SUBSYSTEM_DEF(tgui) +SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 flags = SS_NO_INIT - priority = SS_PRIORITY_NANOUI + priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT /// A list of UIs scheduled to process @@ -24,54 +24,39 @@ PROCESSING_SUBSYSTEM_DEF(tgui) /// The HTML base used for all UIs. var/basehtml -/datum/controller/subsystem/processing/tgui/PreInit() - basehtml = file2text('tgui/public/tgui.html') - // Inject inline polyfills - var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') - polyfill = "" - basehtml = replacetextEx(basehtml, "", polyfill) - basehtml = replacetextEx(basehtml, "", "NanoTrasen © 2457-[text2num(time2text(world.realtime, "YYYY")) + 442]") +/datum/controller/subsystem/tgui/PreInit() + basehtml = file2text("tgui/public/tgui.html") - basehtml = replacetext(basehtml, "tgui:stylesheet", MAP_STYLESHEET) + // Inject inline helper functions + var/helpers = file2text("tgui/public/helpers.min.js") + helpers = "" + basehtml = replacetextEx(basehtml, "", helpers) -/datum/controller/subsystem/processing/tgui/OnConfigLoad() - var/storage_iframe = GLOB.config.storage_cdn_iframe - if(storage_iframe && storage_iframe != /datum/configuration::storage_cdn_iframe) - basehtml = replacetextEx(basehtml, "tgui:storagecdn", storage_iframe) - return + // Inject inline ntos-error styles + var/ntos_error = file2text("tgui/public/ntos-error.min.css") + ntos_error = "" + basehtml = replacetextEx(basehtml, "", ntos_error) - if(GLOB.config.asset_transport == "webroot") - var/datum/asset_transport/webroot/webroot = SSassets.transport + basehtml = replacetextEx(basehtml, "", "Nanotrasen (c) 2395-[num2text(GLOB.game_year)]") - var/datum/asset_cache_item/item = webroot.register_asset("iframe.html", file("tgui/public/iframe.html")) - basehtml = replacetext(basehtml, "tgui:storagecdn", webroot.get_asset_url("iframe.html", item)) - return - - if(!storage_iframe) - return - - basehtml = replacetextEx(basehtml, "tgui:storagecdn", storage_iframe) - -/datum/controller/subsystem/processing/tgui/Shutdown() +/datum/controller/subsystem/tgui/Shutdown() close_all_uis() -/datum/controller/subsystem/processing/tgui/stat_entry(msg) +/datum/controller/subsystem/tgui/stat_entry(msg) msg = "P:[length(all_uis)]" return ..() -/datum/controller/subsystem/processing/tgui/fire(resumed = FALSE) - CAN_BE_REDEFINED(TRUE) +/datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) src.current_run = all_uis.Copy() // Cache for sanic speed (lists are references anyways) var/list/current_run = src.current_run - var/seconds_per_tick = wait * 0.1 while(current_run.len) var/datum/tgui/ui = current_run[current_run.len] current_run.len-- // TODO: Move user/src_object check to process() if(ui?.user && ui.src_object) - ui.process(seconds_per_tick) + ui.process(wait * 0.1) else ui.close(0) if(MC_TICK_CHECK) @@ -84,9 +69,9 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * Returns null if pool was exhausted. * * required user mob - * return datum/tgui + * return datum/tgui_window */ -/datum/controller/subsystem/processing/tgui/proc/request_pooled_window(mob/user) +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) if(!user.client) return null var/list/windows = user.client.tgui_windows @@ -122,7 +107,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * required user mob */ -/datum/controller/subsystem/processing/tgui/proc/force_close_all_windows(mob/user) +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) log_tgui(user, context = "SStgui/force_close_all_windows") if(user.client) user.client.tgui_windows = list() @@ -138,14 +123,12 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * required user mob * required window_id string */ -/datum/controller/subsystem/processing/tgui/proc/force_close_window(mob/user, window_id) +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) log_tgui(user, context = "SStgui/force_close_window") // Close all tgui datums based on window_id. for(var/datum/tgui/ui in user.tgui_open_uis) if(ui.window && ui.window.id == window_id) ui.close(can_be_suspended = FALSE) - // Unset machine just to be sure. - user.unset_machine() // Close window directly just to be sure. user << browse(null, "window=[window_id]") @@ -161,7 +144,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return datum/tgui The found UI. */ -/datum/controller/subsystem/processing/tgui/proc/try_update_ui( +/datum/controller/subsystem/tgui/proc/try_update_ui( mob/user, datum/src_object, datum/tgui/ui) @@ -191,7 +174,8 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return datum/tgui The found UI. */ -/datum/controller/subsystem/processing/tgui/proc/get_open_ui(mob/user, datum/src_object) +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + // No UIs opened for this src_object if(!LAZYLEN(src_object?.open_uis)) return null for(var/datum/tgui/ui in src_object.open_uis) @@ -209,15 +193,15 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs updated. */ -/datum/controller/subsystem/processing/tgui/proc/update_uis(datum/src_object) +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + // No UIs opened for this src_object if(!LAZYLEN(src_object?.open_uis)) return 0 var/count = 0 - var/seconds_per_tick = wait * 0.1 for(var/datum/tgui/ui in src_object.open_uis) // Check if UI is valid. if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user)) - INVOKE_ASYNC(ui, TYPE_PROC_REF(/datum/tgui, process), seconds_per_tick, TRUE) + INVOKE_ASYNC(ui, TYPE_PROC_REF(/datum/tgui, process), wait * 0.1, TRUE) count++ return count @@ -230,7 +214,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/close_uis(datum/src_object) +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) // No UIs opened for this src_object if(!LAZYLEN(src_object?.open_uis)) return 0 @@ -249,7 +233,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/close_all_uis() +/datum/controller/subsystem/tgui/proc/close_all_uis() var/count = 0 for(var/datum/tgui/ui in all_uis) // Check if UI is valid. @@ -268,14 +252,13 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs updated. */ -/datum/controller/subsystem/processing/tgui/proc/update_user_uis(mob/user, datum/src_object) +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) var/count = 0 if(length(user?.tgui_open_uis) == 0) return count - var/seconds_per_tick = wait * 0.1 for(var/datum/tgui/ui in user.tgui_open_uis) if(isnull(src_object) || ui.src_object == src_object) - ui.process(seconds_per_tick, force = 1) + ui.process(wait * 0.1, force = 1) count++ return count @@ -289,7 +272,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/close_user_uis(mob/user, datum/src_object) +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object) var/count = 0 if(length(user?.tgui_open_uis) == 0) return count @@ -306,7 +289,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * required ui datum/tgui The UI to be added. */ -/datum/controller/subsystem/processing/tgui/proc/on_open(datum/tgui/ui) +/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) ui.user?.tgui_open_uis |= ui LAZYOR(ui.src_object.open_uis, ui) all_uis |= ui @@ -320,7 +303,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return bool If the UI was removed or not. */ -/datum/controller/subsystem/processing/tgui/proc/on_close(datum/tgui/ui) +/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) // Remove it from the list of processing UIs. all_uis -= ui current_run -= ui @@ -340,7 +323,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/on_logout(mob/user) +/datum/controller/subsystem/tgui/proc/on_logout(mob/user) close_user_uis(user) /** @@ -353,7 +336,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return bool If the UIs were transferred. */ -/datum/controller/subsystem/processing/tgui/proc/on_transfer(mob/source, mob/target) +/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) // The old mob had no open UIs. if(length(source?.tgui_open_uis) == 0) return FALSE diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 00000000000..fd35bbc4eec --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/components/local_network.dm b/code/datums/components/local_network.dm index fdce8aa8a49..3064a4176a0 100644 --- a/code/datums/components/local_network.dm +++ b/code/datums/components/local_network.dm @@ -47,11 +47,6 @@ lan = null return lan -/datum/component/local_network_member/nano_host() - if(parent) - return parent.nano_host() - . = ..() - /datum/component/local_network_member/proc/get_new_tag(mob/user) var/new_ident = input(user, "Enter a new ident tag.", "[parent]", id_tag) as null|text if(new_ident && parent && user.Adjacent(parent) && CanInteract(user, GLOB.physical_state)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index db9b0457e9d..1f1423f6e6e 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -94,7 +94,6 @@ current.remove_vampire_powers() current.mind = null - SSnanoui.user_transferred(current, new_character) SStgui.on_transfer(current, new_character) if(current.client && GLOB.ticket_panels[current.client]) var/datum/ticket_panel/tp = GLOB.ticket_panels[current.client] diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 27946fa12ae..ac75f7c0057 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -6,7 +6,8 @@ wires = list( WIRE_POWER, WIRE_IDSCAN, WIRE_AI, - WIRE_PANIC, WIRE_ALARM + WIRE_PANIC, WIRE_ALARM, + WIRE_RCON ) add_duds(3) ..() @@ -24,6 +25,7 @@ . += A.locked ? "The air alarm is locked." : "The air alarm is unlocked." . += (A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "The Air Alarm is offline." : "The Air Alarm is working properly!" . += A.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on." + . += A.rcon_setting ? "The remote control link is enabled." : "The remote control link is disabled." /datum/wires/alarm/on_cut(wire, mend, source) var/obj/structure/machinery/alarm/A = holder @@ -51,6 +53,12 @@ A.post_alert(2) A.update_icon() + if(WIRE_RCON) + if(!mend) + A.rcon_setting = FALSE + else + A.rcon_setting = TRUE + /datum/wires/alarm/on_pulse(wire) var/obj/structure/machinery/alarm/A = holder switch(wire) @@ -67,7 +75,6 @@ A.shorted = 0 A.update_icon() - if (WIRE_AI) if (A.aidisabled == 0) A.aidisabled = 1 @@ -83,7 +90,7 @@ A.mode = 1 // AALARM_MODE_SCRUB A.apply_mode() - if(WIRE_ALARM) + if(WIRE_ALARM, WIRE_RCON) if (A.alarm_area.atmosalert(0, A)) A.post_alert(0) A.update_icon() diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index 02c2284958d..c234334c2f0 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -31,7 +31,7 @@ if(WIRE_TRANSMIT) R.set_broadcasting(!R.get_broadcasting() && !is_cut(WIRE_SIGNAL)) - SSnanoui.update_uis(holder) + SStgui.update_uis(holder) /datum/wires/radio/on_cut(wire, mend, source) var/obj/item/radio/R = holder @@ -45,4 +45,4 @@ if(WIRE_TRANSMIT) R.set_broadcasting(mend && !is_cut(WIRE_SIGNAL)) - SSnanoui.update_uis(holder) + SStgui.update_uis(holder) diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 3f4a3d6a249..ab8d049536d 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -87,6 +87,15 @@ if(src.desc) . += src.desc + var/list/tags_list = examine_tags(user) + if(length(tags_list)) + var/tag_string = list() + for (var/atom_tag in tags_list) + tag_string += (isnull(tags_list[atom_tag]) ? atom_tag : SPAN_TOOLTIP(tags_list[atom_tag], atom_tag)) + // some regex to ensure that we don't add another "and" if the final element's main text (not tooltip) has one + tag_string = english_list(tag_string, and_text = (findtext(tag_string[length(tag_string)], regex(@">.*?and .*?<"))) ? " " : " and ") + . += "It is a [tag_string] [examine_descriptor(user)]." + // Returns a SPAN_* based on health, if configured. var/list/condition_hints = src.condition_hints() if(length(condition_hints)) @@ -145,6 +154,35 @@ if(H.glasses) H.glasses.glasses_examine_atom(src, H) +/// What this atom should be called in examine tags +/atom/proc/examine_descriptor(mob/user) + return "object" + +/** + * A list of "tags" displayed after atom's description in examine. + * This should return an assoc list of tags -> tooltips for them. If item is null, then no tooltip is assigned. + * + * * TGUI tooltips (not the main text) in chat cannot use HTML stuff at all, so + * trying something like `ffff` will not work for tooltips. + * + * For example: + * ```byond + * . = list() + * .["small"] = "It is a small item." + * .["fireproof"] = "It is made of fire-retardant materials." + * .["and conductive"] = "It's made of conductive materials and whatnot. Blah blah blah." // having "and " in the end tag's main text/key works too! + * ``` + * will result in + * + * It is a *small*, *fireproof* *and conductive* item. + * + * where "item" is pulled from [/atom/proc/examine_descriptor] + */ +/atom/proc/examine_tags(mob/user) + . = list() + + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_TAGS, user, .) + /** * Used to check if "examine_fluff" from the HTML link in examine() is true, i.e. if it was clicked. */ diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 55db684600b..a7eec14b0ab 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -344,23 +344,22 @@ I.forceMove(T) -/obj/item/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended = FALSE) - var/size - switch(src.w_class) - if (WEIGHT_CLASS_HUGE to INFINITY) - size = "huge" - if (WEIGHT_CLASS_BULKY to WEIGHT_CLASS_HUGE) - size = "bulky" - if (WEIGHT_CLASS_NORMAL to WEIGHT_CLASS_BULKY) - size = "normal-sized" - if (WEIGHT_CLASS_SMALL to WEIGHT_CLASS_NORMAL) - size = "small" - if (0 to WEIGHT_CLASS_SMALL) - size = "tiny" - //Changed this switch to ranges instead of tiered values, to cope with granularity and also - //things outside its range ~Nanako +/obj/item/examine_descriptor(mob/user) + return "item" - . = ..(user, distance, is_adjacent, "It is a [size] item.", get_extended = get_extended) +/obj/item/examine_tags(mob/user) + var/list/parent_tags = ..() + parent_tags.Insert(1, weight_class_to_text(w_class)) // To make size display first, otherwise it looks goofy + . = parent_tags + .[weight_class_to_text(w_class)] = weight_class_to_tooltip(w_class) + + if (siemens_coefficient == 0) + .["insulated"] = "It is made from a robust electrical insulator and will block any electricity passing through it!" + else if (siemens_coefficient <= 0.5) + .["partially insulated"] = "It is made from a poor insulator that will dampen (but not fully block) electric shocks passing through it." + +/obj/item/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended = FALSE) + . = ..(user, distance, is_adjacent, get_extended = get_extended) var/datum/component/armor/armor_component = GetComponent(/datum/component/armor) if(armor_component && !armor_component.hidden) . += FONT_SMALL(SPAN_NOTICE("\[?\] This item has armor values. \[Show Armor Values\]")) diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 7eb77201608..09f5eafce0d 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -42,7 +42,7 @@ else if(crystal_type == CRYSTAL_TYPE_BLUECRYSTAL) I.hidden_uplink.bluecrystals += amount I.hidden_uplink.update_tgui_data() - SSnanoui.update_uis(I.hidden_uplink) + SStgui.update_uis(I.hidden_uplink) use(amount) to_chat(user, SPAN_NOTICE("You slot \the [src] into \the [I] and charge its internal uplink.")) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 05ee754b08e..766a38cd711 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -6,16 +6,20 @@ pass_flags_self = PASSSTRUCTURE should_use_health = TRUE - var/material_alteration = MATERIAL_ALTERATION_ALL // Overrides for material shit. Set them manually if you don't want colors etc. See wood chairs/office chairs. + /// Overrides for material shit. Set them manually if you don't want colors etc. See wood chairs/office chairs. + var/material_alteration = MATERIAL_ALTERATION_ALL var/climbable var/parts var/list/climbers - var/list/footstep_sound //footstep sounds when stepped on + /// Footstep sounds when stepped on + var/list/footstep_sound var/material/material - var/build_amt = 2 // used by some structures to determine into how many pieces they should disassemble into or be made with + /// Used by some structures to determine into how many pieces they should disassemble into or be made with + var/build_amt = 2 - var/slowdown = 0 //amount that pulling mobs have their movement delayed by + /// Amount that pulling mobs have their movement delayed by + var/slowdown = 0 /obj/structure/Initialize(mapload) . = ..() @@ -40,6 +44,14 @@ material = null return ..() +/obj/structure/examine_descriptor(mob/user) + return "structure" + +/obj/structure/examine_tags(atom/source, mob/user, list/examine_list) + . = ..() + if(climbable) + .["climbable"] = "It can be climbed on, either by dragging your mob onto it or middle-clicking it." + /obj/structure/attackby(obj/item/attacking_item, mob/user, params) . = ..() if(user?.a_intent == I_HURT && maxhealth) diff --git a/code/game/objects/structures/_machinery.dm b/code/game/objects/structures/_machinery.dm index 54099d1d51b..574e007f162 100644 --- a/code/game/objects/structures/_machinery.dm +++ b/code/game/objects/structures/_machinery.dm @@ -258,6 +258,9 @@ Class Procs: return FALSE qdel(src) +/obj/structure/machinery/examine_descriptor(mob/user) + return "machine" + // /obj/structure/machinery/proc/process_all() // /* Uncomment this if/when you need component processing // if(processing_flags & MACHINERY_PROCESS_COMPONENTS) @@ -643,5 +646,5 @@ Class Procs: /obj/structure/machinery/ui_status(mob/user, datum/ui_state/state) . = ..() if(. < UI_INTERACTIVE) - if(user.machine) + if(user?.machine) user.unset_machine() diff --git a/code/game/objects/structures/machinery/alarm.dm b/code/game/objects/structures/machinery/alarm.dm index a58c2b3518d..a34f6978d47 100644 --- a/code/game/objects/structures/machinery/alarm.dm +++ b/code/game/objects/structures/machinery/alarm.dm @@ -118,9 +118,8 @@ pixel_x = 10; var/breach_detection = 1 //var/skipprocess = 0 //Experimenting var/alarm_frequency = 1437 - var/remote_control = 0 - var/rcon_setting = 2 - var/rcon_time = 0 + /// If true, RCON is enabled. If false, RCON has been disabled. + var/rcon_setting = TRUE var/locked = 1 var/aidisabled = 0 var/shorted = 0 @@ -475,18 +474,6 @@ pixel_x = 10; mode=AALARM_MODE_FILL apply_mode() - //atmos computer remote controll stuff - switch(rcon_setting) - if(RCON_NO) - remote_control = 0 - if(RCON_AUTO) - if(danger_level == 2) - remote_control = 1 - else - remote_control = 0 - if(RCON_YES) - remote_control = 1 - return /obj/structure/machinery/alarm/proc/handle_heating_cooling(datum/gas_mixture/environment, seconds_per_tick) @@ -698,6 +685,22 @@ pixel_x = 10; frequency.post_signal(src, alert_signal) +/obj/structure/machinery/alarm/proc/is_alarming() + return max(danger_level, alarm_area?.atmosalm) > 0 + +/obj/structure/machinery/alarm/proc/is_remote_user(mob/user) + if(!user) + return FALSE + for(var/datum/tgui/open_tgui in user.tgui_open_uis) + if(open_tgui.interface == "AtmosAlarmControl") + return TRUE + return FALSE + +/obj/structure/machinery/alarm/proc/is_unlocked_for(mob/user) + if(is_remote_user(user) && rcon_setting) + return TRUE + return !locked || issilicon(user) + /obj/structure/machinery/alarm/attack_ai(mob/user) if(!ai_can_interact(user)) return @@ -751,7 +754,8 @@ pixel_x = 10; data["target_temperature"] = round(target_temperature - T0C, 0.1) // Access - data["locked"] = locked && !issilicon(user) + data["locked"] = !is_unlocked_for(user) + data["remote_view"] = is_remote_user(user) data["shorted"] = shorted data["rcon"] = rcon_setting @@ -848,14 +852,6 @@ pixel_x = 10; // Actions available without unlocking switch(action) - if("rcon") - var/new_rcon = text2num(params["value"]) - switch(new_rcon) - if(RCON_NO) rcon_setting = RCON_NO - if(RCON_AUTO) rcon_setting = RCON_AUTO - if(RCON_YES) rcon_setting = RCON_YES - return TRUE - if("temperature") var/list/tlv = TLV["temperature"] var/max_temperature = min(tlv[3] - T0C, MAX_TEMPERATURE) @@ -871,7 +867,7 @@ pixel_x = 10; return TRUE // Actions that require the alarm to be unlocked - if(locked && !issilicon(usr)) + if(!is_unlocked_for(usr)) return switch(action) @@ -962,11 +958,10 @@ pixel_x = 10; apply_mode() return TRUE -/// Snowflake proc to make it so users of the Atmosphere Control app (having the UI open) have full access to an alarm. +/// Lets Atmosphere Control users remotely view alarms. /obj/structure/machinery/alarm/ui_status(mob/user) - for(var/datum/tgui/open_tgui in user.tgui_open_uis) - if(open_tgui.interface == "AtmosAlarmControl") - return UI_INTERACTIVE + if(is_remote_user(user) && rcon_setting) + return UI_INTERACTIVE return ..() /** diff --git a/code/game/objects/structures/machinery/atmo_control.dm b/code/game/objects/structures/machinery/atmo_control.dm index 69fcdca9d06..09becf19622 100644 --- a/code/game/objects/structures/machinery/atmo_control.dm +++ b/code/game/objects/structures/machinery/atmo_control.dm @@ -141,7 +141,7 @@ var/list/sensor_information = list() var/datum/radio_frequency/radio_connection - var/ui_type = "AtmosControl" + ui_type = "AtmosControl" circuit = /obj/item/circuitboard/air_management /obj/structure/machinery/computer/general_air_control/Destroy() diff --git a/code/game/objects/structures/machinery/computer/computer.dm b/code/game/objects/structures/machinery/computer/computer.dm index b84ecef4389..abd74c754e3 100644 --- a/code/game/objects/structures/machinery/computer/computer.dm +++ b/code/game/objects/structures/machinery/computer/computer.dm @@ -32,6 +32,9 @@ /// The access cable inserted into this computer, if any. var/obj/item/access_cable/inserted_cable + /// Contains the name of the TGUI interface file opened when using this computer. If null, + var/ui_type = "" + /obj/structure/machinery/computer/Initialize() . = ..() overlay_layer = layer @@ -45,11 +48,6 @@ inserted_cable = null return ..() -/obj/structure/machinery/computer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = TRUE) - if(!operable() || !is_station_level(z) || user.stat) - user.unset_machine() - return - /obj/structure/machinery/computer/emp_act(severity) . = ..() diff --git a/code/game/objects/structures/machinery/dna_machines.dm b/code/game/objects/structures/machinery/dna_machines.dm index 8d5c7f08ae6..f86c9de109f 100644 --- a/code/game/objects/structures/machinery/dna_machines.dm +++ b/code/game/objects/structures/machinery/dna_machines.dm @@ -248,10 +248,7 @@ /obj/structure/machinery/computer/scan_consolenew/attackby(obj/item/attacking_item, mob/user) if (istype(attacking_item, /obj/item/disk/data)) //INSERT SOME diskS if (!src.disk) - user.drop_from_inventory(attacking_item, src) - src.disk = attacking_item - to_chat(user, "You insert [attacking_item].") - SSnanoui.update_uis(src) // update all UIs attached to src + to_chat(user, "You try to insert [attacking_item], but the drive seems jammed.") return TRUE else return ..() diff --git a/code/game/objects/structures/machinery/embedded_controller/docking_program.dm b/code/game/objects/structures/machinery/embedded_controller/docking_program.dm index fa992ccddb2..6eb60977af2 100644 --- a/code/game/objects/structures/machinery/embedded_controller/docking_program.dm +++ b/code/game/objects/structures/machinery/embedded_controller/docking_program.dm @@ -274,7 +274,6 @@ signal.data["dock_status"] = get_docking_status() post_signal(signal) -//this is mostly for NanoUI /datum/computer/file/embedded_program/docking/proc/get_docking_status() switch (dock_state) if (STATE_UNDOCKED) return "undocked" diff --git a/code/game/objects/structures/machinery/vending/_vending.dm b/code/game/objects/structures/machinery/vending/_vending.dm index 5c6517d5783..a2534f3f8f3 100644 --- a/code/game/objects/structures/machinery/vending/_vending.dm +++ b/code/game/objects/structures/machinery/vending/_vending.dm @@ -97,7 +97,7 @@ var/categories = CAT_NORMAL /// What we're requesting payment for right now var/datum/data/vending_product/currently_vending = null - /// Status screen messages like "insufficient funds", displayed in NanoUI + /// Status screen messages like "insufficient funds", displayed in UI var/status_message = "" /// Set to 1 if status_message is an error var/status_error = 0 @@ -770,7 +770,6 @@ sel_key = params["vendItem"] var/datum/data/vending_product/R = product_records[key] - // This should not happen unless the request from NanoUI was bad if(!(R.category & categories)) return diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index ff981c97dbe..b86db50919a 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -26,6 +26,9 @@ /// If the turf should generate details. Default: TRUE var/has_edge_icon = TRUE +/turf/simulated/floor/examine_descriptor(mob/user) + return "floor" + /turf/simulated/floor/disassembly_hints(mob/user, distance, is_adjacent) . += ..() if(flooring) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 104a39b4f84..6ada1a0b148 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -62,6 +62,9 @@ state = SPAN_NOTICE("\The [src] seems completely intact.") . = state +/turf/simulated/wall/examine_descriptor(mob/user) + return "wall" + /turf/simulated/wall/mechanics_hints(mob/user, distance, is_adjacent) . += ..() if(locate(/obj/effect/overlay/wallrot) in src) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index 4f2a2740e20..ebce3c7ba98 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -3,6 +3,9 @@ icon = 'icons/turf/flooring/tiles.dmi' icon_state = "tiled_preview" +/turf/unsimulated/floor/examine_descriptor(mob/user) + return "floor" + /turf/unsimulated/floor/monotile icon_state = "monotile_preview" diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index 1467831b41c..844df462165 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -7,6 +7,9 @@ blocks_air = TRUE pass_flags_self = PASSCLOSEDTURF +/turf/unsimulated/wall/examine_descriptor(mob/user) + return "wall" + /turf/unsimulated/wall/fakeglass name = "window" icon = 'icons/turf/walls.dmi' diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 972aa5519d3..32f5789b9b2 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -265,14 +265,6 @@ else //Delayed to avoid wingets from Login calls. addtimer(CALLBACK(src, VERB_REF(fit_viewport), 1 SECONDS)) -/client/verb/refresh_tgui() - set name = "Refresh TGUI" - set category = "OOC.Debug" - - for(var/window_id in tgui_windows) - var/datum/tgui_window/window = tgui_windows[window_id] - window.reinitialize() - /client/verb/fix_stat_panel() set name = "Fix-Stat-Panel" set hidden = TRUE diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 528a490c641..916fe9716a4 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -180,7 +180,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, list( /datum/admins/proc/toggle_round_spookyness, /datum/admins/proc/toggle_space_ninja, /client/proc/toggle_random_events, - /client/proc/nanomapgen_DumpImage, /client/proc/toggle_recursive_explosions, /client/proc/restart_controller, /client/proc/cmd_ss_panic, @@ -355,7 +354,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /datum/admins/proc/adjump, /datum/admins/proc/toggle_space_ninja, /client/proc/toggle_random_events, - /client/proc/nanomapgen_DumpImage, /client/proc/play_local_sound, /client/proc/play_sound, /client/proc/play_server_sound, @@ -475,7 +473,6 @@ GLOBAL_LIST_INIT(admin_verbs_dev, list( //will need to be altered - Ryan784 /client/proc/jumptoship, /client/proc/jumptosector, /client/proc/cmd_dev_say, - /client/proc/nanomapgen_DumpImage, /client/proc/admin_ghost, /client/proc/air_report, /client/proc/enable_debug_verbs, diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index fde6a515bfc..603011407f8 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -463,21 +463,6 @@ usr << browse(HTML_SKELETON(replacetext(SSatoms.InitLog(), "\n", "
")), "window=initlog") -/client/proc/reload_nanoui_resources() - set category = "Debug" - set name = "Reload NanoUI Resources" - set desc = "Force the client to redownload NanoUI Resources" - - // Close open NanoUIs. - SSnanoui.close_user_uis(usr) - - // Re-load the assets. - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) - assets.register() - - // Clear the user's cache so they get resent. - usr.client.sent_assets = list() - /** * Used to generate lag and load the MC to test how things work under live server stress */ diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index 8bb41cc3706..3e89a876196 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -6,7 +6,6 @@ S["UI_style"] >> pref.UI_style S["UI_style_color"] >> pref.UI_style_color S["UI_style_alpha"] >> pref.UI_style_alpha - S["tgui_fancy"] >> pref.tgui_fancy S["tgui_lock"] >> pref.tgui_lock S["ooccolor"] >> pref.ooccolor S["clientfps"] >> pref.clientfps @@ -21,7 +20,6 @@ S["UI_style"] << pref.UI_style S["UI_style_color"] << pref.UI_style_color S["UI_style_alpha"] << pref.UI_style_alpha - S["tgui_fancy"] << pref.tgui_fancy S["tgui_lock"] << pref.tgui_lock S["ooccolor"] << pref.ooccolor S["clientfps"] << pref.clientfps @@ -39,7 +37,6 @@ "UI_style", "UI_style_color", "UI_style_alpha", - "tgui_fancy", "tgui_lock", "ooccolor", "clientfps", @@ -63,7 +60,6 @@ "UI_style", "UI_style_color", "UI_style_alpha", - "tgui_fancy", "tgui_lock", "ooccolor", "clientfps", @@ -83,7 +79,6 @@ "UI_style_alpha" = pref.UI_style_alpha, "UI_style_color" = pref.UI_style_color, "UI_style" = pref.UI_style, - "tgui_fancy" = pref.tgui_fancy, "tgui_lock" = pref.tgui_lock, "ooccolor" = pref.ooccolor, "clientfps" = pref.clientfps, @@ -100,7 +95,6 @@ pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color)) pref.UI_style_alpha = sanitize_integer(text2num(pref.UI_style_alpha), 0, 255, initial(pref.UI_style_alpha)) pref.clientfps = sanitize_integer(text2num(pref.clientfps), 0, 1000, initial(pref.clientfps)) - pref.tgui_fancy = sanitize_bool(pref.tgui_fancy, TRUE) pref.tgui_lock = sanitize_bool(pref.tgui_lock, FALSE) pref.tgui_inputs = sanitize_bool(pref.tgui_inputs, TRUE) pref.tgui_buttons_large = sanitize_bool(pref.tgui_buttons_large, FALSE) @@ -116,7 +110,6 @@ dat += "-Color: [pref.UI_style_color] [HTML_RECT(pref.UI_style_color)] - reset
" dat += "-Alpha(transparency): [pref.UI_style_alpha] - reset
" dat += "Tooltip Style: [pref.tooltip_style]
" - dat += "TGUI Fancy: [pref.tgui_fancy ? "ON" : "OFF"]
" dat += "TGUI Lock: [pref.tgui_lock ? "ON" : "OFF"]
" dat += "TGUI Inputs: [pref.tgui_inputs ? "ON" : "OFF"]
" dat += "TGUI Input Large Buttons: [pref.tgui_buttons_large ? "ON" : "OFF"]
" @@ -152,10 +145,6 @@ pref.UI_style_alpha = UI_style_alpha_new return TOPIC_REFRESH - else if(href_list["select_tguif"]) - pref.tgui_fancy = !pref.tgui_fancy - return TOPIC_REFRESH - else if(href_list["select_tguil"]) pref.tgui_lock = !pref.tgui_lock return TOPIC_REFRESH diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4287ce1c510..ed3d511060a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -26,7 +26,6 @@ GLOBAL_LIST_EMPTY_TYPED(preferences_datums, /datum/preferences) var/sfx_toggles = ASFX_DEFAULT var/UI_style_color = "#ffffff" var/UI_style_alpha = 255 - var/tgui_fancy = TRUE var/tgui_lock = FALSE var/tgui_inputs = TRUE var/tgui_buttons_large = FALSE diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1bdba12895a..e55047a1a7b 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -77,6 +77,16 @@ QDEL_LIST(accessories) return ..() +/obj/item/clothing/examine_descriptor(mob/user) + return "clothing" + +/obj/item/clothing/examine_tags(mob/user) + . = ..() + if(item_flags & ITEM_FLAG_THICK_MATERIAL) + .["thick"] = "Stops or slows minor piercing effects, such as from injectors." + if(item_flags & ITEM_FLAG_INJECTION_PORT) + .["port-enabled"] = "Has a dedicated injection port for syringes and hypo-sprays to be used on the wearer." + //Updates the icons of the mob wearing the clothing item, if any. /obj/item/clothing/proc/update_clothing_icon() return diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index c0cd8b186a3..660eb4a610f 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -5,6 +5,7 @@ icon_state = "hardhat_yellow" item_state = "hardhat_yellow" light_overlay = "hardhat_light" + item_flags = ITEM_FLAG_THICK_MATERIAL contained_sprite = TRUE action_button_name = "Toggle Headlamp" light_range = 4 //luminosity when on diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm index c6644c32ace..cab3572e6fa 100644 --- a/code/modules/heavy_vehicle/mecha.dm +++ b/code/modules/heavy_vehicle/mecha.dm @@ -325,9 +325,6 @@ if(istype(exosuit) && exosuit.head && exosuit.head.radio && exosuit.head.radio.is_functional()) return ..() -/obj/item/radio/exosuit/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/ui_state/state = GLOB.mech_state) - . = ..() - /mob/living/heavy_vehicle/proc/become_remote() for(var/mob/user in pilots) eject(user, FALSE) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index d63394c3b8b..8a9d9ec4258 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -5,7 +5,6 @@ //TGUI remove_all_indicators() - SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs GLOB.player_list -= src disconnect_time = world.realtime log_access("Logout: [key_name(src)]") diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm index 5d551a1549a..407c5f5cf9a 100644 --- a/code/modules/modular_computers/_description.dm +++ b/code/modules/modular_computers/_description.dm @@ -45,8 +45,7 @@ if one is destroyed the second will take over. If all relays are gone it stops w possible to enable/disable Software Downloading, P2P file transfers and Communication (IC version of IRC, PDA messages for more than two people) 5. Software -Software would almost exclusively use NanoUI modules. Few exceptions are text editor (uses similar screen as TCS IDE used for editing and classic HTML for previewing as Nano looks differently) -and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network. +Software would almost exclusively use TGUI modules. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network. What i plan to add: Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 7d5bc187dd7..77c8a4bad2e 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -416,13 +416,10 @@ /obj/item/modular_computer/proc/update_uis() if(active_program) //Should we update program ui or computer ui? - SSnanoui.update_uis(active_program) - SStgui.update_uis(src) - if(active_program.NM) - SSnanoui.update_uis(active_program.NM) + if(active_program) + SStgui.update_uis(active_program) else SStgui.update_uis(src) - SSnanoui.update_uis(src) /obj/item/modular_computer/proc/check_update_ui_need() var/ui_update_needed = FALSE @@ -458,18 +455,6 @@ if(ui_update_needed) update_uis() -// Used by camera monitor program -/obj/item/modular_computer/check_eye(var/mob/user) - if(active_program) - return active_program.check_eye(user) - return ..() - -// Used by camera monitor program -/obj/item/modular_computer/grants_equipment_vision(var/mob/user) - if(active_program) - return active_program.grants_equipment_vision(user) - return ..() - /obj/item/modular_computer/get_cell() return battery_module ? battery_module.get_cell() : DEVICE_NO_CELL diff --git a/code/modules/modular_computers/computers/modular_computer/ui.dm b/code/modules/modular_computers/computers/modular_computer/ui.dm index 7652f8dc84e..51af5ce2a2d 100644 --- a/code/modules/modular_computers/computers/modular_computer/ui.dm +++ b/code/modules/modular_computers/computers/modular_computer/ui.dm @@ -37,9 +37,9 @@ /obj/item/modular_computer/proc/get_header_data(list/data) LAZYINITLIST(data) - data["PC_batteryicon"] = get_battery_icon() + data["PC_batteryicon"] = battery_module ? get_battery_icon() : null data["PC_showbatteryicon"] = !!battery_module - data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : "N/C" + data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : null data["PC_apclinkicon"] = (tesla_link?.enabled && apc_powered) ? "charging.gif" : "" data["PC_device_theme"] = active_program ? active_program.tgui_theme : "scc" data["PC_ntneticon"] = get_ntnet_status_icon() @@ -206,5 +206,15 @@ return UI_INTERACTIVE . = ..() if(. < UI_INTERACTIVE) - if(user.machine) + if(user?.machine) user.unset_machine() + +/obj/item/modular_computer/check_eye(mob/user) + if(active_program) + return active_program.check_eye(user) + return ..() + +/obj/item/modular_computer/grants_equipment_vision(mob/user) + if(active_program) + return active_program.grants_equipment_vision(user) + return ..() diff --git a/code/modules/modular_computers/computers/subtypes/dev_silicon.dm b/code/modules/modular_computers/computers/subtypes/dev_silicon.dm index 6721a1b8222..bfa09170fb8 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_silicon.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_silicon.dm @@ -19,6 +19,9 @@ /obj/item/modular_computer/silicon/ui_host() . = computer_host +/obj/item/modular_computer/silicon/ui_state(mob/user) + return GLOB.self_state + /obj/item/modular_computer/silicon/Initialize(mapload) if(istype(loc, /mob/living/silicon)) computer_host = loc diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 08787f46ac7..dfb0d78d0f2 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -84,11 +84,7 @@ ABSTRACT_TYPE(/datum/computer_file/program) var/tgui_theme = "scc" /// If this TGUI should autoupdate or not. - var/ui_auto_update = TRUE - - // TO BE DEPRECATED: - var/datum/nano_module/NM // If the program uses NanoModule, put it here and it will be automagically opened. Otherwise implement ui_interact. - var/nanomodule_path // Path to nanomodule, make sure to set this if implementing new program. + var/ui_auto_update = TRUE // Path to nanomodule, make sure to set this if implementing new program. /datum/computer_file/program/New(obj/item/modular_computer/comp) ..() @@ -136,7 +132,6 @@ ABSTRACT_TYPE(/datum/computer_file/program) var/datum/computer_file/program/temp = ..(rename, computer) temp.required_access_run = required_access_run temp.required_access_download = required_access_download - temp.nanomodule_path = nanomodule_path temp.filedesc = filedesc temp.program_icon_state = program_icon_state temp.requires_ntnet = requires_ntnet @@ -200,6 +195,14 @@ ABSTRACT_TYPE(/datum/computer_file/program) return computer.get_ntnet_status(specific_action) return FALSE +/// Allows active programs to preserve non-standard user views, such as camera monitors. +/datum/computer_file/program/proc/check_eye(mob/user) + return -1 + +/// Allows active programs to grant equipment vision while controlling the user's view. +/datum/computer_file/program/proc/grants_equipment_vision(mob/user) + return FALSE + // Called by Process() on device that runs us, once every tick. /datum/computer_file/program/proc/process_tick() return TRUE @@ -307,31 +310,12 @@ ABSTRACT_TYPE(/datum/computer_file/program) else // Should never happen - So fail silently return FALSE -// This attempts to retrieve header data for NanoUIs. If implementing completely new device of different type than existing ones +// This attempts to retrieve header data for UIs. If implementing completely new device of different type than existing ones // always include the device here in this proc. This proc basically relays the request to whatever is running the program. /datum/computer_file/program/proc/get_header_data() if(computer) return computer.get_header_data() - -/datum/computer_file/program/Topic(href, href_list) - if(..()) - return TRUE - if(computer) - return computer.Topic(href, href_list) - -// Relays the call to nano module, if we have one -/datum/computer_file/program/proc/check_eye(var/mob/user) - if(NM) - return NM.check_eye(user) - else - return -1 - -/// Relays the call to nano module, if we have one -/datum/computer_file/program/proc/grants_equipment_vision(var/mob/user) - if(NM) - return NM.grants_equipment_vision(user) - /datum/computer_file/program/proc/message_dead(var/message) for(var/mob/M in GLOB.player_list) if(M.stat == DEAD && (M.client && M.client.prefs.toggles & CHAT_GHOSTEARS)) diff --git a/code/modules/modular_computers/file_system/program_events.dm b/code/modules/modular_computers/file_system/program_events.dm index 9b03b8d6369..f49a38a1355 100644 --- a/code/modules/modular_computers/file_system/program_events.dm +++ b/code/modules/modular_computers/file_system/program_events.dm @@ -5,8 +5,6 @@ // When implementing new program based device, use this to run the program. /datum/computer_file/program/proc/run_program(var/mob/user) if(can_run(user, 1) || !requires_access_to_run) - if(nanomodule_path) - NM = new nanomodule_path(src, new /datum/topic_manager/program(src), src) if(requires_ntnet && network_destination) generate_network_log("Connection opened to [network_destination].") program_state = PROGRAM_STATE_ACTIVE @@ -18,9 +16,6 @@ program_state = PROGRAM_STATE_KILLED if(network_destination) generate_network_log("Connection to [network_destination] closed.") - if(NM) - qdel(NM) - NM = null return TRUE // Is called when program service is being activated diff --git a/code/modules/modular_computers/file_system/programs/_program.dm b/code/modules/modular_computers/file_system/programs/_program.dm index 72030a2d2d1..c0293bdc125 100644 --- a/code/modules/modular_computers/file_system/programs/_program.dm +++ b/code/modules/modular_computers/file_system/programs/_program.dm @@ -1,39 +1,5 @@ -/obj/item/modular_computer/initial_data() +/obj/item/modular_computer/proc/initial_data() return list("_PC" = get_header_data()) -/datum/computer_file/program/initial_data() +/datum/computer_file/program/proc/initial_data() return list("_PC" = get_header_data()) - -/obj/item/modular_computer/update_layout() - return TRUE - -/datum/computer_file/program/update_layout() - return TRUE - -/datum/nano_module/program - available_to_ai = FALSE - var/datum/computer_file/program/program // Program-Based computer program that runs this nano module. Defaults to null. - -/datum/nano_module/program/New(var/host, var/topic_manager, var/program) - ..() - src.program = program - -/datum/nano_module/program/Destroy() - program = null - return ..() - -/datum/topic_manager/program - var/datum/program - -/datum/topic_manager/program/New(var/datum/program) - ..() - src.program = program - -/datum/topic_manager/program/Destroy() - program = null - return ..() - -// Calls forwarded to PROGRAM itself should begin with "PRG_" -// Calls forwarded to COMPUTER running the program should begin with "PC_" -/datum/topic_manager/program/Topic(href, href_list) - return program && program.Topic(href, href_list) diff --git a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm index 6d619a3de26..e87234b0b31 100644 --- a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm +++ b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm @@ -9,7 +9,6 @@ available_on_ntnet = TRUE usage_flags = PROGRAM_ALL tgui_id = "CargoOrder" - ui_auto_update = FALSE var/page = "main" //main - Main Menu, order - Order Page, item_details - Item Details Page, tracking - Tracking Page var/selected_category = null // Category that is currently selected diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm index 4c6aa651443..e60bb5daa69 100644 --- a/code/modules/modular_computers/file_system/programs/command/card.dm +++ b/code/modules/modular_computers/file_system/programs/command/card.dm @@ -11,7 +11,6 @@ size = 8 color = LIGHT_COLOR_BLUE tgui_id = "IDCardModification" - ui_auto_update = FALSE var/is_centcom = FALSE var/show_assignments = FALSE diff --git a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm index 6eebe6b56e8..fe77a3024bf 100644 --- a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm +++ b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm @@ -12,7 +12,6 @@ network_destination = "station long-range communication array" color = LIGHT_COLOR_BLUE tgui_id = "CommandCommunications" - ui_auto_update = FALSE var/datum/comm_message_listener/message_core var/intercept = FALSE var/can_call_shuttle = FALSE //If calling the shuttle should be available from this console @@ -272,7 +271,12 @@ GLOBAL_VAR_INIT(last_message_id, 0) /datum/comm_message_listener/proc/Add(var/list/message) messages[++messages.len] = message -/datum/comm_message_listener/proc/Remove(var/list/message) +/datum/comm_message_listener/proc/Remove(var/message) + if(isnum(message)) + for(var/list/stored_message in messages) + if(stored_message["id"] == message) + message = stored_message + break messages -= list(message) /* Command action procs diff --git a/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm b/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm index 74702b4e2bf..ac416d91793 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm @@ -48,7 +48,7 @@ // Opens the interface for the given air alarm. if("alarm") var/obj/structure/machinery/alarm/alarm = locate(params["alarm"]) in (monitored_alarms.len ? monitored_alarms : SSmachinery.processing) - if(alarm) + if(alarm?.rcon_setting) alarm.ui_interact(usr) return TRUE // Manually clear and repopulate the alarm list. @@ -65,6 +65,8 @@ var/alarms = list() for(var/obj/structure/machinery/alarm/alarm in monitored_alarms) + if(!alarm.rcon_setting) + continue alarms += list(list( "deck" = alarm.alarm_area.horizon_deck, "dept" = alarm.alarm_area.department, @@ -77,4 +79,3 @@ data["alarms"] = alarms return data - diff --git a/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm b/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm index 21fc2d4aa53..7f6dc3333a8 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm @@ -23,7 +23,9 @@ ..() lstate = SSnightlight.is_active() ? "dark" : "full" -/datum/computer_file/program/lighting_control/proc/update_lighting() +/datum/computer_file/program/lighting_control/proc/update_lighting(var/new_context = context, var/new_lstate = lstate) + context = new_context + lstate = new_lstate // whether to only select areas explicitly marked for nightlighting var/wl_only = context == "all" ? 0 : 1 @@ -48,7 +50,8 @@ lstate = params["mode"] . = TRUE if ("set") - update_lighting() + update_lighting(params["context"] || context, params["mode"] || lstate) + . = TRUE /datum/computer_file/program/lighting_control/ui_data(mob/user) var/list/data = initial_data() diff --git a/code/modules/modular_computers/file_system/programs/engineering/rcon.dm b/code/modules/modular_computers/file_system/programs/engineering/rcon.dm index 54a3aa6213a..764093378b8 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/rcon.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/rcon.dm @@ -14,7 +14,6 @@ color = LIGHT_COLOR_YELLOW tgui_id = "RCON" tgui_theme = "hephaestus" - ui_auto_update = FALSE /datum/computer_file/program/rcon_console/New() ..() diff --git a/code/modules/modular_computers/file_system/programs/security/camera.dm b/code/modules/modular_computers/file_system/programs/security/camera.dm index 4744ee06a01..ee2a08d1700 100644 --- a/code/modules/modular_computers/file_system/programs/security/camera.dm +++ b/code/modules/modular_computers/file_system/programs/security/camera.dm @@ -162,9 +162,10 @@ return FALSE set_current(C) - user.set_machine(ui_host()) + var/obj/host = ui_host() + if(host) + user.set_machine(host) user.reset_view(current_camera) - check_eye(user) if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -172,6 +173,22 @@ return TRUE +/datum/computer_file/program/camera_monitor/check_eye(mob/user) + if(user.stat || user.blinded) + return -1 + if(!current_camera) + return 0 + + var/viewflag = current_camera.check_eye(user) + if(viewflag < 0) + reset_current() + return viewflag + +/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user) + if(user.stat || user.blinded || !current_camera) + return FALSE + return current_camera.grants_equipment_vision(user) + /datum/computer_file/program/camera_monitor/proc/set_current(var/obj/structure/machinery/camera/C) if(current_camera == C) return @@ -192,44 +209,14 @@ L.tracking_cancelled() current_camera = null -/datum/computer_file/program/camera_monitor/check_eye(var/mob/user as mob) - var/obj/item/modular_computer/MC = user.machine - if(istype(MC) && ui_host() == MC) - if(!MC.working || user.blinded || user.stat) - user.unset_machine() - return -1 - if(!current_camera) - return 0 - var/viewflag = current_camera.check_eye(user) - if ( viewflag < 0 ) //camera doesn't work - reset_current() - return viewflag - -/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user) - var/obj/item/modular_computer/MC = user.machine - if(istype(MC) && ui_host() == MC) - if(!MC.working || user.blinded || user.stat) - return FALSE - if(!current_camera) - return FALSE - var/viewflag = current_camera.check_eye(user) - if (viewflag < 0) //camera doesn't work - return FALSE - return TRUE - // ERT Variant of the program /datum/computer_file/program/camera_monitor/ert filename = "ntcammon" filedesc = "Advanced Camera Monitoring" extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has an integrated database with additional encrypted keys." size = 14 - nanomodule_path = /datum/nano_module/camera_monitor/ert available_on_ntnet = FALSE -/datum/nano_module/camera_monitor/ert - name = "Advanced Camera Monitoring Program" - available_to_ai = FALSE - // The ERT variant has access to ERT and crescent cams, but still checks for accesses. ERT members should be able to use it. /datum/computer_file/program/camera_monitor/ert/modify_networks_list(var/list/networks) ..() @@ -242,13 +229,9 @@ filedesc = "Journalism Camera Monitoring" extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has has a connection to news networks." size = 2 - nanomodule_path = /datum/nano_module/camera_monitor/news required_access_download = null usage_flags = PROGRAM_ALL -/datum/nano_module/camera_monitor/news - name = "Journalism Camera Monitoring Program" - /datum/computer_file/program/camera_monitor/news/modify_networks_list(var/list/networks) networks = list() networks.Add(list(list("tag" = NETWORK_NEWS, "has_access" = 1))) diff --git a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm index c7d137bcd98..2def9c74337 100644 --- a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm +++ b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm @@ -128,7 +128,6 @@ set_current(C) user.machine = ui_host() user.reset_view(current_camera) - check_eye(user) return TRUE /datum/computer_file/program/penal_mechs/proc/set_current(var/obj/structure/machinery/camera/C) @@ -150,11 +149,3 @@ if(istype(L)) L.tracking_cancelled() current_camera = null - -/datum/computer_file/program/penal_mechs/check_eye(var/mob/user) - if(!current_camera) - return FALSE - var/viewflag = current_camera.check_eye(user) - if(viewflag < 0) //camera doesn't work - reset_current() - return viewflag diff --git a/code/modules/modular_computers/file_system/programs/system/file_browser.dm b/code/modules/modular_computers/file_system/programs/system/file_browser.dm index 336156123ec..0d993f0e4a4 100644 --- a/code/modules/modular_computers/file_system/programs/system/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/system/file_browser.dm @@ -12,6 +12,7 @@ undeletable = TRUE tgui_id = "FileManager" var/open_file + var/open_file_is_usb = FALSE var/error /datum/computer_file/program/filemanager/ui_data(mob/user) @@ -27,7 +28,11 @@ if(!computer || !computer.hard_drive) data["error"] = "I/O ERROR: Unable to access hard drive." else - HDD = computer.hard_drive + HDD = open_file_is_usb ? computer.portable_drive : computer.hard_drive + data["file_is_usb"] = open_file_is_usb + if(!HDD) + data["error"] = "I/O ERROR: Unable to open file." + return data file = HDD.find_file_by_name(open_file) script = file if(!istype(file)) @@ -45,6 +50,7 @@ else data["scriptdata"] = null data["filedata"] = null + data["file_is_usb"] = FALSE data["filename"] = null HDD = computer.hard_drive RHDD = computer.portable_drive @@ -85,10 +91,23 @@ return if(F.can_access_file(usr)) open_file = params["PRG_openfile"] + open_file_is_usb = FALSE + + if("PRG_usbopenfile") + . = TRUE + var/obj/item/computer_hardware/hard_drive/RHDD = computer.portable_drive + if(!RHDD) + return + var/datum/computer_file/F = RHDD.find_file_by_name(params["PRG_usbopenfile"]) + if(!F) + return + if(F.can_access_file(usr)) + open_file = params["PRG_usbopenfile"] + open_file_is_usb = TRUE if("PRG_newtextfile") . = TRUE - var/newname = sanitize(input(usr, "Enter file name or leave blank to cancel:", "File rename")) + var/newname = sanitize_filename(tgui_input_text(usr, "Enter file name or leave blank to cancel:", "File rename")) if(!newname) return TRUE var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive @@ -97,7 +116,9 @@ var/datum/computer_file/data/F = new/datum/computer_file/data() F.filename = newname F.filetype = "TXT" - HDD.store_file(F) + if(!HDD.store_file(F)) + qdel(F) + error = "I/O ERROR: Unable to create file. The hard drive may be full, read-only, or contain a conflicting file." if("PRG_deletefile") . = TRUE @@ -122,6 +143,7 @@ if("PRG_closefile") . = TRUE open_file = null + open_file_is_usb = FALSE error = null if("PRG_clone") @@ -132,8 +154,13 @@ var/datum/computer_file/F = HDD.find_file_by_name(params["PRG_clone"]) if(!F || !istype(F)) return TRUE + if(istype(F, /datum/computer_file/program)) + error = "I/O ERROR: Executable programs cannot be cloned from File Manager." + return TRUE var/datum/computer_file/C = F.clone(1) - HDD.store_file(C) + if(!HDD.store_file(C)) + qdel(C) + error = "I/O ERROR: Unable to clone file. The hard drive may be full, read-only, or contain a conflicting file." if("PRG_rename") . = TRUE @@ -143,7 +170,7 @@ var/datum/computer_file/file = HDD.find_file_by_name(params["PRG_rename"]) if(!file || !istype(file)) return TRUE - var/newname = sanitize(input(usr, "Enter new file name:", "File rename", file.filename)) + var/newname = sanitize_filename(tgui_input_text(usr, "Enter new file name or leave blank to cancel:", "File rename", file.filename)) if(file && newname) file.filename = newname @@ -163,7 +190,7 @@ var/oldtext = html_decode(F.stored_data) oldtext = replacetext(oldtext, "\[editorbr\]", "\n") - var/newtext = sanitize(replacetext(input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext) as message|null, "\n", "\[editorbr\]"), MAX_TEXTFILE_LENGTH) + var/newtext = sanitize_filename(replacetext(tgui_input_text(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext), "\n", "\[editorbr\]"), MAX_TEXTFILE_LENGTH) if(!newtext) return @@ -185,10 +212,10 @@ return TRUE var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive if(!HDD) - return TRUE + return FALSE if(!computer.nano_printer) error = "Missing Hardware: Your computer does not have required hardware to complete this operation." - return TRUE + return FALSE var/datum/computer_file/data/F = HDD.find_file_by_name(open_file) var/datum/computer_file/script/S = F if(!F) @@ -196,21 +223,21 @@ if(istype(F)) if(!computer.nano_printer.print_text(F.stored_data)) error = "Hardware error: Printer was unable to print the file. It may be out of paper." - return TRUE + return FALSE else if(istype(S)) if(!computer.nano_printer.print_text(S.code)) error = "Hardware error: Printer was unable to print the file. It may be out of paper." - return TRUE + return FALSE if("PRG_copytousb") . = TRUE var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive var/obj/item/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive if(!HDD || !RHDD) - return TRUE + return FALSE var/datum/computer_file/F = HDD.find_file_by_name(params["PRG_copytousb"]) if(!F || !istype(F)) - return TRUE + return FALSE var/is_usr_tech_support = FALSE if(ishuman(usr)) var/mob/living/carbon/human/H = usr @@ -270,7 +297,7 @@ return if(F.password) return - F.password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File")) + F.password = sanitize_filename(tgui_input_text(usr, "Enter an encryption key:", "Encrypt File")) if("PRG_decrypt") . = TRUE diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm deleted file mode 100644 index 9cf703ec89c..00000000000 --- a/code/modules/nano/modules/nano_module.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/nano_module - var/name - var/datum/host - var/available_to_ai = TRUE - var/datum/topic_manager/topic_manager - -/datum/nano_module/New(var/datum/host, var/topic_manager) - ..() - src.host = host - src.topic_manager = topic_manager - -/datum/nano_module/Destroy() - host = null - topic_manager = null - return ..() - -/datum/nano_module/ui_host() - return host ? host.ui_host() : src - -/datum/nano_module/proc/can_still_topic(var/datum/ui_state/state = GLOB.default_state) - return CanUseTopic(usr, state) == STATUS_INTERACTIVE - -/datum/nano_module/proc/check_eye(var/mob/user) - return -1 - -/datum/nano_module/proc/grants_equipment_vision(var/mob/user) - return FALSE - -/datum/nano_module/proc/check_access(var/mob/user, var/access) - if(!access) - return 1 - - if(!istype(user)) - return 0 - - var/obj/item/card/id/I = user.GetIdCard() - if(!I) - return 0 - - if(access in I.access) - return 1 - - return 0 - -/datum/nano_module/Topic(href, href_list) - if(topic_manager && topic_manager.Topic(href, href_list)) - return TRUE - . = ..() - -/datum/nano_module/nano_host() - return host ? host : src - -/datum/nano_module/proc/get_host_z() - return GET_Z(nano_host()) - -/datum/proc/initial_data() - return list() - -/datum/proc/update_layout() - return FALSE - -/datum/proc/nano_host() - return src diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm deleted file mode 100644 index c87b6a44b3c..00000000000 --- a/code/modules/nano/nanoexternal.dm +++ /dev/null @@ -1,37 +0,0 @@ -// This file contains all Nano procs/definitions for external classes/objects - -/** - * Called when a Nano UI window is closed - * This is how Nano handles closed windows - * It must be a verb so that it can be called using winset - */ -/client/verb/nanoclose(var/uiref as text) - set hidden = 1 // hide this verb from the user's panel - set name = "nanoclose" - - var/datum/nanoui/ui = locate(uiref) - - if (istype(ui)) - ui.close() - - if(ui.ref) - var/href = "close=1" - src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's Topic() proc via client.Topic() - else if (ui.on_close_logic) - // no atomref specified (or not found) - // so just reset the user mob's machine var - if(src && src.mob) - src.mob.unset_machine() - -/** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable - * - * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") - * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui - * @param force_open boolean Force the UI to (re)open, even if it's already open - */ -/datum/proc/nanoui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state) - return diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm deleted file mode 100644 index 90088c1d624..00000000000 --- a/code/modules/nano/nanomapgen.dm +++ /dev/null @@ -1,90 +0,0 @@ -// This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm - -#define NANOMAP_ICON_SIZE 4 -#define NANOMAP_MAX_ICON_DIMENSION 1024 - -#define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE) - -#define NANOMAP_TERMINALERR 5 -#define NANOMAP_INPROGRESS 2 -#define NANOMAP_BADOUTPUT 2 -#define NANOMAP_SUCCESS 1 -#define NANOMAP_WATCHDOGSUCCESS 4 -#define NANOMAP_WATCHDOGTERMINATE 3 - - -//Call these procs to dump your world to a series of image files (!!) -//NOTE: Does not explicitly support non 32x32 icons or stuff with large pixel_* values, so don't blame me if it doesn't work perfectly - -/client/proc/nanomapgen_DumpImage() - set name = "Generate NanoUI Map" - set category = "Server" - - if(holder) - nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) - -/client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) - - if (endX < 0 || endX > world.maxx) - endX = world.maxx - - if (endY < 0 || endY > world.maxy) - endY = world.maxy - - if (currentZ < 0 || currentZ > world.maxz) - to_chat(usr, "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]") - - sleep(3) - return NANOMAP_TERMINALERR - - if (startX > endX) - to_chat(usr, "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])") - - sleep(3) - return NANOMAP_TERMINALERR - - if (startY > endX) - to_chat(usr, "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])") - sleep(3) - return NANOMAP_TERMINALERR - - var/icon/Tile = icon(file("nano/mapbase1024.png")) - if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) - log_world("ERROR: NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]") - sleep(3) - return NANOMAP_TERMINALERR - - LOG_DEBUG("NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") - to_chat(usr, "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") - - var/count = 0; - for(var/WorldX = startX, WorldX <= endX, WorldX++) - for(var/WorldY = startY, WorldY <= endY, WorldY++) - - var/atom/Turf = locate(WorldX, WorldY, currentZ) - - var/icon/TurfIcon = new(Turf.icon, Turf.icon_state, dir = Turf.dir) - TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) - - Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) - - count++ - - if (count % 8000 == 0) - LOG_DEBUG("NanoMapGen: [count] tiles done") - sleep(1) - - var/mapFilename = "new_Aurora[currentZ]" - - LOG_DEBUG("NanoMapGen: sending [mapFilename] to client") - - usr << browse(Tile, "window=picture;file=[mapFilename];display=0") - - LOG_DEBUG("NanoMapGen: Done.") - - to_chat(usr, "NanoMapGen: Done. File [mapFilename] uploaded to your cache.") - - if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) - return NANOMAP_BADOUTPUT - - return NANOMAP_SUCCESS diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm deleted file mode 100644 index c441af104f2..00000000000 --- a/code/modules/nano/nanoui.dm +++ /dev/null @@ -1,537 +0,0 @@ -/********************************************************** -NANO UI FRAMEWORK - -nanoui class (or whatever Byond calls classes) - -nanoui is used to open and update nano browser uis -**********************************************************/ - -/datum/nanoui - // the user who opened this ui - var/mob/user - // the object this ui "belongs" to - var/datum/src_object - // the title of this ui - var/title - // the key of this ui, this is to allow multiple (different) uis for each src_object - var/ui_key - // window_id is used as the window name/identifier for browse and onclose - var/window_id - // the browser window width - var/width = 0 - // the browser window height - var/height = 0 - // whether to use extra logic when window closes - var/on_close_logic = 1 - // an extra ref to use when the window is closed, usually null - var/atom/ref = null - // options for modifying window behaviour - var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id - // the list of stylesheets to apply to this ui - var/list/stylesheets = list() - // the list of javascript scripts to use for this ui - var/list/scripts = list() - // a list of templates which can be used with this ui - var/templates[0] - // the layout key for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing) - var/layout_key = "default" - // this sets whether to re-render the ui layout with each update (default 0, turning on will break the map ui if it's in use) - var/auto_update_layout = 0 - // this sets whether to re-render the ui content with each update (default 1) - var/auto_update_content = 1 - // the default state to use for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing) - var/state_key = "default" - // show the map ui, this is used by the default layout - var/show_map = 0 - // the map z level to display - var/map_z_level = 3 - // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) - var/list/initial_data[0] - // set to 1 to update the ui automatically every master_controller tick - var/is_auto_updating = 0 - // the current status/visibility of the ui - var/status = STATUS_INTERACTIVE - - // Relationship between a master interface and its children. Used in update_status - var/datum/nanoui/master_ui - var/list/datum/nanoui/children = list() - var/datum/ui_state/state = null - -/** - * Create a new nanoui instance. - * - * @param nuser /mob The mob who has opened/owns this ui - * @param nsrc_object /obj|/mob The obj or mob which this ui belongs to - * @param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject - * @param ntemplate string The filename of the template file from /nano/templates (e.g. "my_template.tmpl") - * @param ntitle string The title of this ui - * @param nwidth int the width of the ui window - * @param nheight int the height of the ui window - * @param nref /atom A custom ref to use if "on_close_logic" is set to 1 - * - * @return /nanoui new nanoui object - */ -/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state) - user = nuser - src_object = nsrc_object - ui_key = nui_key - window_id = "[ui_key][REF(src_object)]" - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - // add the passed template filename as the "main" template, this is required - add_template("main", ntemplate_filename) - - if (ntitle) - title = sanitize(ntitle) - if (nwidth) - width = nwidth - if (nheight) - height = nheight - if (nref) - ref = nref - - add_common_assets() - - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) - assets.send(user, assets) - - - -/** - * Use this proc to add assets which are common to (and required by) all nano uis - * - * @return nothing - */ -/datum/nanoui/proc/add_common_assets() - add_script("https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js") - add_script("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js") - add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together) - add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions. - add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates. - add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state - add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from - add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState - add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs - add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs - add_stylesheet("shared.css") // this CSS sheet is common to all UIs - add_stylesheet("icons.css") // this CSS sheet is common to all UIs - -/** - * Set the current status (also known as visibility) of this ui. - * - * @param state int The status to set, see the defines at the top of this file - * @param push_update int (bool) Push an update to the ui to update it's status (an update is always sent if the status has changed to red (0)) - * - * @return nothing - */ -/datum/nanoui/proc/set_status(state, push_update) - if (state != status) // Only update if it is different - if (status == STATUS_DISABLED) - status = state - if (push_update) - update() - else - status = state - if (push_update || status == 0) - push_data(null, 1) // Update the UI, force the update in case the status is 0, data is null so that previous data is used - -/** - * Update the status (visibility) of this ui based on the user's status - * - * @param push_update int (bool) Push an update to the ui to update it's status. This is set to 0/false if an update is going to be pushed anyway (to avoid unnessary updates) - * - * @return nothing - */ -/datum/nanoui/proc/update_status(var/push_update = 0) - var/obj/host = src_object.ui_host() - var/new_status = host.CanUseTopic(user, state) - if(master_ui) - new_status = min(new_status, master_ui.status) - - set_status(new_status, push_update) - if(new_status == STATUS_CLOSE) - close() - -/** - * Set the ui to auto update (every master_controller tick) - * - * @param state int (bool) Set auto update to 1 or 0 (true/false) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update(nstate = 1) - is_auto_updating = nstate - -/** - * Set the initial data for the ui. This is vital as the data structure set here cannot be changed when pushing new updates. - * - * @param data /list The list of data for this ui - * - * @return nothing - */ -/datum/nanoui/proc/set_initial_data(list/data) - initial_data = data - -/** - * Get config data to sent to the ui. - * - * @return /list config data - */ -/datum/nanoui/proc/get_config_data() - var/name = "[src_object]" - name = sanitize(name) - var/list/config_data = list( - "title" = title, - "srcObject" = list("name" = name), - "stateKey" = state_key, - "status" = status, - "autoUpdateLayout" = auto_update_layout, - "autoUpdateContent" = auto_update_content, - "showMap" = show_map, - "mapName" = "Aurora", - "mapZLevel" = map_z_level, - "mapZLevels" = SSatlas.current_map.map_levels, - "user" = list("name" = user.name) - ) - return config_data - -/** - * Get data to sent to the ui. - * - * @param data /list The list of general data for this ui (can be null to use previous data sent) - * - * @return /list data to send to the ui - */ -/datum/nanoui/proc/get_send_data(var/list/data) - var/list/config_data = get_config_data() - - var/list/send_data = list("config" = config_data) - - if (!isnull(data)) - send_data["data"] = data - - return send_data - -/** - * Set the browser window options for this ui - * - * @param nwindow_options string The new window options - * - * @return nothing - */ -/datum/nanoui/proc/set_window_options(nwindow_options) - window_options = nwindow_options - -/** - * Add a CSS stylesheet to this UI - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param file string The name of the CSS file from /nano/css (e.g. "my_style.css") - * - * @return nothing - */ -/datum/nanoui/proc/add_stylesheet(file) - stylesheets.Add(file) - -/** - * Add a JavsScript script to this UI - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js") - * - * @return nothing - */ -/datum/nanoui/proc/add_script(file) - scripts.Add(file) - -/** - * Add a template for this UI - * Templates are combined with the data sent to the UI to create the rendered view - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param key string The key which is used to reference this template in the frontend - * @param filename string The name of the template file from /nano/templates (e.g. "my_template.tmpl") - * - * @return nothing - */ -/datum/nanoui/proc/add_template(key, filename) - templates[key] = filename - -/** - * Set the layout key for use in the frontend Javascript - * The layout key is the basic layout key for the page - * Two files are loaded on the client based on the layout key varable: - * -> a template in /nano/templates with the filename "layout_.tmpl - * -> a CSS stylesheet in /nano/css with the filename "layout_.css - * - * @param nlayout string The layout key to use - * - * @return nothing - */ -/datum/nanoui/proc/set_layout_key(nlayout_key) - layout_key = lowertext(nlayout_key) - -/** - * Set the ui to update the layout (re-render it) on each update, turning this on will break the map ui (if it's being used) - * - * @param state int (bool) Set update to 1 or 0 (true/false) (default 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update_layout(nstate) - auto_update_layout = nstate - -/** - * Set the ui to update the main content (re-render it) on each update - * - * @param state int (bool) Set update to 1 or 0 (true/false) (default 1) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update_content(nstate) - auto_update_content = nstate - -/** - * Set the state key for use in the frontend Javascript - * - * @param nstate_key string The key of the state to use - * - * @return nothing - */ -/datum/nanoui/proc/set_state_key(nstate_key) - state_key = nstate_key - -/** - * Toggle showing the map ui - * - * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_show_map(nstate) - show_map = nstate - -/** - * Toggle showing the map ui - * - * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_map_z_level(nz) - map_z_level = nz - -/** - * Set whether or not to use the "old" on close logic (mainly unset_machine()) - * - * @param state int (bool) Set on_close_logic to 1 or 0 (true/false) - * - * @return nothing - */ -/datum/nanoui/proc/use_on_close_logic(state) - on_close_logic = state - -/** - * Return the HTML for this UI - * - * @return string HTML for the UI - */ -/datum/nanoui/proc/get_html() - - // before the UI opens, add the layout files based on the layout key - add_stylesheet("layout_[layout_key].css") - add_template("layout", "layout_[layout_key].tmpl") - - var/head_content = "" - - for (var/filename in scripts) - head_content += " " - - for (var/filename in stylesheets) - head_content += " " - - var/template_data_json = "{}" // An empty JSON object - if (templates.len > 0) - template_data_json = strip_improper(json_encode(templates)) - - var/list/send_data = get_send_data(initial_data) - var/initial_data_json = replacetext(replacetext(json_encode(send_data), """, "&#34;"), "'", "'") - initial_data_json = strip_improper(initial_data_json); - - var/url_parameters_json = json_encode(list("src" = "[REF(src)]")) - - return {" - - - - - - [head_content] - - -
-
- - - - "} - -/** - * Open this UI - * - * @return nothing - */ -/datum/nanoui/proc/open() - if(!user.client) - return - - // An attempted fix to UIs sometimes locking up spamming runtime errors due to src_object being null for whatever reason. - // This hard-deletes the UI, preventing the device that uses the UI from being locked up permanently. - if(!src_object) - del(src) - - var/window_size = "" - if (width && height) - window_size = "size=[width]x[height];" - update_status(0) - if(status == STATUS_CLOSE) - return - - user << browse(get_html(), "window=[window_id];[window_size][window_options]") - winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map - on_close_winset() - //onclose(user, window_id) - SSnanoui.ui_opened(src) - -/** - * Reinitialise this UI, potentially with a different template and/or initial data - * - * @return nothing - */ -/datum/nanoui/proc/reinitialise(template, new_initial_data) - if(template) - add_template("main", template) - if(new_initial_data) - set_initial_data(new_initial_data) - open() - -/** - * Close this UI - * - * @return nothing - */ -/datum/nanoui/proc/close() - is_auto_updating = 0 - SSnanoui.ui_closed(src) - user << browse(null, "window=[window_id]") - for(var/datum/nanoui/child in children) - child.close() - children.Cut() - state = null - master_ui = null - - if(istype(user)) - user.unset_machine() - -/** - * Set the UI window to call the nanoclose verb when the window is closed - * This allows Nano to handle closed windows - * - * @return nothing - */ -/datum/nanoui/proc/on_close_winset() - if(!user.client) - return - var/params = "[REF(src)]" - - winset(user, window_id, "on-close=\"nanoclose [params]\"") - -/** - * Push data to an already open UI window - * - * @return nothing - */ -/datum/nanoui/proc/push_data(data, force_push = 0) - update_status(0) - if (status == STATUS_DISABLED && !force_push) - return // Cannot update UI, no visibility - - var/list/send_data = get_send_data(data) - - //to_chat(user, list2json(data) // used for debugging) - send_output(user, list2params(list(json_encode(send_data))),"[window_id].browser:receiveUpdateData") - -/** - * This Topic() proc is called whenever a user clicks on a link within a Nano UI - * If the UI status is currently STATUS_INTERACTIVE then call the src_object Topic() - * If the src_object Topic() returns 1 (true) then update all UIs attached to src_object - * - * @return nothing - */ -/datum/nanoui/Topic(href, href_list) - update_status(0) // update the status - if (status != STATUS_INTERACTIVE || user != usr) // If UI is not interactive or usr calling Topic is not the UI user - return - - // This is used to toggle the nano map ui - var/map_update = 0 - if(href_list["showMap"]) - set_show_map(text2num(href_list["showMap"])) - map_update = 1 - - if(href_list["mapZLevel"]) - var/map_z = (text2num(href_list["mapZLevel"])) - if(map_z in SSatlas.current_map.map_levels) - set_map_z_level(map_z) - map_update = 1 - else - return - - if ((src_object && src_object.Topic(href, href_list, state)) || map_update) - SSnanoui.update_uis(src_object) // update all UIs attached to src_object - -/** - * Process this UI, updating the entire UI or just the status (aka visibility) - * This process proc is called by the master_controller - * - * @param update string For this UI to update - * - * @return nothing - */ -/datum/nanoui/process(update = 0) - if (QDELETED(src_object) || QDELETED(user)) - close() - return - - if (status && (update || is_auto_updating)) - update() // Update the UI (update_status() is called whenever a UI is updated) - else - update_status(1) // Not updating UI, so lets check here if status has changed - -/** - * Update the UI - * - * @return nothing - */ -/datum/nanoui/proc/update(var/force_open = 0) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) diff --git a/code/modules/organs/subtypes/vaurca.dm b/code/modules/organs/subtypes/vaurca.dm index ff4c59b0eae..f4b418495f3 100644 --- a/code/modules/organs/subtypes/vaurca.dm +++ b/code/modules/organs/subtypes/vaurca.dm @@ -399,17 +399,34 @@ ui_interact(user) -/obj/item/organ/internal/vaurca/preserve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/organ/internal/vaurca/preserve/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Tank", ui_x=400, ui_y=180) + ui.open() + +/obj/item/organ/internal/vaurca/preserve/ui_host(mob/user) + . = ..() + if(istype(loc,/obj/item/transfer_valve)) + return loc + +/obj/item/organ/internal/vaurca/preserve/ui_data(mob/user) var/mob/living/carbon/location = null + if(istype(loc, /obj/item/rig)) + if(istype(loc.loc, /mob/living/carbon)) + location = loc.loc + else if(istype(loc, /mob/living/carbon)) + location = loc + var/using_internal if(istype(location)) if(location.internal==src) using_internal = 1 - // this is the data which will be sent to the ui - var/data[0] - data["tankPressure"] = round(SAFE_XGM_PRESSURE(air_contents)) + var/list/data = list() + + data["tankPressure"] = round(XGM_PRESSURE(air_contents)) data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) @@ -437,36 +454,13 @@ if(H.head && (H.head.item_flags & ITEM_FLAG_AIRTIGHT)) data["maskConnected"] = 1 - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data -/obj/item/organ/internal/vaurca/preserve/Topic(href, href_list) - ..() - if (usr.stat|| usr.restrained()) - return 0 - if (src.loc != usr) - return 0 - - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - else if (href_list["dist_p"] == "max") - src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - var/cp = text2num(href_list["dist_p"]) - src.distribute_pressure += cp - src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - if (href_list["stat"]) +/obj/item/organ/internal/vaurca/preserve/ui_act(action,params) + . = ..() + if(.) + return + if(action=="toggleReleaseValve") if(istype(loc,/mob/living/carbon)) var/mob/living/carbon/location = loc if(location.internal == src) @@ -476,7 +470,6 @@ if (location.internals) location.internals.icon_state = "internal0" else - var/can_open_valve if(location.wear_mask && (location.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) can_open_valve = 1 @@ -491,11 +484,12 @@ if (location.internals) location.internals.icon_state = "internal1" else - to_chat(usr, SPAN_NOTICE("You need something to connect to \the [src].")) - - src.add_fingerprint(usr) - return 1 - + to_chat(usr, SPAN_WARNING("You need something to connect to \the [src].")) + . = TRUE + update_icon() + if(action=="setReleasePressure") + distribute_pressure = min(max(round(text2num(params["release_pressure"])), 0), TANK_MAX_RELEASE_PRESSURE) + . = TRUE /obj/item/organ/internal/vaurca/preserve/remove_air(amount) return air_contents.remove(amount) diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm index 209ffb05373..5a7a41f5999 100644 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ b/code/modules/overmap/ships/computers/engine_control.dm @@ -30,7 +30,7 @@ /obj/structure/machinery/computer/ship/engines/ui_interact(mob/user, datum/tgui/ui) if(!connected) - display_reconnect_dialog(user, "ship control systems") + balloon_alert(user, "no connection!") return ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index cd9fc3fbff8..3d75449f8ff 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -117,6 +117,10 @@ return 1 /obj/structure/machinery/computer/ship/helm/ui_interact(mob/user, datum/tgui/ui) + if(!connected) + balloon_alert(user, "no connection!") + return + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "Helm", capitalize_first_letters(name)) @@ -126,55 +130,52 @@ /obj/structure/machinery/computer/ship/helm/ui_data(mob/user) var/list/data = list() - if(!connected) - display_reconnect_dialog(user, "helm") - else - var/turf/T = get_turf(connected) - var/obj/effect/overmap/visitable/sector/current_sector = locate() in T + var/turf/T = get_turf(connected) + var/obj/effect/overmap/visitable/sector/current_sector = locate() in T - data["sector"] = current_sector ? current_sector.name : "Deep Space" - data["sector_info"] = current_sector ? current_sector.desc : "Not Available" - data["landed"] = connected.get_landed_info() - data["ship_coord_x"] = connected.x - data["ship_coord_y"] = connected.y - data["dest"] = dy && dx - data["autopilot_x"] = dx - data["autopilot_y"] = dy - data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted" - data["accel"] = get_acceleration() - data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 - data["direction"] = dir2angle(connected.dir) - data["autopilot"] = autopilot - data["manual_control"] = viewing_overmap(user) - data["canburn"] = connected.can_burn() - data["canturn"] = connected.can_turn() - data["cancombatroll"] = connected.can_combat_roll() - data["cancombatturn"] = connected.can_combat_turn() - data["accellimit"] = accellimit*1000 + data["sector"] = current_sector ? current_sector.name : "Deep Space" + data["sector_info"] = current_sector ? current_sector.desc : "Not Available" + data["landed"] = connected.get_landed_info() + data["ship_coord_x"] = connected.x + data["ship_coord_y"] = connected.y + data["dest"] = dy && dx + data["autopilot_x"] = dx + data["autopilot_y"] = dy + data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted" + data["accel"] = get_acceleration() + data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 + data["direction"] = dir2angle(connected.dir) + data["autopilot"] = autopilot + data["manual_control"] = viewing_overmap(user) + data["canburn"] = connected.can_burn() + data["canturn"] = connected.can_turn() + data["cancombatroll"] = connected.can_combat_roll() + data["cancombatturn"] = connected.can_combat_turn() + data["accellimit"] = accellimit*1000 - var/speed = round(connected.get_speed()*1000, 0.01) - data["speed"] = speed - if(connected.get_speed() < SHIP_SPEED_SLOW) - data["speed_slow"] = TRUE - if(connected.get_speed() > SHIP_SPEED_FAST) - data["speed_fast"] = TRUE - var/list/speed_xy = connected.get_speed_xy() - data["ship_speed_x"] = speed_xy[1] - data["ship_speed_y"] = speed_xy[2] + var/speed = round(connected.get_speed()*1000, 0.01) + data["speed"] = speed + if(connected.get_speed() < SHIP_SPEED_SLOW) + data["speed_slow"] = TRUE + if(connected.get_speed() > SHIP_SPEED_FAST) + data["speed_fast"] = TRUE + var/list/speed_xy = connected.get_speed_xy() + data["ship_speed_x"] = speed_xy[1] + data["ship_speed_y"] = speed_xy[2] - data["ETAnext"] = get_eta() + data["ETAnext"] = get_eta() - var/list/locations[0] - for (var/key in known_sectors) - var/datum/computer_file/data/waypoint/R = known_sectors[key] - var/list/rdata[0] - rdata["name"] = R.fields["name"] - rdata["x"] = R.fields["x"] - rdata["y"] = R.fields["y"] - rdata["reference"] = "[REF(R)]" - locations.Add(list(rdata)) + var/list/locations[0] + for (var/key in known_sectors) + var/datum/computer_file/data/waypoint/R = known_sectors[key] + var/list/rdata[0] + rdata["name"] = R.fields["name"] + rdata["x"] = R.fields["x"] + rdata["y"] = R.fields["y"] + rdata["reference"] = "[REF(R)]" + locations.Add(list(rdata)) - data["locations"] = locations + data["locations"] = locations return data @@ -367,6 +368,10 @@ ui_interact(user) /obj/structure/machinery/computer/ship/navigation/ui_interact(mob/user, datum/tgui/ui) + if(!connected) + balloon_alert(user, "no connection!") + return + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "Nav", capitalize_first_letters(name), ui_x=470, ui_y=320) @@ -376,25 +381,22 @@ /obj/structure/machinery/computer/ship/navigation/ui_data(mob/user) var/list/data = list() - if(!connected) - display_reconnect_dialog(user, "navigation") - else - var/turf/T = get_turf(connected) - var/obj/effect/overmap/visitable/sector/current_sector = locate() in T + var/turf/T = get_turf(connected) + var/obj/effect/overmap/visitable/sector/current_sector = locate() in T - data["sector"] = current_sector ? current_sector.name : "Deep Space" - data["sector_info"] = current_sector ? current_sector.desc : "Not Available" - data["ship_coord_x"] = connected.x - data["ship_coord_y"] = connected.y - data["speed"] = round(connected.get_speed()*1000, 0.01) - data["accel"] = round(connected.get_acceleration()*1000, 0.01) - var/list/speed_xy = connected.get_speed_xy() - data["ship_speed_x"] = speed_xy[1] - data["ship_speed_y"] = speed_xy[2] - data["direction"] = dir2angle(connected.dir) - data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 - data["ETAnext"] = get_eta() - data["viewing"] = viewing_overmap(user) + data["sector"] = current_sector ? current_sector.name : "Deep Space" + data["sector_info"] = current_sector ? current_sector.desc : "Not Available" + data["ship_coord_x"] = connected.x + data["ship_coord_y"] = connected.y + data["speed"] = round(connected.get_speed()*1000, 0.01) + data["accel"] = round(connected.get_acceleration()*1000, 0.01) + var/list/speed_xy = connected.get_speed_xy() + data["ship_speed_x"] = speed_xy[1] + data["ship_speed_y"] = speed_xy[2] + data["direction"] = dir2angle(connected.dir) + data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 + data["ETAnext"] = get_eta() + data["viewing"] = viewing_overmap(user) return data diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm index 1962a5b64c3..687797f4e1e 100644 --- a/code/modules/overmap/ships/computers/ship.dm +++ b/code/modules/overmap/ships/computers/ship.dm @@ -22,11 +22,6 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov . += "Consoles like these are typically access-locked." . += "You can remove this lock with wirecutters, but it would take awhile! Alternatively, you can also use a cryptographic sequencer (emag) for instant removal." -/obj/structure/machinery/computer/ship/proc/display_reconnect_dialog(var/mob/user, var/flavor) - var/datum/browser/popup = new (user, "[src]", "[src]") - popup.set_content("
Error
Unable to connect to [flavor].
Reconnect
") - popup.open() - /obj/structure/machinery/computer/ship/attackby(obj/item/attacking_item, mob/user) if(attacking_item.tool_behaviour == TOOL_CABLECOIL) // Repair from hotwire var/obj/item/stack/cable_coil/C = attacking_item diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index 9184fea260e..8b2f5ee41c3 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -5,7 +5,6 @@ // Powernet sensors are devices which relay information about connected powernet. This information may be relayed // via two procs. Proc return_reading_text will return fully HTML styled string which contains all information. This // may be used in PDAs or similar applications. Second proc, return_reading_data will return list containing needed data. -// This is used in NanoUI, for example. /obj/structure/machinery/power/sensor name = "Powernet Sensor" diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm index fbc5cde3290..39aaeeb4556 100644 --- a/code/modules/research/xenoarchaeology/misc.dm +++ b/code/modules/research/xenoarchaeology/misc.dm @@ -70,4 +70,3 @@ /obj/structure/machinery/alarm/monitor/isolation req_one_access = list(ACCESS_RESEARCH, ACCESS_ATMOSPHERICS, ACCESS_ENGINE_EQUIP) locked = 0 - remote_control = 1 diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md new file mode 100644 index 00000000000..d2a99e5ffd2 --- /dev/null +++ b/code/modules/tgchat/README.md @@ -0,0 +1,31 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: + +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + } +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server receives said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm index 09c9b536c06..965d9545ff1 100644 --- a/code/modules/tgchat/to_chat.dm +++ b/code/modules/tgchat/to_chat.dm @@ -35,23 +35,8 @@ if(text) message["text"] = text if(html) message["html"] = html if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message) - var/message_html = message_to_html(message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - to_target(client, message_html) - return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - to_target(client, message_html) + // send it immediately + SSchat.send_immediate(target, message) /** * Sends the message to the recipient (target). @@ -74,7 +59,7 @@ trailing_newline = TRUE, confidential = FALSE ) - if(isnull(Master) || !SSchat?.initialized) + if(isnull(Master) || !SSchat?.initialized || !MC_RUNNING(SSchat.init_stage)) to_chat_immediate(target, html, type, text, avoid_highlighting) return diff --git a/code/modules/tgs/LICENSE b/code/modules/tgs/LICENSE index 2bedf9a63aa..324c48e993e 100644 --- a/code/modules/tgs/LICENSE +++ b/code/modules/tgs/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2017-2023 Jordan Brown +Copyright (c) 2017-2024 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 6319028d810..473442fd119 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -1,13 +1,13 @@ # DMAPI Internals -This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. +This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. - [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. - The [core](./core) folder includes all code not directly part of any API version. - The other versioned folders contain code for the different DMAPI versions. - - [v3210](./v3210) contains the final TGS3 API. - - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). - - [v5](./v5) is the current DMAPI version used by TGS >=4.1. + - [v3210](./v3210) contains the final TGS3 API. + - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). + - [v5](./v5) is the current DMAPI version used by TGS >=4.1. - [LICENSE](./LICENSE) is the MIT license for the DMAPI. APIs communicate with TGS in two ways. All versions implement TGS -> DM communication using /world/Topic. DM -> TGS communication, called the bridge method, is different for each version. diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index b82d8f49e29..7886a857149 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -2,8 +2,8 @@ This folder contains all DMAPI code not directly involved in an API. -- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [\_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. - [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition -- diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm new file mode 100644 index 00000000000..6ef8d841b8f --- /dev/null +++ b/code/modules/tgs/core/byond_world_export.dm @@ -0,0 +1,22 @@ +/datum/tgs_http_handler/byond_world_export + +/datum/tgs_http_handler/byond_world_export/PerformGet(url) + // This is an infinite sleep until we get a response + var/export_response = world.Export(url) + TGS_DEBUG_LOG("byond_world_export: Export complete") + + if(!export_response) + TGS_ERROR_LOG("byond_world_export: Failed request: [url]") + return new /datum/tgs_http_result(null, FALSE) + + var/content = export_response["CONTENT"] + if(!content) + TGS_ERROR_LOG("byond_world_export: Failed request, missing content!") + return new /datum/tgs_http_result(null, FALSE) + + var/response_json = TGS_FILE2TEXT_NATIVE(content) + if(!response_json) + TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!") + return new /datum/tgs_http_result(null, FALSE) + + return new /datum/tgs_http_result(response_json, TRUE) diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index d6219fcd308..98f26090cad 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -1,7 +1,7 @@ -/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null) var/current_api = TGS_READ_GLOBAL(tgs) if(current_api) - TGS_ERROR_LOG("API datum already set ([REF(current_api)] ([current_api]))! Was TgsNew() called more than once?") + TGS_ERROR_LOG("API datum already set ([current_api])! Was TgsNew() called more than once?") return if(!(minimum_required_security_level in list(TGS_SECURITY_ULTRASAFE, TGS_SECURITY_SAFE, TGS_SECURITY_TRUSTED))) @@ -42,11 +42,11 @@ var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) - TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") api_datum = /datum/tgs_api/latest if(!api_datum) - TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") return TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") @@ -55,7 +55,10 @@ TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") event_handler = null - var/datum/tgs_api/new_api = new api_datum(event_handler, version) + if(!http_handler) + http_handler = new /datum/tgs_http_handler/byond_world_export + + var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler) TGS_WRITE_GLOBAL(tgs, new_api) @@ -107,6 +110,13 @@ if(api) return api.ApiVersion() +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + /world/TgsInstanceName() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) @@ -159,3 +169,11 @@ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) return api.Visibility() + +/world/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + if(!istype(parameters, /list)) + parameters = list() + + return api.TriggerEvent(event_name, parameters, wait_for_completion) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 07ce3b68458..3ca53e9bf7c 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -6,8 +6,8 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/list/warned_deprecated_command_runs -/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) - . = ..() +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) + ..() src.event_handler = event_handler src.version = version @@ -17,7 +17,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 del(world) world.sleep_offline = FALSE // just in case, this is BYOND after all... - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") /datum/tgs_api/latest @@ -69,3 +69,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/Visibility() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TriggerEvent(event_name, list/parameters, wait_for_completion) + return FALSE diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm index a5dae1241a3..bc561e67487 100644 --- a/code/modules/tgs/core/tgs_version.dm +++ b/code/modules/tgs/core/tgs_version.dm @@ -1,4 +1,5 @@ /datum/tgs_version/New(raw_parameter) + ..() src.raw_parameter = raw_parameter deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "") var/list/version_bits = splittext(deprefixed_parameter, ".") diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 23b714f9d06..f5118ed55a3 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -1,4 +1,5 @@ #include "core\_definitions.dm" +#include "core\byond_world_export.dm" #include "core\core.dm" #include "core\datum.dm" #include "core\tgs_version.dm" diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 945e2e41176..7c87922750b 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -181,7 +181,7 @@ var/json = json_encode(data) while(requesting_new_port && !override_requesting_new_port) - sleep(1) + sleep(world.tick_lag) //we need some port open at this point to facilitate return communication if(!world.port) @@ -209,7 +209,7 @@ requesting_new_port = FALSE while(export_lock) - sleep(1) + sleep(world.tick_lag) export_lock = TRUE last_interop_response = null @@ -217,7 +217,7 @@ text2file(json, server_commands_json_path) for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I) - sleep(1) + sleep(world.tick_lag) if(!last_interop_response) TGS_ERROR_LOG("Failed to get export result for: [json]") diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index a8a0c748e7b..fb374c2f872 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -2,8 +2,8 @@ This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. -- [__interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. -- [_defines.dm](./_defines.dm) contains constant definitions. +- [\_\_interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. +- [\_defines.dm](./_defines.dm) contains constant definitions. - [api.dm](./api.dm) contains the bulk of the API code. - [bridge.dm](./bridge.dm) contains functions related to making bridge requests. - [chunking.dm](./chunking.dm) contains common function for splitting large raw data sets into chunks BYOND can natively process. diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 1b52b31d6a7..9589cbf31bb 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.6.2" +"5.10.1" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index bdcd4e4dd58..a47bfd78000 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -8,16 +8,17 @@ #define DMAPI5_TOPIC_REQUEST_LIMIT 65528 #define DMAPI5_TOPIC_RESPONSE_LIMIT 65529 -#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0 #define DMAPI5_BRIDGE_COMMAND_STARTUP 1 #define DMAPI5_BRIDGE_COMMAND_PRIME 2 #define DMAPI5_BRIDGE_COMMAND_REBOOT 3 #define DMAPI5_BRIDGE_COMMAND_KILL 4 #define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5 #define DMAPI5_BRIDGE_COMMAND_CHUNK 6 +#define DMAPI5_BRIDGE_COMMAND_EVENT 7 #define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" #define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" +#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort" #define DMAPI5_CHUNK "chunk" #define DMAPI5_CHUNK_PAYLOAD "payload" @@ -34,6 +35,7 @@ #define DMAPI5_BRIDGE_PARAMETER_VERSION "version" #define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage" #define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel" +#define DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION "eventInvocation" #define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" #define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" @@ -80,6 +82,8 @@ #define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 +#define DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT 12 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -89,7 +93,9 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" +#define DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT "clientCount" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" #define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" @@ -114,3 +120,9 @@ #define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" #define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" #define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly" + +#define DMAPI5_EVENT_ID "eventId" + +#define DMAPI5_EVENT_INVOCATION_NAME "eventName" +#define DMAPI5_EVENT_INVOCATION_PARAMETERS "parameters" +#define DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION "notifyCompletion" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 7226f29bba6..4ca9036b790 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -8,8 +8,12 @@ var/reboot_mode = TGS_REBOOT_MODE_NORMAL + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call var/list/intercepted_message_queue + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + var/list/custom_commands var/list/test_merges @@ -17,15 +21,23 @@ var/list/chat_channels var/initialized = FALSE + var/initial_bridge_request_received = FALSE + var/datum/tgs_version/interop_version var/chunked_requests = 0 var/list/chunked_topics = list() + var/list/pending_events = list() + var/detached = FALSE -/datum/tgs_api/v5/New() + var/datum/tgs_http_handler/http_handler + +/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) . = ..() - TGS_DEBUG_LOG("V5 API created") + interop_version = version + src.http_handler = http_handler + TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( @@ -38,8 +50,14 @@ access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] var/datum/tgs_version/api_version = ApiVersion() - version = null - var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) + version = null // we want this to be the TGS version, not the interop version + + // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]") + sleep(world.tick_lag) + TGS_DEBUG_LOG("Export bug prevention sleep complete") + + var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) TGS_ERROR_LOG("Failed initial bridge request!") return FALSE @@ -53,7 +71,8 @@ TGS_INFO_LOG("DMAPI validation, exiting...") TerminateWorld() - version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) + initial_bridge_request_received = TRUE + version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] @@ -78,7 +97,7 @@ if(revInfo) tm.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA] tm.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA] - tm.timestamp = entry[DMAPI5_REVISION_INFORMATION_TIMESTAMP] + tm.timestamp = revisionData[DMAPI5_REVISION_INFORMATION_TIMESTAMP] else TGS_WARNING_LOG("Failed to decode [DMAPI5_TEST_MERGE_REVISION] from test merge #[tm.number]!") @@ -102,15 +121,22 @@ initialized = TRUE return TRUE +/datum/tgs_api/v5/proc/GetTopicPort() +#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS) + return "[world.opendream_topic_port]" +#else + return null +#endif + /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() TGS_DEBUG_LOG("RequireInitialBridgeResponse()") var/logged = FALSE - while(!version) + while(!initial_bridge_request_received) if(!logged) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") logged = TRUE - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed") @@ -183,17 +209,7 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message2 = UpgradeDeprecatedChatMessage(message2) - - if (!length(channels)) - return - - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids - if(intercepted_message_queue) - intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatMessageRaw(message2, ids) /datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) var/list/channels = list() @@ -202,32 +218,82 @@ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) message2 = UpgradeDeprecatedChatMessage(message2) - if (!length(channels)) + if (!length(channel_ids)) return var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids if(intercepted_message_queue) intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + return -/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) - message2 = UpgradeDeprecatedChatMessage(message2) - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) - if(intercepted_message_queue) - intercepted_message_queue += list(data) + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() WaitForReattach(TRUE) return chat_channels.Copy() +/datum/tgs_api/v5/TriggerEvent(event_name, list/parameters, wait_for_completion) + RequireInitialBridgeResponse() + WaitForReattach(TRUE) + + if(interop_version.minor < 9) + TGS_WARNING_LOG("Interop version too low for custom events!") + return FALSE + + var/str_parameters = list() + for(var/i in parameters) + str_parameters += "[i]" + + var/list/response = Bridge(DMAPI5_BRIDGE_COMMAND_EVENT, list(DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION = list(DMAPI5_EVENT_INVOCATION_NAME = event_name, DMAPI5_EVENT_INVOCATION_PARAMETERS = str_parameters, DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION = wait_for_completion))) + if(!response) + return FALSE + + var/event_id = response[DMAPI5_EVENT_ID] + if(!event_id) + return FALSE + + TGS_DEBUG_LOG("Created event ID: [event_id]") + if(!wait_for_completion) + return TRUE + + TGS_DEBUG_LOG("Waiting for completion of event ID: [event_id]") + + while(!pending_events[event_id]) + sleep(world.tick_lag) + + TGS_DEBUG_LOG("Completed wait on event ID: [event_id]") + pending_events -= event_id + + return TRUE + /datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) TGS_DEBUG_LOG("DecodeChannels()") var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 37f58bcdf63..62201fcc9e5 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -48,7 +48,9 @@ var/json = CreateBridgeData(command, data, TRUE) var/encoded_json = url_encode(json) - var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" + + var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" return url /datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth) @@ -63,7 +65,7 @@ if(detached) // Wait up to one minute for(var/i in 1 to 600) - sleep(1) + sleep(world.tick_lag) if(!detached && (!require_channels || length(chat_channels))) break @@ -75,20 +77,25 @@ /datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) WaitForReattach(FALSE) - // This is an infinite sleep until we get a response - var/export_response = world.Export(bridge_request) - if(!export_response) - TGS_ERROR_LOG("Failed bridge request: [bridge_request]") + TGS_DEBUG_LOG("Bridge request start") + var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request) + TGS_DEBUG_LOG("Bridge request complete") + + if(isnull(result)) + TGS_ERROR_LOG("Failed bridge request, handler returned null!") return - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) - TGS_ERROR_LOG("Failed bridge request, missing content!") + if(!istype(result) || result.type != /datum/tgs_http_result) + TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!") return - var/list/bridge_response = json_decode(response_json) + if(!result.success) + TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!") + return + + var/list/bridge_response = json_decode(result.response_text) if(!bridge_response) - TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") + TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]") return var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index d7d47121381..59e5e63e5cd 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -94,7 +94,7 @@ if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") if(event_handler != null) event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) @@ -141,7 +141,7 @@ if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") server_port = new_port return TopicResponse() @@ -149,7 +149,9 @@ if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK) if(event_handler && event_handler.receive_health_checks) event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK) - return TopicResponse() + var/list/health_check_response = TopicResponse() + health_check_response[DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT] = TGS_CLIENT_COUNT + return health_check_response; if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) detached = FALSE @@ -157,7 +159,7 @@ var/error_message = null if (new_port != null) if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" else server_port = new_port @@ -165,7 +167,7 @@ if (!istext(new_version_string)) if(error_message != null) error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" else var/datum/tgs_version/new_version = new(new_version_string) if (event_handler) @@ -175,6 +177,11 @@ var/list/reattach_response = TopicResponse(error_message) reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() + reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() + + for(var/eventId in pending_events) + pending_events[eventId] = TRUE + return reattach_response if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) @@ -267,4 +274,25 @@ return chunk_to_send + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT) + var/event_id = topic_parameters[DMAPI5_EVENT_ID] + if (!istext(event_id)) + return TopicResponse("Invalid or missing [DMAPI5_EVENT_ID]") + + TGS_DEBUG_LOG("Completing event ID [event_id]...") + pending_events[event_id] = TRUE + return TopicResponse() + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index f163adaaafe..ca49e46cdff 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -8,16 +8,17 @@ #undef DMAPI5_TOPIC_REQUEST_LIMIT #undef DMAPI5_TOPIC_RESPONSE_LIMIT -#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE #undef DMAPI5_BRIDGE_COMMAND_STARTUP #undef DMAPI5_BRIDGE_COMMAND_PRIME #undef DMAPI5_BRIDGE_COMMAND_REBOOT #undef DMAPI5_BRIDGE_COMMAND_KILL #undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND #undef DMAPI5_BRIDGE_COMMAND_CHUNK +#undef DMAPI5_BRIDGE_COMMAND_EVENT #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD @@ -34,6 +35,7 @@ #undef DMAPI5_BRIDGE_PARAMETER_VERSION #undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE #undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL +#undef DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION #undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT #undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION @@ -78,6 +80,10 @@ #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE #undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST +#undef DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -87,7 +93,9 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE +#undef DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES @@ -112,3 +120,9 @@ #undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME #undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT #undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY + +#undef DMAPI5_EVENT_ID + +#undef DMAPI5_EVENT_INVOCATION_NAME +#undef DMAPI5_EVENT_INVOCATION_PARAMETERS +#undef DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 61468e8e10d..aa4e9927758 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -42,7 +42,7 @@ * * required user mob The mob interacting with the UI. * - * return list Statuic Data to be sent to the UI. + * return list Static Data to be sent to the UI. */ /datum/proc/ui_static_data(mob/user) return list() diff --git a/code/modules/nano/modules/follow_menu.dm b/code/modules/tgui/modules/follow_menu.dm similarity index 100% rename from code/modules/nano/modules/follow_menu.dm rename to code/modules/tgui/modules/follow_menu.dm diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/tgui/modules/human_appearance.dm similarity index 100% rename from code/modules/nano/modules/human_appearance.dm rename to code/modules/tgui/modules/human_appearance.dm diff --git a/code/modules/nano/modules/narrate_panel.dm b/code/modules/tgui/modules/narrate_panel.dm similarity index 100% rename from code/modules/nano/modules/narrate_panel.dm rename to code/modules/tgui/modules/narrate_panel.dm diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index d3ce59cf352..ddc2bae9b75 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -70,7 +70,7 @@ // Disable UIs if unconscious. else if(stat) return UI_DISABLED - // Update UIs if incapicitated but concious. + // Update UIs if incapicitated but conscious. else if(incapacitated()) return UI_UPDATE return UI_INTERACTIVE @@ -129,6 +129,3 @@ /datum/ui_state/proc/href_list(mob/user) return list() - -/datum/proc/nano_container() - return src diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 0f93514cfe6..3e02f893958 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -13,7 +13,7 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /datum/ui_state/default/can_use_topic(src_object, mob/user) - return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. + return user?.default_can_use_topic(src_object) // Call the individual mob-overridden procs. /mob/proc/default_can_use_topic(src_object) return UI_CLOSE // Don't allow interaction by default. @@ -41,8 +41,11 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) if(. < UI_INTERACTIVE) return + if(src_object == src) + return UI_INTERACTIVE + // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. - if(!control_disabled) + if(!control_disabled && can_see(src_object)) return UI_INTERACTIVE return UI_CLOSE diff --git a/code/modules/tgui/status_composers.dm b/code/modules/tgui/status_composers.dm index 7924ed9f2f2..8f60e03aa6a 100644 --- a/code/modules/tgui/status_composers.dm +++ b/code/modules/tgui/status_composers.dm @@ -83,6 +83,9 @@ return UI_DISABLED // Otherwise they can keep the UI open. /mob/living/silicon/ai/get_ui_access(atom/source) + if(source == src) + return UI_INTERACTIVE + // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. if(!control_disabled && can_see(source)) return UI_INTERACTIVE @@ -113,3 +116,11 @@ return UI_CLOSE return UI_INTERACTIVE + +/// Return UI_INTERACTIVE if the user is inside the target atom, whether they can see it or not. +/// Return UI_CLOSE otherwise. +/proc/ui_status_user_inside(mob/user, atom/target) + if(target.contains(user)) + return UI_INTERACTIVE + + return UI_CLOSE diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 62b40969958..b5391b4473d 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -37,11 +37,9 @@ var/datum/ui_state/state = null /// Rate limit client refreshes to prevent DoS. COOLDOWN_DECLARE(refresh_cooldown) - /// Are byond mouse events beyond the window passed in to the ui - var/mouse_hooked = FALSE - /// Any partial packets that we have received from TGUI, waiting to be sent - var/partial_packets + /// The id of any ByondUi elements that we have opened + var/list/open_byondui_elements /** * public @@ -58,9 +56,6 @@ * return datum/tgui The requested UI. */ /datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y) - log_tgui(user, - "new [interface] fancy [user?.client?.prefs.tgui_fancy]", - src_object = src_object) src.user = user src.src_object = src_object src.window_key = "[REF(src_object)]-main" @@ -85,7 +80,7 @@ * return bool - TRUE if a new pooled window is opened, FALSE in all other situations including if a new pooled window didn't open because one already exists. */ /datum/tgui/proc/open() - if(!user?.client) + if(user && !user.client) return FALSE if(window) return FALSE @@ -100,7 +95,6 @@ if(!window.is_ready()) window.initialize( strict_mode = TRUE, - fancy = user.client.prefs.tgui_fancy, assets = list( get_asset_datum(/datum/asset/simple/tgui), )) @@ -110,8 +104,6 @@ window.send_message("update", get_payload( with_data = TRUE, with_static_data = TRUE)) - if(mouse_hooked) - window.set_mouse_macro() SStgui.on_open(src) return TRUE @@ -146,11 +138,27 @@ window.release_lock() window.close(can_be_suspended) src_object.ui_close(user) - SEND_SIGNAL(src, COMSIG_TGUI_CLOSE, user) SStgui.on_close(src) + + if(user.client) + terminate_byondui_elements() + state = null qdel(src) +/** + * public + * + * Closes all ByondUI elements, left dangling by a forceful TGUI exit, + * such as via Alt+F4, or terminating the process + * + */ +/datum/tgui/proc/terminate_byondui_elements() + set waitfor = FALSE + + for(var/byondui_element in open_byondui_elements) + winset(user.client, byondui_element, list("parent" = "")) + /** * public * @@ -161,18 +169,6 @@ /datum/tgui/proc/set_autoupdate(autoupdate) src.autoupdate = autoupdate -/** - * public - * - * Enable/disable passing through byond mouse events to the window - * - * required value bool Enable/disable hooking. - */ -/datum/tgui/proc/set_mouse_hook(value) - src.mouse_hooked = value - //Handle unhooking/hooking on already open windows ? - - /** * public * @@ -248,12 +244,13 @@ json_data["config"] = list( "title" = title, "status" = status, - "interface" = interface, + "interface" = list( + "name" = interface, + ), "refreshing" = refreshing, "window" = list( "key" = window_key, "size" = window_size, - "fancy" = user.client.prefs.tgui_fancy, "locked" = user.client.prefs.tgui_lock, "scale" = user.client.prefs.ui_scale, ), @@ -329,31 +326,6 @@ // Pass act type messages to ui_act if(type && copytext(type, 1, 5) == "act/") var/act_type = copytext(type, 5) - - var/id = href_list["packetId"] - if(!isnull(id)) - id = text2num(id) - - var/total = text2num(href_list["totalPackets"]) - - if(total > MAX_MESSAGE_CHUNKS) - return - - if(id == 1) - partial_packets = new /list(total) - - partial_packets[id] = href_list["packet"] - - if(id != total) - return - - var/assembled_payload = "" - for(var/packet in partial_packets) - assembled_payload += packet - - payload = json_decode(assembled_payload) - partial_packets = null - log_tgui(user, "Action: [act_type] [href_list["payload"]]", window = window, src_object = src_object) @@ -381,6 +353,18 @@ LAZYINITLIST(src_object.tgui_shared_states) src_object.tgui_shared_states[href_list["key"]] = href_list["value"] SStgui.update_uis(src_object) + if(TGUI_MANAGED_BYONDUI_TYPE_RENDER) + var/byond_ui_id = payload[TGUI_MANAGED_BYONDUI_PAYLOAD_ID] + if(!byond_ui_id || LAZYLEN(open_byondui_elements) > TGUI_MANAGED_BYONDUI_LIMIT) + return + + LAZYOR(open_byondui_elements, byond_ui_id) + if(TGUI_MANAGED_BYONDUI_TYPE_UNMOUNT) + var/byond_ui_id = payload[TGUI_MANAGED_BYONDUI_PAYLOAD_ID] + if(!byond_ui_id) + return + + LAZYREMOVE(open_byondui_elements, byond_ui_id) /// Wrapper for behavior to potentially wait until the next tick if the server is overloaded /datum/tgui/proc/on_act_message(act_type, payload, state) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index 996013a1aa5..1b29cacdb79 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -11,6 +11,7 @@ var/is_browser = FALSE var/status = TGUI_WINDOW_CLOSED var/locked = FALSE + var/visible = FALSE var/datum/tgui/locked_by var/datum/subscriber_object var/subscriber_delegate @@ -19,12 +20,12 @@ var/sent_assets = list() // Vars passed to initialize proc (and saved for later) var/initial_strict_mode - var/initial_fancy var/initial_assets var/initial_inline_html var/initial_inline_js var/initial_inline_css - var/mouse_event_macro_set = FALSE + + var/list/oversized_payloads = list() /** * public @@ -50,7 +51,6 @@ * will be put into the queue until the window finishes loading. * * optional strict_mode bool - Enables strict error handling and BSOD. - * optional fancy bool - If TRUE and if this is NOT a panel, will hide the window titlebar. * optional assets list - List of assets to load during initialization. * optional inline_html string - Custom HTML to inject. * optional inline_js string - Custom JS to inject. @@ -58,7 +58,6 @@ */ /datum/tgui_window/proc/initialize( strict_mode = FALSE, - fancy = FALSE, assets = list(), inline_html = "", inline_js = "", @@ -68,7 +67,6 @@ window = src) if(!client) return - src.initial_fancy = fancy src.initial_assets = assets src.initial_inline_html = inline_html src.initial_inline_js = inline_js @@ -76,16 +74,12 @@ status = TGUI_WINDOW_LOADING fatally_errored = FALSE // Build window options - var/options = "file=[id].html;can_minimize=0;auto_format=0;" - // Remove titlebar and resize handles for a fancy window - if(fancy) - options += "titlebar=0;can_resize=0;" - else - options += "titlebar=1;can_resize=1;" + var/options = "file=[id].html;can_minimize=0;auto_format=0;titlebar=0;can_resize=0;" // Generate page html var/html = SStgui.basehtml html = replacetextEx(html, "\[tgui:windowId]", id) html = replacetextEx(html, "\[tgui:strictMode]", strict_mode) + html = replacetextEx(html, "\[tgui:storagecdn]", GLOB.config.storage_cdn_iframe) // Inject assets var/inline_assets_str = "" for(var/datum/asset/asset in assets) @@ -128,7 +122,6 @@ /datum/tgui_window/proc/reinitialize() initialize( strict_mode = initial_strict_mode, - fancy = initial_fancy, assets = initial_assets, inline_html = initial_inline_html, inline_js = initial_inline_js, @@ -220,12 +213,11 @@ /datum/tgui_window/proc/close(can_be_suspended = TRUE) if(!client) return - if(mouse_event_macro_set) - remove_mouse_macro() if(can_be_suspended && can_be_suspended()) log_tgui(client, context = "[id]/close (suspending)", window = src) + visible = FALSE status = TGUI_WINDOW_READY send_message("suspend") return @@ -233,6 +225,7 @@ context = "[id]/close", window = src) release_lock() + visible = FALSE status = TGUI_WINDOW_CLOSED message_queue = null // Do not close the window to give user some time @@ -298,9 +291,6 @@ return sent_assets |= list(asset) . = asset.send(client) - if(istype(asset, /datum/asset/spritesheet)) - var/datum/asset/spritesheet/spritesheet = asset - send_message("asset/stylesheet", spritesheet.css_filename()) send_raw_message(asset.get_serialized_url_mappings()) /** @@ -364,6 +354,11 @@ switch(type) if("ping") send_message("ping/reply", payload) + if("ping/set") + client?.avgping = payload["ping"] + if("visible") + visible = TRUE + SEND_SIGNAL(src, COMSIG_TGUI_WINDOW_VISIBLE, client) if("suspend") close(can_be_suspended = TRUE) if("close") @@ -372,40 +367,48 @@ client << link(href_list["url"]) if("cacheReloaded") reinitialize() + if("chat/resend") + SSchat.handle_resend(client, payload) + if("oversizedPayloadRequest") + var/payload_id = payload["id"] + var/chunk_count = payload["chunkCount"] + var/permit_payload = chunk_count <= 32 + if(permit_payload) + create_oversized_payload(payload_id, payload["type"], chunk_count) + send_message("oversizePayloadResponse", list("allow" = permit_payload, "id" = payload_id)) + if("payloadChunk") + var/payload_id = payload["id"] + append_payload_chunk(payload_id, payload["chunk"]) + send_message("acknowledgePayloadChunk", list("id" = payload_id)) -/datum/tgui_window/proc/set_mouse_macro() - if(mouse_event_macro_set) +/datum/tgui_window/vv_edit_var(var_name, var_value) + return var_name != NAMEOF(src, id) && ..() + +/datum/tgui_window/proc/create_oversized_payload(payload_id, message_type, chunk_count) + if(oversized_payloads[payload_id]) + stack_trace("Attempted to create oversized tgui payload with duplicate ID.") return - - var/list/byondToTguiEventMap = list( - "MouseDown" = "byond/mousedown", - "MouseUp" = "byond/mouseup" + oversized_payloads[payload_id] = list( + "type" = message_type, + "count" = chunk_count, + "chunks" = list(), + "timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) ) - for(var/mouseMacro in byondToTguiEventMap) - var/command_template = ".output CONTROL PAYLOAD" - var/event_message = TGUI_CREATE_MESSAGE(byondToTguiEventMap[mouseMacro], null) - var target_control = is_browser \ - ? "[id]:update" \ - : "[id].browser:update" - var/with_id = replacetext(command_template, "CONTROL", target_control) - var/full_command = replacetext(with_id, "PAYLOAD", event_message) +/datum/tgui_window/proc/append_payload_chunk(payload_id, chunk) + var/list/payload = oversized_payloads[payload_id] + if(!payload) + return + var/list/chunks = payload["chunks"] + chunks += chunk + if(length(chunks) >= payload["count"]) + deltimer(payload["timeout"]) + var/message_type = payload["type"] + var/final_payload = chunks.Join() + remove_oversized_payload(payload_id) + on_message(message_type, json_decode(final_payload), list("type" = message_type, "payload" = final_payload, "tgui" = TRUE, "window_id" = id)) + else + payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) - var/list/params = list() - params["parent"] = "default" //Technically this is external to tgui but whatever - params["name"] = mouseMacro - params["command"] = full_command - - winset(client, "[mouseMacro]Window[id]Macro", params) - mouse_event_macro_set = TRUE - -/datum/tgui_window/proc/remove_mouse_macro() - if(!mouse_event_macro_set) - stack_trace("Unsetting mouse macro on tgui window that has none") - var/list/byondToTguiEventMap = list( - "MouseDown" = "byond/mousedown", - "MouseUp" = "byond/mouseup" - ) - for(var/mouseMacro in byondToTguiEventMap) - winset(client, null, "[mouseMacro]Window[id]Macro.parent=null") - mouse_event_macro_set = FALSE +/datum/tgui_window/proc/remove_oversized_payload(payload_id) + oversized_payloads -= payload_id diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm index 469cd7831b1..6efee72a7cd 100644 --- a/code/modules/tgui_input/alert.dm +++ b/code/modules/tgui_input/alert.dm @@ -10,7 +10,7 @@ * * timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout. * * autofocus - The bool that controls if this alert should grab window focus. */ -/proc/tgui_alert(mob/user, message = "", title, list/buttons = list("Ok"), timeout = 0, autofocus = TRUE) +/proc/tgui_alert(mob/user, message = "", title, list/buttons = list("Ok"), timeout = 0, autofocus = TRUE, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -18,7 +18,11 @@ var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + // A gentle nudge - you should not be using TGUI alert for anything other than a simple message. if(length(buttons) > 3) log_tgui(user, "Error: TGUI Alert initiated with too many buttons. Use a list.", "TguiAlert") @@ -29,7 +33,7 @@ return alert(user, message, title, buttons[1], buttons[2]) if(length(buttons) == 3) return alert(user, message, title, buttons[1], buttons[2], buttons[3]) - var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus) + var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus, ui_state) alert.ui_interact(user) alert.wait() if (alert) @@ -59,19 +63,23 @@ var/autofocus /// Boolean field describing if the tgui_alert was closed by the user. var/closed + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state -/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus) +/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus, ui_state) src.autofocus = autofocus src.buttons = buttons.Copy() src.message = message src.title = title + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_alert/Destroy(force, ...) +/datum/tgui_alert/Destroy(force) SStgui.close_uis(src) + state = null buttons?.Cut() return ..() @@ -94,7 +102,7 @@ closed = TRUE /datum/tgui_alert/ui_state(mob/user) - return GLOB.always_state + return state /datum/tgui_alert/ui_static_data(mob/user) var/list/data = list() @@ -112,7 +120,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_alert/ui_act(action, list/params) +/datum/tgui_alert/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm new file mode 100644 index 00000000000..51ce2a631aa --- /dev/null +++ b/code/modules/tgui_input/checkboxes.dm @@ -0,0 +1,139 @@ +/** + * ### tgui_input_checkbox + * Opens a window with a list of checkboxes and returns a list of selected choices. + * + * user - The mob to display the window to + * message - The message inside the window + * title - The title of the window + * list/items - The list of items to display + * min_checked - The minimum number of checkboxes that must be checked (defaults to 1) + * max_checked - The maximum number of checkboxes that can be checked (optional) + * timeout - The timeout for the input (optional) + */ +/proc/tgui_input_checkboxes(mob/user, message, title = "Select", list/items, min_checked = 1, max_checked = 50, timeout = 0, ui_state = GLOB.always_state) + if (!user) + user = usr + if(!length(items)) + return null + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return null + + if(isnull(user.client)) + return null + + if(!user.client.prefs.tgui_inputs) + return input(user, message, title) as null|anything in items + var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout, ui_state) + input.ui_interact(user) + input.wait() + if (input) + . = input.choices + qdel(input) + +/// Window for tgui_input_checkboxes +/datum/tgui_checkbox_input + /// Title of the window + var/title + /// Message to display + var/message + /// List of items to display + var/list/items + /// List of selected items + var/list/choices + /// Time when the input was created + var/start_time + /// Timeout for the input + var/timeout + /// Whether the input was closed + var/closed + /// Minimum number of checkboxes that must be checked + var/min_checked + /// Maximum number of checkboxes that can be checked + var/max_checked + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_checkbox_input/New(mob/user, message, title, list/items, min_checked, max_checked, timeout, ui_state) + src.title = title + src.message = message + src.items = items.Copy() + src.min_checked = min_checked + src.max_checked = max_checked + src.state = ui_state + + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_checkbox_input/Destroy(force) + SStgui.close_uis(src) + state = null + items?.Cut() + return ..() + +/datum/tgui_checkbox_input/proc/wait() + while (!closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_checkbox_input/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CheckboxInput") + ui.open() + +/datum/tgui_checkbox_input/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_checkbox_input/ui_state(mob/user) + return state + +/datum/tgui_checkbox_input/ui_data(mob/user) + var/list/data = list() + + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + + return data + +/datum/tgui_checkbox_input/ui_static_data(mob/user) + var/list/data = list() + + data["items"] = items + data["min_checked"] = min_checked + data["max_checked"] = max_checked + data["large_buttons"] = user.client.prefs.tgui_buttons_large + data["message"] = message + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped + data["title"] = title + + return data + +/datum/tgui_checkbox_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if (.) + return + + switch(action) + if("submit") + var/list/selections = params["entry"] + if(length(selections) >= min_checked && length(selections) <= max_checked) + set_choices(selections) + closed = TRUE + SStgui.close_uis(src) + return TRUE + + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + + return FALSE + +/datum/tgui_checkbox_input/proc/set_choices(list/selections) + src.choices = selections.Copy() diff --git a/code/modules/tgui_input/keycombo.dm b/code/modules/tgui_input/keycombo.dm new file mode 100644 index 00000000000..45bd3c18034 --- /dev/null +++ b/code/modules/tgui_input/keycombo.dm @@ -0,0 +1,126 @@ +/** + * Creates a TGUI window with a key input. Returns the user's response as a full key with modifiers, eg ShiftK. + * + * This proc should be used to create windows for key entry that the caller will wait for a response from. + * If tgui fancy chat is turned off: Will return a normal input. + * + * Arguments: + * * user - The user to show the number input to. + * * message - The content of the number input, shown in the body of the TGUI window. + * * title - The title of the number input modal, shown on the top of the TGUI window. + * * default - The default (or current) key, shown as a placeholder. + */ +/proc/tgui_input_keycombo(mob/user = usr, message, title = "Key Input", default = 0, timeout = 0, ui_state = GLOB.always_state) + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return null + + if (isnull(user.client)) + return null + + // Client does NOT have tgui_input on: Returns regular input + if(!user.client.prefs.tgui_inputs) + var/input_key = input(user, message, title + "(Modifiers are TGUI only, sorry!)", default) as null|text + return input_key[1] + var/datum/tgui_input_keycombo/key_input = new(user, message, title, default, timeout, ui_state) + key_input.ui_interact(user) + key_input.wait() + if (key_input) + . = key_input.entry + qdel(key_input) + +/** + * # tgui_input_keycombo + * + * Datum used for instantiating and using a TGUI-controlled key input that prompts the user with + * a message and listens for key presses. + */ +/datum/tgui_input_keycombo + /// Boolean field describing if the tgui_input_number was closed by the user. + var/closed + /// The default (or current) value, shown as a default. Users can press reset with this. + var/default + /// The entry that the user has return_typed in. + var/entry + /// The prompt's body, if any, of the TGUI window. + var/message + /// The time at which the number input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the number input, after which the window will close and delete itself. + var/timeout + /// The title of the TGUI window + var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_input_keycombo/New(mob/user, message, title, default, timeout, ui_state) + src.default = default + src.message = message + src.title = title + src.state = ui_state + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_input_keycombo/Destroy(force) + SStgui.close_uis(src) + state = null + return ..() + +/** + * Waits for a user's response to the tgui_input_keycombo's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_input_keycombo/proc/wait() + while (!entry && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_input_keycombo/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "KeyComboModal") + ui.open() + +/datum/tgui_input_keycombo/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_input_keycombo/ui_state(mob/user) + return state + +/datum/tgui_input_keycombo/ui_static_data(mob/user) + var/list/data = list() + data["init_value"] = default // Default is a reserved keyword + data["large_buttons"] = user.client.prefs.tgui_buttons_large + data["message"] = message + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped + data["title"] = title + return data + +/datum/tgui_input_keycombo/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + return data + +/datum/tgui_input_keycombo/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if (.) + return + switch(action) + if("submit") + set_entry(params["entry"]) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_input_keycombo/proc/set_entry(entry) + src.entry = entry diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 1192bb55b85..5448a4a4729 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -10,21 +10,28 @@ * * default - If an option is already preselected on the UI. Current values, etc. * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0) +/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0, ui_state = GLOB.always_state) if (!user) user = usr if(!length(items)) - return + return null if (!istype(user)) if (istype(user, /client)) var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + /// Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.tgui_inputs) return input(user, message, title, default) as null|anything in items - var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout) + var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state) + if(input.invalid) + qdel(input) + return input.ui_interact(user) input.wait() if (input) @@ -56,13 +63,18 @@ var/timeout /// Boolean field describing if the tgui_list_input was closed by the user. var/closed + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + /// Whether the tgui list input is invalid or not (i.e. due to all list entries being null) + var/invalid = FALSE -/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout) +/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout, ui_state) src.title = title src.message = message src.items = list() src.items_map = list() src.default = default + src.state = ui_state var/list/repeat_items = list() // Gets rid of illegal characters var/static/regex/whitelistedWords = regex(@{"([^\u0020-\u8000]+)"}) @@ -74,13 +86,17 @@ string_key = avoid_assoc_duplicate_keys(string_key, repeat_items) src.items += string_key src.items_map[string_key] = i + + if(length(src.items) == 0) + invalid = TRUE if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_list_input/Destroy(force, ...) +/datum/tgui_list_input/Destroy(force) SStgui.close_uis(src) + state = null items?.Cut() items_map?.Cut() return ..() @@ -96,7 +112,7 @@ /datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "ListInputModal") + ui = new(user, src, "ListInputWindow") ui.open() /datum/tgui_list_input/ui_close(mob/user) @@ -104,15 +120,15 @@ closed = TRUE /datum/tgui_list_input/ui_state(mob/user) - return GLOB.always_state + return state /datum/tgui_list_input/ui_static_data(mob/user) var/list/data = list() data["init_value"] = default || items[1] data["items"] = items data["large_buttons"] = user.client.prefs.tgui_buttons_large - data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["message"] = message + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["title"] = title return data @@ -122,7 +138,7 @@ data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) return data -/datum/tgui_list_input/ui_act(action, list/params) +/datum/tgui_list_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index 8eb489be1f0..5c708f618e3 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -15,7 +15,7 @@ * * timeout - The timeout of the number input, after which the modal will close and qdel itself. Set to zero for no timeout. * * round_value - whether the inputted number is rounded down into an integer. */ -/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE) +/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -30,7 +30,7 @@ if(!user.client.prefs.tgui_inputs) var/input_number = input(user, message, title, default) as null|num return clamp(round_value ? round(input_number) : input_number, min_value, max_value) - var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value) + var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value, ui_state) number_input.ui_interact(user) number_input.wait() if (number_input) @@ -64,14 +64,17 @@ var/timeout /// The title of the TGUI window var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state -/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value) +/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value, ui_state) src.default = default src.max_value = max_value src.message = message src.min_value = min_value src.title = title src.round_value = round_value + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time @@ -87,8 +90,9 @@ if(default > max_value) CRASH("Default value is greater than max value.") -/datum/tgui_input_number/Destroy(force, ...) +/datum/tgui_input_number/Destroy(force) SStgui.close_uis(src) + state = null return ..() /** @@ -110,7 +114,7 @@ closed = TRUE /datum/tgui_input_number/ui_state(mob/user) - return GLOB.always_state + return state /datum/tgui_input_number/ui_static_data(mob/user) if (!user.client) @@ -119,10 +123,10 @@ var/list/data = list() data["init_value"] = default // Default is a reserved keyword data["large_buttons"] = user.client.prefs.tgui_buttons_large - data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["max_value"] = max_value data["message"] = message data["min_value"] = min_value + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["title"] = title data["round_value"] = round_value return data @@ -133,7 +137,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_number/ui_act(action, list/params) +/datum/tgui_input_number/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm index 4b96ab1791d..4caf3f82420 100644 --- a/code/modules/tgui_input/say_modal/modal.dm +++ b/code/modules/tgui_input/say_modal/modal.dm @@ -48,7 +48,6 @@ sleep(3 SECONDS) window.initialize( strict_mode = TRUE, - fancy = TRUE, inline_css = file("tgui/public/tgui-say.bundle.css"), inline_js = file("tgui/public/tgui-say.bundle.js"), ); diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index c934a4276a6..6b3563a27a0 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -10,12 +10,12 @@ * * message - The content of the text input, shown in the body of the TGUI window. * * title - The title of the text input modal, shown on the top of the TGUI window. * * default - The default (or current) value, shown as a placeholder. - * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (1024) + * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (4096) * * multiline - Bool that determines if the input box is much larger. Good for large messages, laws, etc. * * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input. * * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0) +/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -39,7 +39,7 @@ return input(user, message, title, default) as message|null else return input(user, message, title, default) as text|null - var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout) + var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout, ui_state) text_input.ui_interact(user) text_input.wait() if (text_input) @@ -73,21 +73,25 @@ var/timeout /// The title of the TGUI window var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state -/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout) +/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout, ui_state) src.default = default src.encode = encode src.max_length = max_length src.message = message src.multiline = multiline src.title = title + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_input_text/Destroy(force, ...) +/datum/tgui_input_text/Destroy(force) SStgui.close_uis(src) + state = null return ..() /** @@ -131,7 +135,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_text/ui_act(action, list/params) +/datum/tgui_input_text/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_panel/external.dm b/code/modules/tgui_panel/external.dm index 5ab90b3d61b..8874bf3a49e 100644 --- a/code/modules/tgui_panel/external.dm +++ b/code/modules/tgui_panel/external.dm @@ -32,3 +32,11 @@ tgui_panel.initialize(force = TRUE) // Force show the panel to see if there are any errors winset(src, "output_selector.legacy_output_selector", "left=output_browser") + +/client/verb/refresh_tgui() + set name = "Refresh TGUI" + set category = "OOC.Debug" + + for(var/window_id in tgui_windows) + var/datum/tgui_window/window = tgui_windows[window_id] + window.reinitialize() diff --git a/config/example/config.txt b/config/example/config.txt index 0824bb673a6..a486343be07 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -604,3 +604,7 @@ CACHE_ASSETS 0 # # # + +## Tgui payloads larger than the 2kb limit for BYOND topic requests are split into roughly 1kb chunks and sent in sequence. +## This config option limits the maximum chunk count for which the server will accept a payload, default is 32 +TGUI_MAX_CHUNK_COUNT 32 diff --git a/dependencies.sh b/dependencies.sh index dc296092ca2..a015b9e405d 100755 --- a/dependencies.sh +++ b/dependencies.sh @@ -17,9 +17,12 @@ echo "SPACEMAN_DMM_VERSION=$SPACEMAN_DMM_VERSION" >> "$GITHUB_ENV" #node version export NODE_VERSION=20 echo "NODE_VERSION=$NODE_VERSION" >> "$GITHUB_ENV" -export NODE_VERSION_LTS=20.12.0 +export NODE_VERSION_LTS=22.11.0 echo "NODE_VERSION_LTS=$NODE_VERSION_LTS" >> "$GITHUB_ENV" +# Bun version +export BUN_VERSION=1.2.16 +echo "BUN_VERSION=$BUN_VERSION" >> "$GITHUB_ENV" # Python version for mapmerge and other tools # Ensure in https://www.python.org/ftp/python/ there is a file called python--embed-amd64.zip, diff --git a/html/changelogs/Bat-TGUIReactMigration.yml b/html/changelogs/Bat-TGUIReactMigration.yml new file mode 100644 index 00000000000..4078a497fb4 --- /dev/null +++ b/html/changelogs/Bat-TGUIReactMigration.yml @@ -0,0 +1,66 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: Batrachophrenoboocosmomachia + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - refactor: "Updates TGUI backend (both modules and tgui code) from Inferno to React." + - refactor: "Migrates all TGUI components and interfaces to the new React architecture." + - rscadd: "Adds item examine tags and descriptors w/ hoverable tooltips in chat window." + - rscdel: "Removal of all lingering NanoUI code and assets." + - server: "Build tool Javascript to Typescript migrations." + - code_imp: "Migration to bun 1.2.16." + - code_imp: "Migration from eslint 7.32.0 -> biome 2.1.2." + - code_imp: "Many many other dependency changes; see all 'package.json' diffs." + - bugfix: "Fixes runtime attempting to clone executable files in NTOS File Manager." diff --git a/html/statbrowser.css b/html/statbrowser.css index 3dd7f78b786..0e1a67db22a 100644 --- a/html/statbrowser.css +++ b/html/statbrowser.css @@ -1,241 +1,273 @@ .light:root { - --scrollbar-base: #f2f2f2; - --scrollbar-thumb: #a7a7a7; + --color-base: #ffffff; + --scrollbar-base: #f2f2f2; + --scrollbar-thumb: #a7a7a7; } -html, body { - scrollbar-color: var(--scrollbar-base) var(--scrollbar-thumb); +html, +body { + scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-base); } body { - font-family: Verdana, Geneva, Tahoma, sans-serif; - font-size: 12px !important; - margin: 0 !important; - padding: 0 !important; - overflow-x: hidden; - overflow-y: scroll; -} - -body.dark { - background-color: #131313; - color: #b2c4dd; - scrollbar-base-color: #1c1c1c; - scrollbar-face-color: #3b3b3b; - scrollbar-3dlight-color: #252525; - scrollbar-highlight-color: #252525; - scrollbar-track-color: #1c1c1c; - scrollbar-arrow-color: #929292; - scrollbar-shadow-color: #3b3b3b; -} - -.dark:root { - --scrollbar-base: #181818; - --scrollbar-thumb: #363636; -} - -#menu { - background-color: #F0F0F0; - position: fixed; - width: 100%; - z-index: 100; -} - -.dark #menu { - background-color: #202020; -} - -#statcontent { - padding: 7px 7px 7px 7px; + font-family: Verdana, Geneva, Tahoma, sans-serif; + font-size: 12px; + margin: 0 !important; + padding: 0 !important; + overflow: hidden; } a { - color: black; - text-decoration: none + color: #003399; + text-decoration: none; } -.dark a { - color: #b2c4dd; +a:hover { + color: #007fff; } -a:hover, -.dark a:hover { - text-decoration: underline; -} - -ul { - list-style-type: none; - margin: 0; - padding: 0; - background-color: #333; -} - -li { - float: left; -} - -li a { - display: block; - color: white; - text-align: center; - padding: 14px 16px; - text-decoration: none; -} - -li a:hover:not(.active) { - background-color: #111; -} - -.button-container { - display: inline-flex; - flex-wrap: wrap-reverse; - flex-direction: row; - align-items: flex-start; - overflow-x: hidden; - white-space: pre-wrap; - padding: 0 4px; -} - -.button { - background-color: #dfdfdf; - border: 1px solid #cecece; - border-bottom-width: 2px; - color: rgba(0, 0, 0, 0.7); - padding: 6px 4px 4px; - text-align: center; - text-decoration: none; - font-size: 12px; - margin: 0; - cursor: pointer; - transition-duration: 100ms; - order: 3; - min-width: 40px; -} - -.dark button { - background-color: #222222; - border-color: #343434; - color: rgba(255, 255, 255, 0.5); -} - -.button:hover { - background-color: #ececec; - transition-duration: 0; -} - -.dark button:hover { - background-color: #2e2e2e; -} - -.button:active, -.button.active { - background-color: #ffffff; - color: black; - border-top-color: #cecece; - border-left-color: #cecece; - border-right-color: #cecece; - border-bottom-color: #ffffff; -} - -.dark .button:active, -.dark .button.active { - background-color: #444444; - color: white; - border-top-color: #343434; - border-left-color: #343434; - border-right-color: #343434; - border-bottom-color: #ffffff; -} - -.grid-container { - margin: -2px; - margin-right: -15px; -} - -.grid-item { - position: relative; - display: inline-block; - width: 100%; - box-sizing: border-box; - overflow: visible; - padding: 3px 2px; - text-decoration: none; -} - -@media only screen and (min-width: 300px) { - .grid-item { - width: 50%; - } -} - -@media only screen and (min-width: 430px) { - .grid-item { - width: 33%; - } -} - -@media only screen and (min-width: 560px) { - .grid-item { - width: 25%; - } -} - -@media only screen and (min-width: 770px) { - .grid-item { - width: 20%; - } -} - -.grid-item:hover { - z-index: 1; -} - -.grid-item:hover .grid-item-text { - width: auto; - text-decoration: underline; -} - -.grid-item-text { - display: inline-block; - width: 100%; - background-color: #ffffff; - margin: 0 -6px; - padding: 0 6px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - pointer-events: none; -} - -.dark .grid-item-text { - background-color: #131313; -} - -.link { - display: inline; - background: none; - border: none; - padding: 7px 14px; - color: black; - text-decoration: none; - cursor: pointer; - font-size: 13px; - margin: 2px 2px; -} - -.dark .link { - color: #abc6ec; -} - -.link:hover { - text-decoration: underline; +h3 { + margin: 0 -0.5em 0.5em; + padding: 1em 0.66em 0.5em; + border-bottom: 0.1667em solid; } img { - -ms-interpolation-mode: nearest-neighbor; - image-rendering: pixelated; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: pixelated; } -.interview_panel_controls, -.interview_panel_stats { - margin-bottom: 10px; +.stat-container { + display: flex; + flex-direction: column; + height: 100vh; +} + +#menu { + display: flex; + overflow-x: auto; + overflow-y: hidden; + padding: 0.25em 0.25em 0; + background-color: #ffffff; +} + +.menu-wrap { + flex-wrap: wrap-reverse; +} + +#menu.tabs-classic { + padding: 0.15em; +} + +#menu.tabs-classic .button { + min-width: 2em; + margin: 0.1em; + padding: 0.25em 0.4em; + border: 0; + border-radius: 0.25em; +} + +#menu.tabs-classic .button.active { + background-color: #0668b8; + color: white; +} + +.button { + display: inline-table; + cursor: pointer; + user-select: none; + -ms-user-select: none; /* Remove after Byond 516 */ + text-align: center; + font-size: 1em; + min-width: 2.9em; + padding: 0.5em 0.5em 0.4em; + background-color: transparent; + color: rgba(0, 0, 0, 0.5); + border: 0; + border-bottom: 0.1667em solid transparent; + border-radius: 0.25em 0.25em 0 0; +} + +.button:hover { + background-color: #ececec; +} + +.button.active { + cursor: default; + background-color: #dfdfdf; + color: black; + border-bottom-color: #000000; +} + +.statcontent { + flex: 1; + padding: 0.75em 0.5em; + overflow-y: auto; + overflow-x: hidden; +} + +.mcstatcontent { + flex: 1; + padding: 0.75em 0.5em; + overflow-y: auto; + overflow-x: auto; + white-space: pre; +} + +.mcstatcontent td { + vertical-align: top; +} + +.mcstatcontent .monospace { + font-family: "Consolas", "Lucida Console", "Courier New", monospace; +} + +#under-menu { + height: 0.5em; + background-color: #eeeeee; +} + +#under-content { + height: calc(0.5em - 4px); + background-color: #eeeeee; +} + +.grid-container { + margin: -0.25em; +} + +.grid-item { + display: inline-flex; + position: relative; + user-select: none; + -ms-user-select: none; /* Remove after Byond 516 */ + width: 100%; + max-height: 1.85em; + text-decoration: none; + background-color: transparent; + color: black; +} + +.grid-item:hover, +.grid-item:active { + color: #003399; + z-index: 1; +} + +.grid-item-text { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + width: 100%; + padding: 0.33em 0.5em; + border-radius: 0.25em; +} + +.grid-item:hover .grid-item-text { + height: 100%; + overflow: visible; + white-space: normal; + background-color: #ececec; +} + +.grid-item:active .grid-item-text { + background-color: #dfdfdf; +} + +@media only screen and (min-width: 300px) { + .grid-item { + width: 50%; + } +} + +@media only screen and (min-width: 430px) { + .grid-item { + width: 33%; + } +} + +@media only screen and (min-width: 560px) { + .grid-item { + width: 25%; + } +} + +@media only screen and (min-width: 770px) { + .grid-item { + width: 20%; + } +} + +.status-info { + margin: 0 0.33em 0.25em; +} + +.interview_panel_stats, +.interview_panel_controls { + margin-bottom: 1em; +} + +/** + * MARK: Dark theme colors + */ +.dark:root { + --color-base: #151515; + --scrollbar-base: #151515; + --scrollbar-thumb: #363636; +} + +body.dark { + background-color: #151515; + color: #b2c4dd; +} + +.dark a { + color: #6699ff; +} + +.dark a:hover, +.dark .grid-item:hover, +.dark .grid-item:active { + color: #80bfff; +} + +.dark #menu { + background-color: #151515; +} + +.dark #menu.tabs-classic .button.active { + background-color: #20b142; +} + +.dark .button { + color: rgba(255, 255, 255, 0.5); +} + +.dark .button:hover { + background-color: #252525; +} + +.dark .button.active { + background-color: #313131; + color: #d4dfec; + border-bottom-color: #d4dfec; +} + +.dark #under-menu, +.dark #under-content { + background-color: #202020; +} + +.dark .grid-item { + color: #b2c4dd; +} + +.dark .grid-item:hover .grid-item-text { + background-color: #252525; +} + +.dark .grid-item:active .grid-item-text { + background-color: #313131; } diff --git a/html/statbrowser.html b/html/statbrowser.html index 1aea8811d58..bbbd8fa53ab 100644 --- a/html/statbrowser.html +++ b/html/statbrowser.html @@ -1,3 +1,6 @@ - -
-
+
+ +
+
+
+
diff --git a/html/statbrowser.js b/html/statbrowser.js index c3c167ad4dc..2292f199096 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -1,977 +1,944 @@ // Polyfills and compatibility ------------------------------------------------ var decoder = decodeURIComponent || unescape; if (!Array.prototype.includes) { - Array.prototype.includes = function (thing) { - for (var i = 0; i < this.length; i++) { - if (this[i] == thing) return true; - } - return false; - } + Array.prototype.includes = function (thing) { + for (var i = 0; i < this.length; i++) { + if (this[i] == thing) return true; + } + return false; + }; } if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - }; + String.prototype.trim = function () { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; } // Status panel implementation ------------------------------------------------ -var status_tab_parts = ["Loading..."]; +//status_tab_parts expects a list to be returned, to which we'll send a list within a list +//with just "loading" to not appear broken. +var status_tab_parts = [['Loading...']]; var current_tab = null; -var mc_tab_parts = [["Loading...", ""]]; -var spells = []; -var spell_tabs = []; +//mc_tab_parts expects a list to be returned, to which we'll send a list within a list +//with just "loading" to not appear broken. +var mc_tab_parts = [['Loading...']]; +var href_token = null; var verb_tabs = []; -var verbs = [["", ""]]; // list with a list inside +var verbs = [['', '']]; // list with a list inside var tickets = []; -var interviewManager = { status: "", interviews: [] }; +var interviewManager = { status: '', interviews: [] }; var sdql2 = []; var permanent_tabs = []; // tabs that won't be cleared by wipes var turfcontents = []; -var turfname = ""; +var turfname = ''; var imageRetryDelay = 500; var imageRetryLimit = 50; var menu = document.getElementById('menu'); -var under_menu = document.getElementById('under_menu'); var statcontentdiv = document.getElementById('statcontent'); var storedimages = []; var split_admin_tabs = false; +//The 'default' tab that everyone should have, that we swap to if the tab you're on is deleted or anything similar. +var defaultTab = 'Status'; // Any BYOND commands that could result in the client's focus changing go through this // to ensure that when we relinquish our focus, we don't do it after the result of // a command has already taken focus for itself. function run_after_focus(callback) { - setTimeout(callback, 0); + setTimeout(callback, 0); } function createStatusTab(name) { - if (name.indexOf(".") != -1) { - var splitName = name.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - name = splitName[1]; - else - name = splitName[0]; - } - if (document.getElementById(name) || name.trim() == "") { - return; - } - if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { - return; - } - var B = document.createElement("BUTTON"); - B.onclick = function () { - tab_change(name); - this.blur(); - }; - B.id = name; - B.textContent = name; - B.className = "button"; - //ORDERING ALPHABETICALLY - B.style.order = name.charCodeAt(0); - if (name == "Status" || name == "MC") { - B.style.order = name == "Status" ? 1 : 2; - } - //END ORDERING - menu.appendChild(B); - SendTabToByond(name); - under_menu.style.height = menu.clientHeight + 'px'; + if (name.indexOf('.') != -1) { + var splitName = name.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') name = splitName[1]; + else name = splitName[0]; + } + if (document.getElementById(name) || name.trim() == '') { + return; + } + if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { + return; + } + var button = document.createElement('DIV'); + button.onclick = function () { + tab_change(name); + this.blur(); + statcontentdiv.focus(); + }; + button.id = name; + button.textContent = name; + button.className = 'button'; + //ORDERING ALPHABETICALLY + button.style.order = { Status: 1, MC: 2 }[name] || name.charCodeAt(0); + //END ORDERING + menu.appendChild(button); + SendTabToByond(name); } function removeStatusTab(name) { - if (!document.getElementById(name) || permanent_tabs.includes(name)) { - return; - } - for (var i = verb_tabs.length - 1; i >= 0; --i) { - if (verb_tabs[i] == name) { - verb_tabs.splice(i, 1); - } - } - menu.removeChild(document.getElementById(name)); - TakeTabFromByond(name); - under_menu.style.height = menu.clientHeight + 'px'; + if (!document.getElementById(name) || permanent_tabs.includes(name)) { + return; + } + for (var i = verb_tabs.length - 1; i >= 0; --i) { + if (verb_tabs[i] == name) { + verb_tabs.splice(i, 1); + } + } + menu.removeChild(document.getElementById(name)); + TakeTabFromByond(name); } function sortVerbs() { - verbs.sort(function (a, b) { - var selector = a[0] == b[0] ? 1 : 0; - if (a[selector].toUpperCase() < b[selector].toUpperCase()) { - return 1; - } - else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { - return -1; - } - return 0; - }) -} - -window.onresize = function () { - under_menu.style.height = menu.clientHeight + 'px'; + verbs.sort((a, b) => { + var selector = a[0] == b[0] ? 1 : 0; + if (a[selector].toUpperCase() < b[selector].toUpperCase()) { + return 1; + } else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { + return -1; + } + return 0; + }); } function addPermanentTab(name) { - if (!permanent_tabs.includes(name)) { - permanent_tabs.push(name); - } - createStatusTab(name); + if (!permanent_tabs.includes(name)) { + permanent_tabs.push(name); + } + createStatusTab(name); } function removePermanentTab(name) { - for (var i = permanent_tabs.length - 1; i >= 0; --i) { - if (permanent_tabs[i] == name) { - permanent_tabs.splice(i, 1); - } - } - removeStatusTab(name); + for (var i = permanent_tabs.length - 1; i >= 0; --i) { + if (permanent_tabs[i] == name) { + permanent_tabs.splice(i, 1); + } + } + removeStatusTab(name); } function checkStatusTab() { - for (var i = 0; i < menu.children.length; i++) { - if (!verb_tabs.includes(menu.children[i].id) && !permanent_tabs.includes(menu.children[i].id)) { - menu.removeChild(menu.children[i]); - } - } + for (var i = 0; i < menu.children.length; i++) { + if ( + !verb_tabs.includes(menu.children[i].id) && + !permanent_tabs.includes(menu.children[i].id) + ) { + menu.removeChild(menu.children[i]); + } + } } function remove_verb(v) { - var verb_to_remove = v; // to_remove = [verb:category, verb:name] - for (var i = verbs.length - 1; i >= 0; i--) { - var part_to_remove = verbs[i]; - if (part_to_remove[1] == verb_to_remove[1]) { - verbs.splice(i, 1) - } - } + var verb_to_remove = v; // to_remove = [verb:category, verb:name] + for (var i = verbs.length - 1; i >= 0; i--) { + var part_to_remove = verbs[i]; + if (part_to_remove[1] == verb_to_remove[1]) { + verbs.splice(i, 1); + } + } } function check_verbs() { - for (var v = verb_tabs.length - 1; v >= 0; v--) { - //Aurora snowflake check because somehow we manage to break even ports - if(!verb_tabs[v]){ - v--; - continue; - } - verbs_cat_check(verb_tabs[v]); - } + for (var v = verb_tabs.length - 1; v >= 0; v--) { + verbs_cat_check(verb_tabs[v]); + } } function verbs_cat_check(cat) { - var tabCat = cat; - if (cat.indexOf(".") != -1) { - var splitName = cat.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - tabCat = splitName[1]; - else - tabCat = splitName[0]; - } - var verbs_in_cat = 0; - var verbcat = ""; - if (!verb_tabs.includes(tabCat) && !spell_tabs.includes(tabCat)) { - removeStatusTab(tabCat); - return; - } - for (var v = 0; v < verbs.length; v++) { - var part = verbs[v]; - verbcat = part[0]; - if (verbcat.indexOf(".") != -1) { - var splitName = verbcat.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - verbcat = splitName[1]; - else - verbcat = splitName[0]; - } - if (verbcat != tabCat || verbcat.trim() == "") { - continue; - } - else { - verbs_in_cat = 1; - break; // we only need one - } - } - //More aurora snowflake code to handle spell tabs - var spells_in_cat = 0; - var spellcat = ""; - for(var v = (spells.length - 1); v >= 0; v--) { - var spell = spells[v]; - spellcat = spell[0]; - if(spellcat != tabCat || spellcat.trim() == ""){ - continue; - } - else{ - spells_in_cat = 1; - break; - } + var tabCat = cat; + if (cat.indexOf('.') != -1) { + var splitName = cat.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') tabCat = splitName[1]; + else tabCat = splitName[0]; + } + var verbs_in_cat = 0; + var verbcat = ''; + if (!verb_tabs.includes(tabCat)) { + removeStatusTab(tabCat); + return; + } + for (var v = 0; v < verbs.length; v++) { + var part = verbs[v]; + verbcat = part[0]; + if (verbcat.indexOf('.') != -1) { + var splitName = verbcat.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') verbcat = splitName[1]; + else verbcat = splitName[0]; } - - if (verbs_in_cat != 1 && spells_in_cat != 1) { - removeStatusTab(tabCat); - if (current_tab == tabCat) - tab_change("Status"); - } + if (verbcat != tabCat || verbcat.trim() == '') { + } else { + verbs_in_cat = 1; + break; // we only need one + } + } + if (verbs_in_cat != 1) { + removeStatusTab(tabCat); + if (current_tab == tabCat) tab_change(defaultTab); + } } function findVerbindex(name, verblist) { - for (var i = 0; i < verblist.length; i++) { - var part = verblist[i]; - if (part[1] == name) - return i; - } + for (var i = 0; i < verblist.length; i++) { + var part = verblist[i]; + if (part[1] == name) return i; + } } function wipe_verbs() { - verbs = [["", ""]]; - verb_tabs = []; - checkStatusTab(); // remove all empty verb tabs + verbs = [['', '']]; + verb_tabs = []; + checkStatusTab(); // remove all empty verb tabs } function update_verbs() { - wipe_verbs(); - Byond.sendMessage("Update-Verbs"); + wipe_verbs(); + Byond.sendMessage('Update-Verbs'); } function SendTabsToByond() { - var tabstosend = []; - tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); - for (var i = 0; i < tabstosend.length; i++) { - SendTabToByond(tabstosend[i]); - } + var tabstosend = []; + tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); + for (var i = 0; i < tabstosend.length; i++) { + SendTabToByond(tabstosend[i]); + } } function SendTabToByond(tab) { - Byond.sendMessage("Send-Tabs", {tab: tab}); + Byond.sendMessage('Send-Tabs', { tab: tab }); } //Byond can't have this tab anymore since we're removing it function TakeTabFromByond(tab) { - Byond.sendMessage("Remove-Tabs", {tab: tab}); -} - -function spell_cat_check(cat) { - var spells_in_cat = 0; - var spellcat = ""; - for (var s = 0; s < spells.length; s++) { - var spell = spells[s]; - spellcat = spell[0]; - if (spellcat == cat) { - spells_in_cat++; - } - } - if (spells_in_cat < 1) { - removeStatusTab(cat); - } + Byond.sendMessage('Remove-Tabs', { tab: tab }); } function tab_change(tab) { - if (tab == current_tab) return; - if (document.getElementById(current_tab)) - document.getElementById(current_tab).className = "button"; // disable active on last button - current_tab = tab; - set_byond_tab(tab); - if (document.getElementById(tab)) - document.getElementById(tab).className = "button active"; // make current button active - var spell_tabs_thingy = (spell_tabs.includes(tab)); - var verb_tabs_thingy = (verb_tabs.includes(tab)); - if (tab == "Status") { - draw_status(); - } else if (tab == "MC") { - draw_mc(); - } else if (spell_tabs_thingy) { - draw_spells(tab); - } else if (verb_tabs_thingy) { - draw_verbs(tab); - } else if (tab == "Debug Stat Panel") { - draw_debug(); - } else if (tab == "SDQL2") { - draw_sdql2(); - } else if (tab == turfname) { - draw_listedturf(); - } else { - statcontentdiv.textContext = "Loading..."; - } - Byond.winset(Byond.windowId, { - 'is-visible': true, - }); + if (tab == current_tab) return; + if (document.getElementById(current_tab)) + document.getElementById(current_tab).className = 'button'; // disable active on last button + current_tab = tab; + set_byond_tab(tab); + if (document.getElementById(tab)) + document.getElementById(tab).className = 'button active'; // make current button active + var verb_tabs_thingy = verb_tabs.includes(tab); + statcontentdiv.className = 'statcontent'; + if (tab == 'Status') { + draw_status(); + } else if (tab == 'MC') { + draw_mc(); + } else if (verb_tabs_thingy) { + draw_verbs(tab); + } else if (tab == 'Debug Stat Panel') { + draw_debug(); + } else if (tab == 'Tickets') { + draw_tickets(); + draw_interviews(); + } else if (tab == 'SDQL2') { + draw_sdql2(); + } else if (tab == turfname) { + draw_listedturf(); + } else { + statcontentdiv.textContext = 'Loading...'; + } + Byond.winset(Byond.windowId, { + 'is-visible': true, + }); } function set_byond_tab(tab) { - Byond.sendMessage("Set-Tab", {tab: tab}); + Byond.sendMessage('Set-Tab', { tab: tab }); } function draw_debug() { - statcontentdiv.textContent = ""; - var wipeverbstabs = document.createElement("div"); - var link = document.createElement("a"); - link.onclick = function () { wipe_verbs() }; - link.textContent = "Wipe All Verbs"; - wipeverbstabs.appendChild(link); - document.getElementById("statcontent").appendChild(wipeverbstabs); - var wipeUpdateVerbsTabs = document.createElement("div"); - var updateLink = document.createElement("a"); - updateLink.onclick = function () { update_verbs() }; - updateLink.textContent = "Wipe and Update All Verbs"; - wipeUpdateVerbsTabs.appendChild(updateLink); - document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs); - var text = document.createElement("div"); - text.textContent = "Verb Tabs:"; - document.getElementById("statcontent").appendChild(text); - var table1 = document.createElement("table"); - for (var i = 0; i < verb_tabs.length; i++) { - var part = verb_tabs[i]; - // Hide subgroups except admin subgroups if they are split - if (verb_tabs[i].lastIndexOf(".") != -1) { - var splitName = verb_tabs[i].split("."); - if (split_admin_tabs && splitName[0] === "Admin") - part = splitName[1]; - else - continue; - } - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part; - var a = document.createElement("a"); - a.onclick = function (part) { - return function () { removeStatusTab(part) }; - }(part); - a.textContent = " Delete Tab " + part; - td1.appendChild(a); - tr.appendChild(td1); - table1.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table1); - var header2 = document.createElement("div"); - header2.textContent = "Verbs:"; - document.getElementById("statcontent").appendChild(header2); - var table2 = document.createElement("table"); - for (var v = 0; v < verbs.length; v++) { - var part2 = verbs[v]; - var trr = document.createElement("tr"); - var tdd1 = document.createElement("td"); - tdd1.textContent = part2[0]; - var tdd2 = document.createElement("td"); - tdd2.textContent = part2[1]; - trr.appendChild(tdd1); - trr.appendChild(tdd2); - table2.appendChild(trr); - } - document.getElementById("statcontent").appendChild(table2); - var text3 = document.createElement("div"); - text3.textContent = "Permanent Tabs:"; - document.getElementById("statcontent").appendChild(text3); - var table3 = document.createElement("table"); - for (var i = 0; i < permanent_tabs.length; i++) { - var part3 = permanent_tabs[i]; - var trrr = document.createElement("tr"); - var tddd1 = document.createElement("td"); - tddd1.textContent = part3; - trrr.appendChild(tddd1); - table3.appendChild(trrr); - } - document.getElementById("statcontent").appendChild(table3); - + statcontentdiv.textContent = ''; + var wipeverbstabs = document.createElement('div'); + var link = document.createElement('a'); + link.onclick = () => { + wipe_verbs(); + }; + link.textContent = 'Wipe All Verbs'; + wipeverbstabs.appendChild(link); + document.getElementById('statcontent').appendChild(wipeverbstabs); + var wipeUpdateVerbsTabs = document.createElement('div'); + var updateLink = document.createElement('a'); + updateLink.onclick = () => { + update_verbs(); + }; + updateLink.textContent = 'Wipe and Update All Verbs'; + wipeUpdateVerbsTabs.appendChild(updateLink); + document.getElementById('statcontent').appendChild(wipeUpdateVerbsTabs); + var text = document.createElement('div'); + text.textContent = 'Verb Tabs:'; + document.getElementById('statcontent').appendChild(text); + var table1 = document.createElement('table'); + for (var i = 0; i < verb_tabs.length; i++) { + var part = verb_tabs[i]; + // Hide subgroups except admin subgroups if they are split + if (verb_tabs[i].lastIndexOf('.') != -1) { + var splitName = verb_tabs[i].split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') part = splitName[1]; + else continue; + } + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = part; + var a = document.createElement('a'); + a.onclick = ((part) => () => { + removeStatusTab(part); + })(part); + a.textContent = ' Delete Tab ' + part; + td1.appendChild(a); + tr.appendChild(td1); + table1.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table1); + var header2 = document.createElement('div'); + header2.textContent = 'Verbs:'; + document.getElementById('statcontent').appendChild(header2); + var table2 = document.createElement('table'); + for (var v = 0; v < verbs.length; v++) { + var part2 = verbs[v]; + var trr = document.createElement('tr'); + var tdd1 = document.createElement('td'); + tdd1.textContent = part2[0]; + var tdd2 = document.createElement('td'); + tdd2.textContent = part2[1]; + trr.appendChild(tdd1); + trr.appendChild(tdd2); + table2.appendChild(trr); + } + document.getElementById('statcontent').appendChild(table2); + var text3 = document.createElement('div'); + text3.textContent = 'Permanent Tabs:'; + document.getElementById('statcontent').appendChild(text3); + var table3 = document.createElement('table'); + for (var i = 0; i < permanent_tabs.length; i++) { + var part3 = permanent_tabs[i]; + var trrr = document.createElement('tr'); + var tddd1 = document.createElement('td'); + tddd1.textContent = part3; + trrr.appendChild(tddd1); + table3.appendChild(trrr); + } + document.getElementById('statcontent').appendChild(table3); } + function draw_status() { - if (!document.getElementById("Status")) { - createStatusTab("Status"); - current_tab = "Status"; - } - statcontentdiv.textContent = ''; - for (var i = 0; i < status_tab_parts.length; i++) { - if (status_tab_parts[i].trim() == "") { - document.getElementById("statcontent").appendChild(document.createElement("br")); - } else { - var div = document.createElement("div"); - div.textContent = status_tab_parts[i]; - document.getElementById("statcontent").appendChild(div); - } - } - if (verb_tabs.length == 0 || !verbs) { - Byond.command("Fix-Stat-Panel"); - } + if (!document.getElementById('Status')) { + createStatusTab('Status'); + current_tab = 'Status'; + } + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + for (var i = 0; i < status_tab_parts.length; i++) { + var part = status_tab_parts[i]; + if (!Array.isArray(part)) { + var div = document.createElement('div'); + if (part.trim() == '') { + table.appendChild(document.createElement('br')); + } else { + div.textContent = part; + table.appendChild(div); + } + } else { + var div; + if (part[0].trim() == 'same_line') { + var a = document.createElement('a'); + a.href = 'byond://?' + part[2]; + a.textContent = part[1]; + div.appendChild(a); + } else { + div = document.createElement('div'); + if (part[0].trim() == '') { + table.appendChild(document.createElement('br')); + } else { + div.textContent = part[0]; + if (part[2]) { + var a = document.createElement('a'); + a.href = 'byond://?' + part[2]; + a.textContent = part[1]; + div.appendChild(a); + } + table.appendChild(div); + } + } + } + } + document.getElementById('statcontent').appendChild(table); + if (verb_tabs.length == 0 || !verbs) { + Byond.command('Fix-Stat-Panel'); + } } function draw_mc() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < mc_tab_parts.length; i++) { - var part = mc_tab_parts[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href="byond://?_src_=vars;Vars=" + part[2]; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + statcontentdiv.className = 'mcstatcontent'; + var table = document.createElement('table'); + for (var i = 0; i < mc_tab_parts.length; i++) { + var part = mc_tab_parts[i]; + var tr = document.createElement('tr'); + var td0 = document.createElement('td'); + td0.className = 'monospace'; + td0.textContent = part[0]; + var td1 = document.createElement('td'); + td1.textContent = part[1]; + var td2 = document.createElement('td'); + if (part[3]) { + var a = document.createElement('a'); + a.href = + 'byond://?_src_=vars;admin_token=' + href_token + ';Vars=' + part[3]; + a.textContent = part[2]; + td2.appendChild(a); + } else { + td2.textContent = part[2]; + } + tr.appendChild(td0); + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } + +function remove_tickets() { + if (tickets) { + tickets = []; + removePermanentTab('Tickets'); + if (current_tab == 'Tickets') tab_change(defaultTab); + } + checkStatusTab(); +} + function remove_sdql2() { - if (sdql2) { - sdql2 = []; - removePermanentTab("SDQL2"); - if (current_tab == "SDQL2") - tab_change("Status"); - } - checkStatusTab(); + if (sdql2) { + sdql2 = []; + removePermanentTab('SDQL2'); + if (current_tab == 'SDQL2') tab_change(defaultTab); + } + checkStatusTab(); } + +function remove_interviews() { + if (tickets) { + tickets = []; + } + checkStatusTab(); +} + function iconError(e) { - if(current_tab != turfname) { - return; - } - setTimeout(function () { - var node = e.target; - var current_attempts = Number(node.getAttribute("data-attempts")) || 0 - if (current_attempts > imageRetryLimit) { - return; - } - var src = node.src; - node.src = null; - node.src = src + '#' + current_attempts; - node.setAttribute("data-attempts", current_attempts + 1) - draw_listedturf(); - }, imageRetryDelay); + if (current_tab != turfname) { + return; + } + setTimeout(() => { + var node = e.target; + var current_attempts = Number(node.getAttribute('data-attempts')) || 0; + if (current_attempts > imageRetryLimit) { + return; + } + var src = node.src; + node.src = null; + node.src = src + '#' + current_attempts; + node.setAttribute('data-attempts', current_attempts + 1); + draw_listedturf(); + }, imageRetryDelay); } function draw_listedturf() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < turfcontents.length; i++) { - var part = turfcontents[i]; - var clickfunc = (function (part) { - // The outer function is used to close over a fresh "part" variable, - // rather than every onmousedown getting the "part" of the last entry. - return function (e) { - e.preventDefault(); - clickcatcher = "byond://?src=" + part[1]; - switch (e.button) { - case 1: - clickcatcher += ";statpanel_item_click=middle"; - break; - case 2: - clickcatcher += ";statpanel_item_click=right"; - break; - default: - clickcatcher += ";statpanel_item_click=left"; - } - if (e.shiftKey) { - clickcatcher += ";statpanel_item_shiftclick=1"; - } - if (e.ctrlKey) { - clickcatcher += ";statpanel_item_ctrlclick=1"; - } - if (e.altKey) { - clickcatcher += ";statpanel_item_altclick=1"; - } - window.location.href = clickcatcher; - }; - })(part); - if (storedimages[part[1]] == null && part[2]) { - var img = document.createElement("img"); - img.src = part[2]; - img.id = part[1]; - storedimages[part[1]] = part[2]; - img.onerror = iconError; - img.onmousedown = clickfunc; - table.appendChild(img); - } else { - var img = document.createElement("img"); - img.onerror = iconError; - img.onmousedown = clickfunc; - img.src = storedimages[part[1]]; - img.id = part[1]; - table.appendChild(img); - } - var b = document.createElement("div"); - var clickcatcher = ""; - b.className = "link"; - b.onmousedown = clickfunc; - b.textContent = part[0]; - table.appendChild(b); - table.appendChild(document.createElement("br")); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + for (var i = 0; i < turfcontents.length; i++) { + var part = turfcontents[i]; + var clickfunc = ((part) => { + // The outer function is used to close over a fresh "part" variable, + // rather than every onmousedown getting the "part" of the last entry. + return (e) => { + e.preventDefault(); + clickcatcher = 'byond://?src=' + part[1]; + switch (e.button) { + case 1: + clickcatcher += ';statpanel_item_click=middle'; + break; + case 2: + clickcatcher += ';statpanel_item_click=right'; + break; + default: + clickcatcher += ';statpanel_item_click=left'; + } + if (e.shiftKey) { + clickcatcher += ';statpanel_item_shiftclick=1'; + } + if (e.ctrlKey) { + clickcatcher += ';statpanel_item_ctrlclick=1'; + } + if (e.altKey) { + clickcatcher += ';statpanel_item_altclick=1'; + } + window.location.href = clickcatcher; + }; + })(part); + if (storedimages[part[1]] == null && part[2]) { + var img = document.createElement('img'); + img.src = part[2]; + img.id = part[1]; + storedimages[part[1]] = part[2]; + img.onerror = iconError; + img.onmousedown = clickfunc; + table.appendChild(img); + } else { + var img = document.createElement('img'); + img.onerror = iconError; + img.onmousedown = clickfunc; + img.src = storedimages[part[1]]; + img.id = part[1]; + table.appendChild(img); + } + var b = document.createElement('div'); + var clickcatcher = ''; + b.className = 'link'; + b.onmousedown = clickfunc; + b.textContent = part[0]; + table.appendChild(b); + table.appendChild(document.createElement('br')); + } + document.getElementById('statcontent').appendChild(table); } function remove_listedturf() { - removePermanentTab(turfname); - checkStatusTab(); - if (current_tab == turfname) { - tab_change("Status"); - } + removePermanentTab(turfname); + checkStatusTab(); + if (current_tab == turfname) { + tab_change(defaultTab); + } } function remove_mc() { - removePermanentTab("MC"); - if (current_tab == "MC") { - tab_change("Status"); - } -}; + removePermanentTab('MC'); + if (current_tab == 'MC') { + tab_change(defaultTab); + } +} function draw_sdql2() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < sdql2.length; i++) { - var part = sdql2[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href="byond://?src=" + part[2] + ";statpanel_item_click=left"; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + for (var i = 0; i < sdql2.length; i++) { + var part = sdql2[i]; + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = part[0]; + var td2 = document.createElement('td'); + if (part[2]) { + var a = document.createElement('a'); + a.href = 'byond://?src=' + part[2] + ';statpanel_item_click=left'; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } function draw_tickets() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - if (!tickets) { - return; - } - for (var i = 0; i < tickets.length; i++) { - var part = tickets[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href="byond://?_src_=holder;ahelp=" + part[2] + ";ahelp_action=ticket;statpanel_item_click=left;action=ticket"; - a.textContent = part[1]; - td2.appendChild(a); - } else if (part[3]) { - var a = document.createElement("a"); - a.href="byond://?src=" + part[3] + ";statpanel_item_click=left"; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + if (!tickets) { + return; + } + for (var i = 0; i < tickets.length; i++) { + var part = tickets[i]; + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = part[0]; + var td2 = document.createElement('td'); + if (part[2]) { + var a = document.createElement('a'); + a.href = + 'byond://?_src_=holder;admin_token=' + + href_token + + ';ahelp=' + + part[2] + + ';ahelp_action=ticket;statpanel_item_click=left;action=ticket'; + a.textContent = part[1]; + td2.appendChild(a); + } else if (part[3]) { + var a = document.createElement('a'); + a.href = 'byond://?src=' + part[3] + ';statpanel_item_click=left'; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } function draw_interviews() { - var body = document.createElement("div"); - var header = document.createElement("h3"); - header.textContent = "Interviews"; - body.appendChild(header); - var manDiv = document.createElement("div"); - manDiv.className = "interview_panel_controls" - var manLink = document.createElement("a"); - manLink.textContent = "Open Interview Manager Panel"; - manLink.href="byond://?_src_=holder;interview_man=1;statpanel_item_click=left"; - manDiv.appendChild(manLink); - body.appendChild(manDiv); + var body = document.createElement('div'); + var header = document.createElement('h3'); + header.textContent = 'Interviews'; + body.appendChild(header); + var manDiv = document.createElement('div'); + manDiv.className = 'interview_panel_controls'; + var manLink = document.createElement('a'); + manLink.textContent = 'Open Interview Manager Panel'; + manLink.href = + 'byond://?_src_=holder;admin_token=' + + href_token + + ';interview_man=1;statpanel_item_click=left'; + manDiv.appendChild(manLink); + body.appendChild(manDiv); - // List interview stats - var statsDiv = document.createElement("table"); - statsDiv.className = "interview_panel_stats"; - for (var key in interviewManager.status) { - var d = document.createElement("div"); - var tr = document.createElement("tr"); - var stat_name = document.createElement("td"); - var stat_text = document.createElement("td"); - stat_name.textContent = key; - stat_text.textContent = interviewManager.status[key]; - tr.appendChild(stat_name); - tr.appendChild(stat_text); - statsDiv.appendChild(tr); - } - body.appendChild(statsDiv); - document.getElementById("statcontent").appendChild(body); + // List interview stats + var statsDiv = document.createElement('table'); + statsDiv.className = 'interview_panel_stats'; + for (var key in interviewManager.status) { + var d = document.createElement('div'); + var tr = document.createElement('tr'); + var stat_name = document.createElement('td'); + var stat_text = document.createElement('td'); + stat_name.textContent = key; + stat_text.textContent = interviewManager.status[key]; + tr.appendChild(stat_name); + tr.appendChild(stat_text); + statsDiv.appendChild(tr); + } + body.appendChild(statsDiv); + document.getElementById('statcontent').appendChild(body); - // List interviews if any are open - var table = document.createElement("table"); - table.className = "interview_panel_table"; - if (!interviewManager) { - return; - } - for (var i = 0; i < interviewManager.interviews.length; i++) { - var part = interviewManager.interviews[i]; - var tr = document.createElement("tr"); - var td = document.createElement("td"); - var a = document.createElement("a"); - a.textContent = part["status"]; - a.href="byond://?_src_=holder;interview=" + part["ref"] + ";statpanel_item_click=left"; - td.appendChild(a); - tr.appendChild(td); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); -} - -function draw_spells(cat) { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < spells.length; i++) { - var part = spells[i]; - if (part[0] != cat) continue; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[1]; - var td2 = document.createElement("td"); - if (part[3]) { - var a = document.createElement("a"); - a.href="byond://?src=" + part[3] + ";statpanel_item_click=left"; - a.textContent = part[2]; - td2.appendChild(a); - } else { - td2.textContent = part[2]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + // List interviews if any are open + var table = document.createElement('table'); + table.className = 'interview_panel_table'; + if (!interviewManager) { + return; + } + for (var i = 0; i < interviewManager.interviews.length; i++) { + var part = interviewManager.interviews[i]; + var tr = document.createElement('tr'); + var td = document.createElement('td'); + var a = document.createElement('a'); + a.textContent = part['status']; + a.href = + 'byond://?_src_=holder;admin_token=' + + href_token + + ';interview=' + + part['ref'] + + ';statpanel_item_click=left'; + td.appendChild(a); + tr.appendChild(td); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } function make_verb_onclick(command) { - return function () { - run_after_focus(function () { - Byond.command(command); - }); - }; + return () => { + run_after_focus(() => { + Byond.command(command); + }); + }; } function draw_verbs(cat) { - statcontentdiv.textContent = ""; - var table = document.createElement("div"); - var additions = {}; // additional sub-categories to be rendered - table.className = "grid-container"; - sortVerbs(); - if (split_admin_tabs && cat.lastIndexOf(".") != -1) { - var splitName = cat.split("."); - if (splitName[0] === "Admin") - cat = splitName[1]; - } - verbs.reverse(); // sort verbs backwards before we draw - for (var i = 0; i < verbs.length; ++i) { - var part = verbs[i]; - var name = part[0]; - if (split_admin_tabs && name.lastIndexOf(".") != -1) { - var splitName = name.split("."); - if (splitName[0] === "Admin") - name = splitName[1]; - } - var command = part[1]; + statcontentdiv.textContent = ''; + var table = document.createElement('div'); + var additions = {}; // additional sub-categories to be rendered + table.className = 'grid-container'; + sortVerbs(); + if (split_admin_tabs && cat.lastIndexOf('.') != -1) { + var splitName = cat.split('.'); + if (splitName[0] === 'Admin') cat = splitName[1]; + } + verbs.reverse(); // sort verbs backwards before we draw + for (var i = 0; i < verbs.length; ++i) { + var part = verbs[i]; + var name = part[0]; + if (split_admin_tabs && name.lastIndexOf('.') != -1) { + var splitName = name.split('.'); + if (splitName[0] === 'Admin') name = splitName[1]; + } + var command = part[1]; - if (command && name.lastIndexOf(cat, 0) != -1 && (name.length == cat.length || name.charAt(cat.length) == ".")) { - var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null; - if (subCat && !additions[subCat]) { - var newTable = document.createElement("div"); - newTable.className = "grid-container"; - additions[subCat] = newTable; - } + if ( + command && + name.lastIndexOf(cat, 0) != -1 && + (name.length == cat.length || name.charAt(cat.length) == '.') + ) { + var subCat = name.lastIndexOf('.') != -1 ? name.split('.')[1] : null; + if (subCat && !additions[subCat]) { + var newTable = document.createElement('div'); + newTable.className = 'grid-container'; + additions[subCat] = newTable; + } - var a = document.createElement("a"); - a.href = "#"; - a.onclick = make_verb_onclick(command.replace(/\s/g, "-")); - a.className = "grid-item"; - var t = document.createElement("span"); - t.textContent = command; - t.className = "grid-item-text"; - a.appendChild(t); - (subCat ? additions[subCat] : table).appendChild(a); - } - } + var a = document.createElement('a'); + a.href = '#'; + a.onclick = make_verb_onclick(command.replace(/\s/g, '-')); + a.className = 'grid-item'; + var t = document.createElement('span'); + t.textContent = command; + t.className = 'grid-item-text'; + a.appendChild(t); + (subCat ? additions[subCat] : table).appendChild(a); + } + } - // Append base table to view - var content = document.getElementById("statcontent"); - content.appendChild(table); + // Append base table to view + var content = document.getElementById('statcontent'); + content.appendChild(table); - // Append additional sub-categories if relevant - for (var cat in additions) { - if (additions.hasOwnProperty(cat)) { - // do addition here - var header = document.createElement("h3"); - header.textContent = cat; - content.appendChild(header); - content.appendChild(additions[cat]); - } - } + // Append additional sub-categories if relevant + for (var cat in additions) { + if (Object.hasOwn(additions, cat)) { + // do addition here + var header = document.createElement('h3'); + header.textContent = cat; + content.appendChild(header); + content.appendChild(additions[cat]); + } + } } function set_theme(which) { - if (which == "light") { - document.body.className = ""; - document.documentElement.className = "light"; - set_style_sheet("browserOutput_white"); - } else if (which == "dark") { - document.body.className = "dark"; - document.documentElement.className = "dark"; - set_style_sheet("browserOutput"); - } + if (which == 'light') { + document.body.className = ''; + document.documentElement.className = 'light'; + } else if (which == 'dark') { + document.body.className = 'dark'; + document.documentElement.className = 'dark'; + } } -function set_style_sheet(sheet) { - if (document.getElementById("goonStyle")) { - var currentSheet = document.getElementById("goonStyle"); - currentSheet.parentElement.removeChild(currentSheet); - } - var head = document.getElementsByTagName('head')[0]; - var sheetElement = document.createElement("link"); - sheetElement.id = "goonStyle"; - sheetElement.rel = "stylesheet"; - sheetElement.type = "text/css"; - sheetElement.href = sheet + ".css"; - sheetElement.media = 'all'; - head.appendChild(sheetElement); +function set_font_size(size) { + document.body.style.setProperty('font-size', size); +} + +function set_tabs_style(style) { + if (style == 'default') { + menu.classList.add('menu-wrap'); + menu.classList.remove('tabs-classic'); + } else if (style == 'classic') { + menu.classList.add('menu-wrap'); + menu.classList.add('tabs-classic'); + } else if (style == 'scrollable') { + menu.classList.remove('menu-wrap'); + menu.classList.remove('tabs-classic'); + } } function restoreFocus() { - run_after_focus(function () { - Byond.winset('map', { - focus: true, - }); - }); + run_after_focus(() => { + Byond.winset('map', { + focus: true, + }); + }); } function getCookie(cname) { - var name = cname + '='; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length, c.length)); - } - } - return ''; + var name = cname + '='; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1); + if (c.indexOf(name) === 0) { + return decoder(c.substring(name.length, c.length)); + } + } + return ''; } function add_verb_list(payload) { - var to_add = payload; // list of a list with category and verb inside it - to_add.sort(); // sort what we're adding - for (var i = 0; i < to_add.length; i++) { - var part = to_add[i]; - if (!part[0]) - continue; - var category = part[0]; - if (category.indexOf(".") != -1) { - var splitName = category.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - category = splitName[1]; - else - category = splitName[0]; - } - if (findVerbindex(part[1], verbs)) - continue; - if (verb_tabs.includes(category)) { - verbs.push(part); - if (current_tab == category) { - draw_verbs(category); // redraw if we added a verb to the tab we're currently in - } - } else if (category) { - verb_tabs.push(category); - verbs.push(part); - createStatusTab(category); - } - } -}; - -function init_spells() { - var cat = ""; - for (var i = 0; i < spell_tabs.length; i++) { - cat = spell_tabs[i]; - if (cat.length > 0) { - verb_tabs.push(cat); - createStatusTab(cat); - } - } + var to_add = payload; // list of a list with category and verb inside it + to_add.sort(); // sort what we're adding + for (var i = 0; i < to_add.length; i++) { + var part = to_add[i]; + if (!part[0]) continue; + var category = part[0]; + if (category.indexOf('.') != -1) { + var splitName = category.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') category = splitName[1]; + else category = splitName[0]; + } + if (findVerbindex(part[1], verbs)) continue; + if (verb_tabs.includes(category)) { + verbs.push(part); + if (current_tab == category) { + draw_verbs(category); // redraw if we added a verb to the tab we're currently in + } + } else if (category) { + verb_tabs.push(category); + verbs.push(part); + createStatusTab(category); + } + } } -document.addEventListener("mouseup", restoreFocus); -document.addEventListener("keyup", restoreFocus); +document.addEventListener('mouseup', restoreFocus); +document.addEventListener('keyup', restoreFocus); if (!current_tab) { - addPermanentTab("Status"); - tab_change("Status"); + addPermanentTab(defaultTab); + tab_change(defaultTab); } -window.onload = function () { - Byond.sendMessage("Update-Verbs"); +window.onload = () => { + Byond.sendMessage('Update-Verbs'); }; -Byond.subscribeTo('update_spells', function (payload) { - spell_tabs = payload.spell_tabs; - var do_update = false; - if (spell_tabs.includes(current_tab)) { - do_update = true; - } - init_spells(); - if (payload.actions) { - spells = payload.actions; - if (do_update) { - draw_spells(current_tab); - } - } else { - remove_spells(); - } -}); - -Byond.subscribeTo('remove_verb_list', function (v) { - var to_remove = v; - for (var i = 0; i < to_remove.length; i++) { - remove_verb(to_remove[i]); - } - check_verbs(); - sortVerbs(); - if (verb_tabs.includes(current_tab)) - draw_verbs(current_tab); +Byond.subscribeTo('remove_verb_list', (v) => { + var to_remove = v; + for (var i = 0; i < to_remove.length; i++) { + remove_verb(to_remove[i]); + } + check_verbs(); + sortVerbs(); + if (verb_tabs.includes(current_tab)) draw_verbs(current_tab); }); // passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list // example (IC, Say) -Byond.subscribeTo('init_verbs', function (payload) { - wipe_verbs(); // remove all verb categories so we can replace them - checkStatusTab(); // remove all status tabs - verb_tabs = payload.panel_tabs; - verb_tabs.sort(); // sort it - var do_update = false; - var cat = ""; - for (var i = 0; i < verb_tabs.length; i++) { - cat = verb_tabs[i]; - createStatusTab(cat); // create a category if the verb doesn't exist yet - } - if (verb_tabs.includes(current_tab)) { - do_update = true; - } - if (payload.verblist) { - add_verb_list(payload.verblist); - sortVerbs(); // sort them - if (do_update) { - draw_verbs(current_tab); - } - } - SendTabsToByond(); +Byond.subscribeTo('init_verbs', (payload) => { + wipe_verbs(); // remove all verb categories so we can replace them + checkStatusTab(); // remove all status tabs + verb_tabs = payload.panel_tabs; + verb_tabs.sort(); // sort it + var do_update = false; + var cat = ''; + for (var i = 0; i < verb_tabs.length; i++) { + cat = verb_tabs[i]; + createStatusTab(cat); // create a category if the verb doesn't exist yet + } + if (verb_tabs.includes(current_tab)) { + do_update = true; + } + if (payload.verblist) { + add_verb_list(payload.verblist); + sortVerbs(); // sort them + if (do_update) { + draw_verbs(current_tab); + } + } + SendTabsToByond(); }); -Byond.subscribeTo('update_stat', function (payload) { - status_tab_parts = [payload.ping_str]; - var parsed = payload.global_data; +Byond.subscribeTo('update_stat', (payload) => { + status_tab_parts = []; - for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]); + var parsed = payload.global_data; - parsed = payload.other_str; + for (var i = 0; i < parsed.length; i++) + if (parsed[i] != null) status_tab_parts.push(parsed[i]); - for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]); + parsed = payload.other_str; - if (current_tab == "Status") { - draw_status(); - } else if (current_tab == "Debug Stat Panel") { - draw_debug(); - } + for (var i = 0; i < parsed.length; i++) + if (parsed[i] != null) status_tab_parts.push(parsed[i]); + + if (current_tab == 'Status') { + draw_status(); + } else if (current_tab == 'Debug Stat Panel') { + draw_debug(); + } }); -Byond.subscribeTo('update_mc', function (payload) { - mc_tab_parts = payload.mc_data; - mc_tab_parts.splice(0, 0, ["Location:", payload.coord_entry]); +Byond.subscribeTo('update_mc', (payload) => { + mc_tab_parts = payload.mc_data; + mc_tab_parts.splice(0, 0, ['', 'Location:', payload.coord_entry]); - if (!verb_tabs.includes("MC")) { - verb_tabs.push("MC"); - } + if (!verb_tabs.includes('MC')) { + verb_tabs.push('MC'); + } - createStatusTab("MC"); + createStatusTab('MC'); - if (current_tab == "MC") { - draw_mc(); - } + if (current_tab == 'MC') { + draw_mc(); + } }); -Byond.subscribeTo('remove_spells', function () { - for (var s = 0; s < spell_tabs.length; s++) { - removeStatusTab(spell_tabs[s]); - } +Byond.subscribeTo('create_debug', () => { + if (!document.getElementById('Debug Stat Panel')) { + addPermanentTab('Debug Stat Panel'); + } else { + removePermanentTab('Debug Stat Panel'); + } }); -Byond.subscribeTo('init_spells', function () { - var cat = ""; - for (var i = 0; i < spell_tabs.length; i++) { - cat = spell_tabs[i]; - if (cat.length > 0) { - verb_tabs.push(cat); - createStatusTab(cat); - } - } +Byond.subscribeTo('create_listedturf', (TN) => { + remove_listedturf(); // remove the last one if we had one + turfname = TN; + addPermanentTab(turfname); + tab_change(turfname); }); -Byond.subscribeTo('check_spells', function () { - for (var v = 0; v < spell_tabs.length; v++) { - spell_cat_check(spell_tabs[v]); - } +Byond.subscribeTo('remove_admin_tabs', () => { + href_token = null; + remove_mc(); + remove_tickets(); + remove_sdql2(); + remove_interviews(); }); -Byond.subscribeTo('create_debug', function () { - if (!document.getElementById("Debug Stat Panel")) { - addPermanentTab("Debug Stat Panel"); - } else { - removePermanentTab("Debug Stat Panel"); - } +Byond.subscribeTo('update_listedturf', (TC) => { + turfcontents = TC; + if (current_tab == turfname) { + draw_listedturf(); + } }); -Byond.subscribeTo('create_listedturf', function (TN) { - remove_listedturf(); // remove the last one if we had one - turfname = TN; - addPermanentTab(turfname); - tab_change(turfname); +Byond.subscribeTo('update_interviews', (I) => { + interviewManager = I; + if (current_tab == 'Tickets') { + draw_interviews(); + } }); -Byond.subscribeTo('remove_admin_tabs', function () { - remove_mc(); - remove_sdql2(); +Byond.subscribeTo('update_split_admin_tabs', (status) => { + status = status == true; + + if (split_admin_tabs !== status) { + if (split_admin_tabs === true) { + removeStatusTab('Events'); + removeStatusTab('Fun'); + removeStatusTab('Game'); + } + update_verbs(); + } + split_admin_tabs = status; }); -Byond.subscribeTo('update_listedturf', function (TC) { - turfcontents = TC; - if (current_tab == turfname) { - draw_listedturf(); - } +Byond.subscribeTo('add_admin_tabs', (ht) => { + href_token = ht; + addPermanentTab('MC'); + addPermanentTab('Tickets'); }); -Byond.subscribeTo('update_split_admin_tabs', function (status) { - status = (status == true); - - if (split_admin_tabs !== status) { - if (split_admin_tabs === true) { - removeStatusTab("Events"); - removeStatusTab("Fun"); - removeStatusTab("Game"); - } - update_verbs(); - } - split_admin_tabs = status; +Byond.subscribeTo('update_sdql2', (S) => { + sdql2 = S; + if (sdql2.length > 0 && !verb_tabs.includes('SDQL2')) { + verb_tabs.push('SDQL2'); + addPermanentTab('SDQL2'); + } + if (current_tab == 'SDQL2') { + draw_sdql2(); + } }); -Byond.subscribeTo('add_admin_tabs', function () { - addPermanentTab("MC"); +Byond.subscribeTo('update_tickets', (T) => { + tickets = T; + if (!verb_tabs.includes('Tickets')) { + verb_tabs.push('Tickets'); + addPermanentTab('Tickets'); + } + if (current_tab == 'Tickets') { + draw_tickets(); + } }); -Byond.subscribeTo('update_sdql2', function (S) { - sdql2 = S; - if (sdql2.length > 0 && !verb_tabs.includes("SDQL2")) { - verb_tabs.push("SDQL2"); - addPermanentTab("SDQL2"); - } - if (current_tab == "SDQL2") { - draw_sdql2(); - } -}); Byond.subscribeTo('remove_listedturf', remove_listedturf); Byond.subscribeTo('remove_sdql2', remove_sdql2); diff --git a/nano/TemplatesGuide.txt b/nano/TemplatesGuide.txt deleted file mode 100644 index cbfb9241771..00000000000 --- a/nano/TemplatesGuide.txt +++ /dev/null @@ -1,10 +0,0 @@ --------------------------------- -Nano UI Template Guide --------------------------------- - -Nano UI uses templates, which are comprised of HTML and a markup syntax. The markup allows you -to easily add conditionals (if statements), loops (for loops) and custom formatting (using helpers). - -Templates are stored in the /nano/templates folder and the file extension is .tmpl. - -This guide is being replaced with a wiki entry, found here: https://bay.ss13.me/en/Guides/coderbus/nanoui diff --git a/nano/To BYOND Cache.bat b/nano/To BYOND Cache.bat deleted file mode 100644 index 486b8d1beaa..00000000000 --- a/nano/To BYOND Cache.bat +++ /dev/null @@ -1,4 +0,0 @@ -copy css\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy images\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy js\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy templates\* "%USERPROFILE%\Documents\BYOND\cache" /y diff --git a/nano/css/icons.css b/nano/css/icons.css deleted file mode 100644 index cb2fd42a250..00000000000 --- a/nano/css/icons.css +++ /dev/null @@ -1,315 +0,0 @@ -/* Icons -----------------------------------*/ - -.icon24 -{ - width: 24px; - height: 24px; -} - -.icon24.uiStatusGood -{ - background: url(uiIcons24.png) 0 0 no-repeat; -} - -.icon24.uiStatusAverage -{ - background: url(uiIcons24.png) 0 -24px no-repeat; -} - -.icon24.uiStatusBad -{ - background: url(uiIcons24.png) 0 -48px no-repeat; -} - -/* states and images */ -.uiIcon16 { - float: left; - width: 16px; - height: 16px; - margin: 2px 2px 0 2px; - background-image: url(uiIcons16.png); -} - -.uiLinkPendingIcon { - display: none; - float: left; - width: 16px; - height: 16px; - margin: 2px 2px 0 2px; - background-image: url(uiLinkPendingIcon.gif); -} - -.linkPending .uiIcon16 { - display: none; -} - -.linkPending .uiLinkPendingIcon { - display: block; -} - -/* positioning */ -.uiIcon16.icon-blank { background-position: 16px 16px; } -.uiIcon16.icon-carat-1-n { background-position: 0 0; } -.uiIcon16.icon-carat-1-ne { background-position: -16px 0; } -.uiIcon16.icon-carat-1-e { background-position: -32px 0; } -.uiIcon16.icon-carat-1-se { background-position: -48px 0; } -.uiIcon16.icon-carat-1-s { background-position: -64px 0; } -.uiIcon16.icon-carat-1-sw { background-position: -80px 0; } -.uiIcon16.icon-carat-1-w { background-position: -96px 0; } -.uiIcon16.icon-carat-1-nw { background-position: -112px 0; } -.uiIcon16.icon-carat-2-n-s { background-position: -128px 0; } -.uiIcon16.icon-carat-2-e-w { background-position: -144px 0; } -.uiIcon16.icon-triangle-1-n { background-position: 0 -16px; } -.uiIcon16.icon-triangle-1-ne { background-position: -16px -16px; } -.uiIcon16.icon-triangle-1-e { background-position: -32px -16px; } -.uiIcon16.icon-triangle-1-se { background-position: -48px -16px; } -.uiIcon16.icon-triangle-1-s { background-position: -64px -16px; } -.uiIcon16.icon-triangle-1-sw { background-position: -80px -16px; } -.uiIcon16.icon-triangle-1-w { background-position: -96px -16px; } -.uiIcon16.icon-triangle-1-nw { background-position: -112px -16px; } -.uiIcon16.icon-triangle-2-n-s { background-position: -128px -16px; } -.uiIcon16.icon-triangle-2-e-w { background-position: -144px -16px; } -.uiIcon16.icon-arrow-1-n { background-position: 0 -32px; } -.uiIcon16.icon-arrow-1-ne { background-position: -16px -32px; } -.uiIcon16.icon-arrow-1-e { background-position: -32px -32px; } -.uiIcon16.icon-arrow-1-se { background-position: -48px -32px; } -.uiIcon16.icon-arrow-1-s { background-position: -64px -32px; } -.uiIcon16.icon-arrow-1-sw { background-position: -80px -32px; } -.uiIcon16.icon-arrow-1-w { background-position: -96px -32px; } -.uiIcon16.icon-arrow-1-nw { background-position: -112px -32px; } -.uiIcon16.icon-arrow-2-n-s { background-position: -128px -32px; } -.uiIcon16.icon-arrow-2-ne-sw { background-position: -144px -32px; } -.uiIcon16.icon-arrow-2-e-w { background-position: -160px -32px; } -.uiIcon16.icon-arrow-2-se-nw { background-position: -176px -32px; } -.uiIcon16.icon-arrowstop-1-n { background-position: -192px -32px; } -.uiIcon16.icon-arrowstop-1-e { background-position: -208px -32px; } -.uiIcon16.icon-arrowstop-1-s { background-position: -224px -32px; } -.uiIcon16.icon-arrowstop-1-w { background-position: -240px -32px; } -.uiIcon16.icon-arrowthick-1-n { background-position: 0 -48px; } -.uiIcon16.icon-arrowthick-1-ne { background-position: -16px -48px; } -.uiIcon16.icon-arrowthick-1-e { background-position: -32px -48px; } -.uiIcon16.icon-arrowthick-1-se { background-position: -48px -48px; } -.uiIcon16.icon-arrowthick-1-s { background-position: -64px -48px; } -.uiIcon16.icon-arrowthick-1-sw { background-position: -80px -48px; } -.uiIcon16.icon-arrowthick-1-w { background-position: -96px -48px; } -.uiIcon16.icon-arrowthick-1-nw { background-position: -112px -48px; } -.uiIcon16.icon-arrowthick-2-n-s { background-position: -128px -48px; } -.uiIcon16.icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.uiIcon16.icon-arrowthick-2-e-w { background-position: -160px -48px; } -.uiIcon16.icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.uiIcon16.icon-arrowthickstop-1-n { background-position: -192px -48px; } -.uiIcon16.icon-arrowthickstop-1-e { background-position: -208px -48px; } -.uiIcon16.icon-arrowthickstop-1-s { background-position: -224px -48px; } -.uiIcon16.icon-arrowthickstop-1-w { background-position: -240px -48px; } -.uiIcon16.icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.uiIcon16.icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.uiIcon16.icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.uiIcon16.icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.uiIcon16.icon-arrowreturn-1-w { background-position: -64px -64px; } -.uiIcon16.icon-arrowreturn-1-n { background-position: -80px -64px; } -.uiIcon16.icon-arrowreturn-1-e { background-position: -96px -64px; } -.uiIcon16.icon-arrowreturn-1-s { background-position: -112px -64px; } -.uiIcon16.icon-arrowrefresh-1-w { background-position: -128px -64px; } -.uiIcon16.icon-arrowrefresh-1-n { background-position: -144px -64px; } -.uiIcon16.icon-arrowrefresh-1-e { background-position: -160px -64px; } -.uiIcon16.icon-arrowrefresh-1-s { background-position: -176px -64px; } -.uiIcon16.icon-arrow-4 { background-position: 0 -80px; } -.uiIcon16.icon-arrow-4-diag { background-position: -16px -80px; } -.uiIcon16.icon-extlink { background-position: -32px -80px; } -.uiIcon16.icon-newwin { background-position: -48px -80px; } -.uiIcon16.icon-refresh { background-position: -64px -80px; } -.uiIcon16.icon-shuffle { background-position: -80px -80px; } -.uiIcon16.icon-transfer-e-w { background-position: -96px -80px; } -.uiIcon16.icon-transferthick-e-w { background-position: -112px -80px; } -.uiIcon16.icon-radiation { background-position: -128px -80px; } -.uiIcon16.icon-folder-collapsed { background-position: 0 -96px; } -.uiIcon16.icon-folder-open { background-position: -16px -96px; } -.uiIcon16.icon-document { background-position: -32px -96px; } -.uiIcon16.icon-document-b { background-position: -48px -96px; } -.uiIcon16.icon-note { background-position: -64px -96px; } -.uiIcon16.icon-mail-closed { background-position: -80px -96px; } -.uiIcon16.icon-mail-open { background-position: -96px -96px; } -.uiIcon16.icon-suitcase { background-position: -112px -96px; } -.uiIcon16.icon-comment { background-position: -128px -96px; } -.uiIcon16.icon-person { background-position: -144px -96px; } -.uiIcon16.icon-print { background-position: -160px -96px; } -.uiIcon16.icon-trash { background-position: -176px -96px; } -.uiIcon16.icon-locked { background-position: -192px -96px; } -.uiIcon16.icon-unlocked { background-position: -208px -96px; } -.uiIcon16.icon-bookmark { background-position: -224px -96px; } -.uiIcon16.icon-tag { background-position: -240px -96px; } -.uiIcon16.icon-home { background-position: 0 -112px; } -.uiIcon16.icon-flag { background-position: -16px -112px; } -.uiIcon16.icon-calendar { background-position: -32px -112px; } -.uiIcon16.icon-cart { background-position: -48px -112px; } -.uiIcon16.icon-pencil { background-position: -64px -112px; } -.uiIcon16.icon-clock { background-position: -80px -112px; } -.uiIcon16.icon-disk { background-position: -96px -112px; } -.uiIcon16.icon-calculator { background-position: -112px -112px; } -.uiIcon16.icon-zoomin { background-position: -128px -112px; } -.uiIcon16.icon-zoomout { background-position: -144px -112px; } -.uiIcon16.icon-search { background-position: -160px -112px; } -.uiIcon16.icon-wrench { background-position: -176px -112px; } -.uiIcon16.icon-gear { background-position: -192px -112px; } -.uiIcon16.icon-heart { background-position: -208px -112px; } -.uiIcon16.icon-star { background-position: -224px -112px; } -.uiIcon16.icon-link { background-position: -240px -112px; } -.uiIcon16.icon-cancel { background-position: 0 -128px; } -.uiIcon16.icon-plus { background-position: -16px -128px; } -.uiIcon16.icon-plusthick { background-position: -32px -128px; } -.uiIcon16.icon-minus { background-position: -48px -128px; } -.uiIcon16.icon-minusthick { background-position: -64px -128px; } -.uiIcon16.icon-close { background-position: -80px -128px; } -.uiIcon16.icon-closethick { background-position: -96px -128px; } -.uiIcon16.icon-key { background-position: -112px -128px; } -.uiIcon16.icon-lightbulb { background-position: -128px -128px; } -.uiIcon16.icon-scissors { background-position: -144px -128px; } -.uiIcon16.icon-clipboard { background-position: -160px -128px; } -.uiIcon16.icon-copy { background-position: -176px -128px; } -.uiIcon16.icon-contact { background-position: -192px -128px; } -.uiIcon16.icon-image { background-position: -208px -128px; } -.uiIcon16.icon-video { background-position: -224px -128px; } -.uiIcon16.icon-script { background-position: -240px -128px; } -.uiIcon16.icon-alert { background-position: 0 -144px; } -.uiIcon16.icon-info { background-position: -16px -144px; } -.uiIcon16.icon-notice { background-position: -32px -144px; } -.uiIcon16.icon-help { background-position: -48px -144px; } -.uiIcon16.icon-check { background-position: -64px -144px; } -.uiIcon16.icon-bullet { background-position: -80px -144px; } -.uiIcon16.icon-radio-on { background-position: -96px -144px; } -.uiIcon16.icon-radio-off { background-position: -112px -144px; } -.uiIcon16.icon-pin-w { background-position: -128px -144px; } -.uiIcon16.icon-pin-s { background-position: -144px -144px; } -.uiIcon16.icon-night { background-position: -160px -144px; } -.uiIcon16.icon-play { background-position: 0 -160px; } -.uiIcon16.icon-pause { background-position: -16px -160px; } -.uiIcon16.icon-seek-next { background-position: -32px -160px; } -.uiIcon16.icon-seek-prev { background-position: -48px -160px; } -.uiIcon16.icon-seek-end { background-position: -64px -160px; } -.uiIcon16.icon-seek-start { background-position: -80px -160px; } -/* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */ -.uiIcon16.icon-seek-first { background-position: -80px -160px; } -.uiIcon16.icon-stop { background-position: -96px -160px; } -.uiIcon16.icon-eject { background-position: -112px -160px; } -.uiIcon16.icon-volume-off { background-position: -128px -160px; } -.uiIcon16.icon-volume-on { background-position: -144px -160px; } -.uiIcon16.icon-power { background-position: 0 -176px; } -.uiIcon16.icon-signal-diag { background-position: -16px -176px; } -.uiIcon16.icon-signal { background-position: -32px -176px; } -.uiIcon16.icon-battery-0 { background-position: -48px -176px; } -.uiIcon16.icon-battery-1 { background-position: -64px -176px; } -.uiIcon16.icon-battery-2 { background-position: -80px -176px; } -.uiIcon16.icon-battery-3 { background-position: -96px -176px; } -.uiIcon16.icon-circle-plus { background-position: 0 -192px; } -.uiIcon16.icon-circle-minus { background-position: -16px -192px; } -.uiIcon16.icon-circle-close { background-position: -32px -192px; } -.uiIcon16.icon-circle-triangle-e { background-position: -48px -192px; } -.uiIcon16.icon-circle-triangle-s { background-position: -64px -192px; } -.uiIcon16.icon-circle-triangle-w { background-position: -80px -192px; } -.uiIcon16.icon-circle-triangle-n { background-position: -96px -192px; } -.uiIcon16.icon-circle-arrow-e { background-position: -112px -192px; } -.uiIcon16.icon-circle-arrow-s { background-position: -128px -192px; } -.uiIcon16.icon-circle-arrow-w { background-position: -144px -192px; } -.uiIcon16.icon-circle-arrow-n { background-position: -160px -192px; } -.uiIcon16.icon-circle-zoomin { background-position: -176px -192px; } -.uiIcon16.icon-circle-zoomout { background-position: -192px -192px; } -.uiIcon16.icon-circle-check { background-position: -208px -192px; } -.uiIcon16.icon-circlesmall-plus { background-position: 0 -208px; } -.uiIcon16.icon-circlesmall-minus { background-position: -16px -208px; } -.uiIcon16.icon-circlesmall-close { background-position: -32px -208px; } -.uiIcon16.icon-squaresmall-plus { background-position: -48px -208px; } -.uiIcon16.icon-squaresmall-minus { background-position: -64px -208px; } -.uiIcon16.icon-squaresmall-close { background-position: -80px -208px; } -.uiIcon16.icon-grip-dotted-vertical { background-position: 0 -224px; } -.uiIcon16.icon-grip-dotted-horizontal { background-position: -16px -224px; } -.uiIcon16.icon-grip-solid-vertical { background-position: -32px -224px; } -.uiIcon16.icon-grip-solid-horizontal { background-position: -48px -224px; } -.uiIcon16.icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.uiIcon16.icon-grip-diagonal-se { background-position: -80px -224px; } -.uiIcon16.icon-batt_full { background-image: url(c_max.gif); background-position: 0px 0px } -.uiIcon16.icon-batt_disc { background-image: url(c_discharging.gif); background-position: 0px 0px } -.uiIcon16.icon-batt_chrg { background-image: url(c_charging.gif); background-position: 0px 0px } - -.mapIcon16 { - position: absolute; - width: 16px; - height: 16px; - background-image: url(uiIcons16Green.png); - background-position: -144px -96px; - background-repeat: no-repeat; - zoom: 0.125; - margin-left: -1px; - /*margin-bottom: -1px;*/ -} -.mapIcon16.dead { - background-image: url(uiIcons16Red.png); -} - -/* Command Positions */ -.mapIcon16.rank-captain { - background-position: -224px -112px; -} -.mapIcon16.rank-headofpersonnel { - background-position: -112px -96px; -} -.mapIcon16.rank-headofsecurity { - background-position: -112px -128px; -} -.mapIcon16.rank-chiefengineer { - background-position: -176px -112px; -} -.mapIcon16.rank-researchdirector { - background-position: -128px -128px; -} -.mapIcon16.rank-chiefmedicalofficer { - background-position: -32px -128px; -} - -/* Engineering Positions */ -.mapIcon16.rank-stationengineer { - background-position: -176px -112px; -} -.mapIcon16.rank-atmospherictechnician { - background-position: -176px -112px; -} - -/* Medical Positions */ -.mapIcon16.rank-medicaldoctor { - background-position: -32px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -32px -128px; -} -.mapIcon16.rank-psychiatrist { - background-position: -32px -128px; -} -.mapIcon16.rank-chemist { - background-position: -32px -128px; -} - -/* Science Positions */ -.mapIcon16.rank-scientist { - background-position: -128px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -128px -128px; -} -.mapIcon16.rank-roboticist { - background-position: -128px -128px; -} -.mapIcon16.rank-xenobiologist { - background-position: -128px -128px; -} - -/* Security Positions */ -.mapIcon16.rank-warden { - background-position: -112px -128px; -} -.mapIcon16.rank-detective { - background-position: -112px -128px; -} -.mapIcon16.rank-securityofficer { - background-position: -112px -128px; -} - diff --git a/nano/css/layout_basic.css b/nano/css/layout_basic.css deleted file mode 100644 index 30a75490f39..00000000000 --- a/nano/css/layout_basic.css +++ /dev/null @@ -1,21 +0,0 @@ -body { - background: #272727 url(uiBasicBackground.png) 50% 0 repeat-x; -} - -#uiContent { - clear: both; - padding: 8px; -} - -#uiLoadingNotice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 14px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - - diff --git a/nano/css/layout_default.css b/nano/css/layout_default.css deleted file mode 100644 index 109beb2c72e..00000000000 --- a/nano/css/layout_default.css +++ /dev/null @@ -1,128 +0,0 @@ -body { - background: #272727 url(uiBackground.png) 50% 0 repeat-x; -} - -#uiWrapper { - width: 100%; - height: 100%; - -ms-user-select: none; - user-select: none; -} - -#uiTitleWrapper { - position: relative; - height: 30px; -} - -#uiTitleText { - position: absolute; - top: 6px; - left: 44px; - width: 66%; - overflow: hidden; - color: #E9C183; - font-size: 16px; -} - -#uiTitle.icon { - padding: 6px 8px 6px 42px; - background-position: 2px 50%; - background-repeat: no-repeat; -} - -#uiTitleFluff { - position: absolute; - top: 4px; - right: 12px; - width: 42px; - height: 24px; - background: url(uiTitleFluff.png) 50% 50% no-repeat; -} - -#uiStatusIcon { - position: absolute; - top: 4px; - left: 12px; - width: 24px; - height: 24px; -} - -#uiMapWrapper { - clear: both; - padding: 8px; -} - -#uiMapHeader { - position: relative; - clear: both; -} - -#uiMapContainer { - position: relative; - width: 100%; - height: 600px; - overflow: hidden; - border: 1px solid #40628a; - background: url(nanomapBackground.png); -} - -#uiMap { - position: absolute; - top: 50%; - left: 50%; - margin: -512px 0 0 -512px; - width: 256px; - height: 256px; - overflow: hidden; - zoom: 4; -} - -#uiMapImage { - position: absolute; - bottom: 1px; - left: 1px; - width: 256px; - height: 256px; -} - -#uiMapContent { - position: absolute; - bottom: 0px; - left: 0px; - width: 256px; - height: 256px; -} - -#uiMapFooter { - position: relative; - clear: both; -} - -#uiContent { - clear: both; - padding: 8px; -} - -#uiMapTooltip { - position: absolute; - right: 10px; - top: 10px; - border: 1px solid #40628a; - background-color: #272727; - padding: 8px; - display: none; - z-index: 9999; -} - -#uiLoadingNotice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 14px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - - diff --git a/nano/css/shared.css b/nano/css/shared.css deleted file mode 100644 index fad7c0dcd78..00000000000 --- a/nano/css/shared.css +++ /dev/null @@ -1,599 +0,0 @@ -body { - padding: 0; - margin: 0; - font-size: 12px; - color: #ffffff; - line-height: 170%; - font-family: Verdana, Geneva, sans-serif; - background: #202020; -} - -#uiNoScript { - position: fixed; - top: 50%; - left: 50%; - margin: -60px 0 0 -150px; - width: 280px; - height: 120px; - background: #ffffff; - border: 2px solid #ff0000; - color: #000000; - font-size: 10px; - font-weight: bold; - z-index: 9999; - padding: 0px 10px; - text-align: center; -} - -hr { - background-color: #40628a; - height: 1px; -} - -.link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton { - float: left; - min-width: 15px; - height: 16px; - text-align: center; - color: #ffffff; - text-decoration: none; - background: #40628a; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 4px; - padding: 0px 4px 4px 4px; - margin: 0 2px 2px 0; - cursor: default; - white-space: nowrap; -} - -.hasIcon { - padding: 0px 4px 4px 0px; -} - -a:hover, .zoomLink:hover, .linkActive:hover { - background: #507aac; -} - -.linkPending, .linkPending:hover { - color: #ffffff; - background: #507aac; -} - -a.white, a.white:link, a.white:visited, a.white:active { - color: #40628a; - text-decoration: none; - background: #ffffff; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 4px; - padding: 1px 4px 1px 4px; - margin: 0 2px 0 0; - cursor: default; -} - -a.white:hover { - color: #ffffff; - background: #40628a; -} - -.hidden { - display: none; -} - -.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover { - color: #ffffff; - background: #2f943c; -} - -.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover { - color: #ffffff; - background: #999999; - border-color: #666666; -} - -a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon { - position: relative; - padding: 1px 4px 2px 20px; -} - -a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img { - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; -} - -.linkDanger, a.linkDanger:link, a.linkDanger:visited, a.linkDanger:active { - color: #ffffff; - background-color: #ff0000; - border-color: #aa0000; -} - -.linkDanger:hover { - background-color: #ff6666; -} - -ul { - padding: 4px 0 0 10px; - margin: 0; - list-style-type: none; -} - -li { - padding: 0 0 2px 0; -} - -img, a img { - border-style: none; -} - -h1, h2, h3, h4, h5, h6 { - margin: 0; - padding: 12px 0 6px 0; - color: #FFFFFF; - clear: both; -} - -h1 { - font-size: 18px; -} - -h2 { - font-size: 16px; -} - -h3 { - font-size: 14px; -} - -h4 { - font-size: 12px; -} - -.white { - color: white; - font-weight: bold; -} - -.good { - color: #4f7529; - font-weight: bold; -} - -.average { - color: #cd6500; - font-weight: bold; -} - -.bad { - color: #ee0000; - font-weight: bold; -} - -.idle { - color: #272727; - font-weight: bold; -} - -.redButton { - background: #ea0000; -} - -.yellowButton { - background: #cacc00; -} - -.highlight { - color: #8BA5C4; -} - -.dark { - color: #272727; -} - -.caption { - font-size: 10px; - font-weight: bold; - padding: 5px; -} - -.footer { - font-size: 10px; -} - -.noticePlaceholder { - position: relative; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - -.notice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - -.notice.icon { - padding: 2px 4px 0 20px; -} - -.notice img { - position: absolute; - top: 0; - left: 0; - width: 16px; - height: 16px; -} - -div.notice { - clear: both; -} - -.itemGroup { - border: 1px solid #e9c183; - background: #2c2c2c; - padding: 4px; - clear: both; -} - -.item { - width: 100%; - margin: 4px 0 0 0; - clear: both; -} - -.itemContentNarrow, .itemContent { - float: left; -} - -.itemContentNarrow { - width: 30%; -} - -.itemContent { - width: 69%; -} - -.itemLabelNarrow, .itemLabel, .itemLabelWide, .itemLabelWider, .itemLabelWidest { - float: left; - color: #e9c183; -} - -.itemLabelNarrow { - width: 20%; -} - -.itemLabel { - width: 30%; -} - -.itemLabelWide { - width: 45%; -} - -.itemLabelWider { - width: 69%; -} - -.itemLabelWidest { - width: 100%; -} - -.itemContentWide { - float: left; - width: 79%; -} - -.itemContentSmall { - float: left; - width: 33%; -} - -.itemContentMedium { - float: left; - width: 55%; -} - -.statusDisplay { - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; -} - -.statusDisplayRecords { - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; - overflow-x: hidden; - overflow-y: auto; -} - -.statusLabel { - width: 138px; - float: left; - overflow: hidden; - color: #98B0C3; -} - -.statusValue { - float: left; -} - -.block { - padding: 8px; - margin: 10px 4px 4px 4px; - border: 1px solid #40628a; - background-color: #202020; -} - -.block h3 { - padding: 0; -} - -.displayBar { - position: relative; - width: 236px; - height: 16px; - border: 1px solid #666666; - float: left; - margin: 0 5px 0 0; - overflow: hidden; - background: #000000; -} - -.displayBarText { - position: absolute; - top: -2px; - left: 5px; - width: 100%; - height: 100%; - color: #ffffff; - font-weight: normal; -} - -.displayBarFill { - width: 0%; - height: 100%; - background: #40628a; - overflow: hidden; - float: left; -} - -.displayBarFill.alignRight { - float: right; -} - -.displayBarFill.good { - color: #ffffff; - background: #4f7529; -} - -.displayBarFill.average { - color: #ffffff; - background: #cd6500; -} - -.displayBarFill.bad { - color: #ffffff; - background: #ee0000; -} - -.displayBarFill.highlight { - color: #ffffff; - background: #8BA5C4; -} - -.clearBoth { - clear: both; -} - -.clearLeft { - clear: left; -} - -.clearRight { - clear: right; -} - -.line { - width: 100%; - clear: both; -} - -.inactive, a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover { - color: #ffffff; - background: #999999; - border-color: #666666; -} - -.fixedLeft { - width: 110px; - float: left; -} - -.fixedLeftWide { - width: 165px; - float: left; -} - -.fixedLeftWider { - width: 220px; - float: left; -} - -.fixedLeftWidest { - width: 250px; - float: left; -} - -.fixedLeftWiderRed { - width: 220px; - float: left; - background: #ee0000; -} - -.floatRight { - float: right; -} - -/* Used in PDA */ - -.wholeScreen { - position: absolute; - color: #517087; - font-size: 16px; - font-weight: bold; - text-align: center; -} - -.pdalink { - float: left; - white-space: nowrap; -} - -/* DNA Modifier UI (dna_modifier.tmpl) */ - -.dnaBlock { - float: left; - width: 90px; - padding: 0 0 5px 0; -} - -.dnaBlockNumber { - font-family: Fixed, monospace; - float: left; - color: #ffffff; - background: #363636; - min-width: 20px; - height: 20px; - padding: 0; - text-align: center; -} - -.dnaSubBlock { - font-family: Fixed, monospace; - float: left; - padding: 0; - min-width: 16px; - height: 20px; - text-align: center; -} - -.mask { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: url(uiMaskBackground.png); -} - -.maskContent { - width: 100%; - height: 200px; - margin: 200px 0; - text-align: center; -} - -table.fixed { - table-layout:fixed; -} - -table.fixed td { - overflow: hidden; -} - -/* Table stuffs for power monitor */ -table.pmon { - border: 2px solid RoyalBlue; -} - -table.pmon td, table.pmon th { - border-bottom: 1px dotted black; - padding: 0px 5px 0px 5px; -} - -/* Table Stuffs for manifest*/ - -th.command { - background: #3333FF; - font-weight: bold; - color: #ffffff; -} - -th.sec { - background: #8e0000; - font-weight: bold; - color: #ffffff; -} - -th.med { - background: #006600; - font-weight: bold; - color: #ffffff; -} - -th.eng { - background: #b27300; - font-weight: bold; - color: #ffffff; -} - -th.sci { - background: #a65ba6; - font-weight: bold; - color: #ffffff; -} - -th.car { - background: #bb9040; - font-weight: bold; - color: #ffffff; -} - -th.civ { - background: #a32800; - font-weight: bold; - color: #ffffff; -} - -th.misc { - background: #666666; - font-weight: bold; - color: #ffffff; -} - -/* Damage colors for crew monitoring computer */ - -.burn { - color: orange; -} - -.brute { - color: red; -} - -.toxin { - color: #8ac44c; -} - -.oxyloss { - color: #00baee; -} - -/* 75px width used in power monitoring console buttons */ -.width75btn { - width: 75px; -} \ No newline at end of file diff --git a/nano/images/c_charging.gif b/nano/images/c_charging.gif deleted file mode 100644 index e080e27cfc627471271db7a163701c1017b7f457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmZ?wbhEHb6krfwc*Fn#KVbOB4+aARg98T+00k8PbNji51UowhxEkphFf)RLezI_K zF|ae}0NFsz0t^hysujEL{4+Skv1;#+hC{pGUkm3+dNDDzlwSi*r0^N(6DI*p$iI0l z`*ql2zvKgFQaohTuzFq(;Rc37o<9{bO5+S$?%$Z15jD}drcLYn*)O{v{oJ-qujhl2 zrc^H{HbUs&ra08MacNphW~ZdK-Nv*76KnOkD()_HwW>hDg=n@uwk3UI|IayT5^t-s)Dp)*91!Ko+#`x_|2I>|YO`+)FxeI>kc;dxAhp(+mf9KX3iYd00Fw nKC|oYgH;Nz4;otaKQ~(!G2i!q0`@eGl$n6q-(OS5o|&ux=*4DN diff --git a/nano/images/c_discharging.gif b/nano/images/c_discharging.gif deleted file mode 100644 index 793fa589c2fdc19fe8af4b1835dab5376083dbfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmZ?wbhEHb6krfwc*Fn#KVbOB4+aARg98T+00k8PbNji51UowhxEkphFf)RLezI_; zFt9V|0NFsz0t^hysujEL{4+Skv1;!RhJ(A`UsLBvdNDDzlFKH=XLHn-zr_Rp) z_3+8Pqywi@JXF-Mx>_B@1pNh1dzm6SQqmV?N`~ofKlE|WRsCi0!S8=_VskgL?T4!M z6A~-$9B55)ot17;=A5%={qaky{_eEA*)$`ez)43;7@G;mwjZ+ASIDT0(+EpR7fbe9 zlgqXE-JYvz%U%;@yR~LQM&%uWE>X*xbVH!+^VXYRUU~MB^v=aI9;D*3T?5JQhpK-j zB$meg=v7Ia7rJVl#?G!>tK&;M-~N8`e?JR0r|ThWuKf8Rz4RW?de0dk>(4ahho33& zdi2w6n?}zEBTcDZtl@`ZzvoYdjM6xXzPXiQOSCqvj9xIu=J3`Y-1Z{{e#3$8{|k!y2L z-FjTf7ItrK=3`AYT1Z+0cKx4ww3a!dV@YLLvf-Ym?aLnAIcmE4Swy|>fdm6aY+0R*v diff --git a/nano/images/c_max.gif b/nano/images/c_max.gif deleted file mode 100644 index 7f26e51d20ee594555c7c69c61b8fa615b726aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmZ?wbhEHb6krfw*u($?KOn?`0|!717*PDr?dKX2?CcoeYNTht%m@@${K>+}#lXU# z15yLh&cLkivFpx1gHsZ#_Re5Axcj{rJBNekEGLh3$){K5{RvabUT%^-O?h9fgM3=X LOo{&EEDY8F>`)>d diff --git a/nano/images/status_icons/alarm_green.gif b/nano/images/status_icons/alarm_green.gif deleted file mode 100644 index 7c2570c8ce30fd03c48a6332eba57bcd3dab25a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%al4F+Zg z9gsXo3j>qpoc@)k-|{b>v&F38^N~f|I*jw!Tav@w9?f)meZx*h^0Z{e(_iPl?+amI Gum%9P&mj8% diff --git a/nano/images/status_icons/alarm_red.gif b/nano/images/status_icons/alarm_red.gif deleted file mode 100644 index 327d58e4db8acf03e219e09ace17c6f1f990f499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZ?wbhEHb6k`x$SjfO&!NBl?f#JY`0}KodivPL&TtkAL9RpmA^bD98K|()SIE@&X z8FYYbpawAp1}4op{VPwu z9Uz+lq=kVgdrtq#({K3~&(XZmz4_ijR))4m9@89-*W5WZulLlknX~7~XS7<@-QM-< z)5p3a3k8=ph_;@YD-fCaZO)aKyj=lOOHa#wTkte*^$w}Z9NjwJhnsI~PrIE`a*N4r Z`pwD9_U->OX}Y^(L`Fr2MIZx%H2^2XMuq?Y diff --git a/nano/images/status_icons/batt_20.gif b/nano/images/status_icons/batt_20.gif deleted file mode 100644 index 1d5e38fc888430a7bb2a1062468c7d822d7c66e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmZ?wbhEHb)L;-}IK;rf@PmQD0tgun95?`E!hzy{Za>$MU}whwS0gveMHo^t=VfrUT;SOEL275g-IH&n1op^o z=9lV!P(86h^6mx>t7j(O%Z^Kid|P5Z$GPHY-im1Li@&d`EsQmCFt|K%`J3m`_rh+z z&%XGl`Q`8b4UOWQ*sKjFXl>T}cWXYI3Y~UjK2~sKzM#q(-TuQppDLZbR{Cf!?s%H9 d{c_%U&2Mf?S8e&VTesZc!;Tui{VEI$)&M66a}odm diff --git a/nano/images/status_icons/batt_40.gif b/nano/images/status_icons/batt_40.gif deleted file mode 100644 index d5cedb996759170d5e2477619ca9f40d66a18c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHb)L;-}*u=oV@PmQDg5kh{13!QaB%t`8+s`#5*x50_)kx2PnGq+Z` zi-Cnf2c!(7oq;*qW7nO32B$n%@6~;AcK82A5r&k^c^OP*m|J z3#SnSD}xS51xPysb9ltAJO2z$d9L2e`{L~G{|zi0DVg&!v|283?E4_Kv*7N@w^{Gs zt@&&!blQ>mSizC`f+}Zp`w#bgs&w{R>7%{4<7vkB%X#NDzqu`4wdL1t-ExBuJ8Jy) Vs}Qg&7i3qn2@A+BDa!4#1^~mJZcP9H diff --git a/nano/images/status_icons/batt_60.gif b/nano/images/status_icons/batt_60.gif deleted file mode 100644 index d39534c8cb03fd6b7580267d38ebbed0e7d16433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmZ?wbhEHb)L;-}SjfP@@PmQDg5kh{13;$Ye{Mh5kYH!W09PYD17=2$&`%alE(T@> z9Uz+lq=kVgWlsOf({K3~&(XZmz4_ijR))4m9@89-*W5WZulLlknX~7~XS7<%UFKf1 z`(~4FeCi2qq3|8I_&BGU)(1We&T?Ux91|_L^hVh9IhhrArZ%15RF+p;vVC*Z z9Uz+lq=kVgYfk^l({K3~&(XZmz4_ijR))4m9@89-*W5WZulLlknX~7~XS7<@-8SCU z@UqJKc7ar_(qx0*Qj WFFrMOA(iFsh8__a6&8UE4AubO+dx48 diff --git a/nano/images/status_icons/charging.gif b/nano/images/status_icons/charging.gif deleted file mode 100644 index cf19ca72876b33bb683ea14aa4d9dc4c6c621bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ?wbhEHb)L;-}SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alE(T@> z9gsXo3jy+yJb<5u_TVtSn;qvt0wAPESQ>533&YSr0)^5#} LkH0rFF<1itpY1(Q diff --git a/nano/images/status_icons/downloader_finished.gif b/nano/images/status_icons/downloader_finished.gif deleted file mode 100644 index f01b7c42af8ba61a23b3ba009a1f491922267479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alE(T@> z9gsXo3j>qGoc@)k-|laiBP6A;iLESQZs9fdE`gn;8fkWGK5X@y)0gnV&)mlFMPK)y dJkk3GD#0FQM`JW^Mtrhj=MufRCyI-~8UX$-DMkPQ diff --git a/nano/images/status_icons/downloader_running.gif b/nano/images/status_icons/downloader_running.gif deleted file mode 100644 index 68fb977c86dda6273d7fbd853b86ca38375891b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alE(T@> z9gsXo3j>qvoc@)k-|laiBP6A;iLET)R_h~=Y0o;By*jn+owOJ>9m=RW66O|OWA74h zEd}Y|KK{w)`nOoDHmPCNx3e^3MNlw1SYPk+U;jj~S*eXvYtx$-T+f^X?*g@+`~Hvr ziYQjA_3-Q8d}^(=waC@4|M+>h+K(hMVsnBCAtSzs1pCZ=|HsTbplx#B#||H@=_i@6 z8DvScK^{p97bLw{HAiD|-)GKVD{io9Ul>uM&z5A<0#03AzH(Mc%dwY>85pbqqOR3W diff --git a/nano/images/status_icons/ntnrc_idle.gif b/nano/images/status_icons/ntnrc_idle.gif deleted file mode 100644 index d47c01d580080e8e614de62448815b87705a122f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmZ?wbhEHb6k`x$n8?7uV8L+UzyTl)1d9K;{aizWogD*Qjr0td89_onSvZXtm>6_G z@*ph?O!`y$SDt>$zc^;Wt!~{*{n8&Ar)bngYlhsO6~oo#^kK@TOEwR;%O1S>ei3K; KkwqIB7_0$IQY1tG diff --git a/nano/images/status_icons/ntnrc_new.gif b/nano/images/status_icons/ntnrc_new.gif deleted file mode 100644 index af72a8b332fc4983088ccafc64593bb04294e551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alBL-#$ z9gsXo3j>q>oc@)k-|{bxS#+yg_fo&~$HpldbQvgwk|!|k#MZ@yo| T*?wfvM*LGc*ia%L6 zH5gbJbU=zg+8LNVJ$Bvsr?~GV)811_tG)|2eeYD>$-vSu>$TUecap}dW?60X(Kg8X zZxDORUFMU7Vw_-vkx?=4giDbnCG)NxE1kLa#RdURiL4|QtfqV6GX2zwDX-^!UcJa@ zoxSedcLuJ09CwyVC_c)U%u$(n)L+QW)XXYWfupNQ!M=ouhCBcc!@ou<`_u6H! zYT3F)=M2|czt#M2GoQEPwXTzM?8YT3*ZNL8y>xLR(@H08mDepETZ|_wGh#CuPq?gG zzUrmqWxwp@8ok%K=B#(;F>*TiXv2|gJ=q0IHothGGoN?$q*-@kle;^f-ZrrmVz34P Dlu)Cy diff --git a/nano/images/status_icons/power_warn.gif b/nano/images/status_icons/power_warn.gif deleted file mode 100644 index 0c85b3a85a1e46e7ea81d98562f1cf10509f13d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 485 zcmZ?wbhEHb6k`x$*u=oV@B;`Le*9oKaNq!t2M3D(x&2&2f}I@$T#fV$m>Gc*ia%L6 zH5gbJbU=zg+8LO`Ja*mrr?~GV)812Qz2ejFDse<>RK<8qJ9lFO!-0LPH=Qzme2d$! z!Q?haTh*Hi7Wshi)kljKh4uzSyY(Ku_T|@RnU%MFKK}mNvplu%q^f7RZf?*W7f-BK z#lWnJy>!#N==SvE98BtZOF8>8eyx>dWZ>dlD;+z%n6=5OX>I#W7nOsF8=8YvD!usw zmVeOXej-@Cu6mAVXw_>A8ZTFIkYL$G`gO`34U23&g|61AV zmstl>WoP^`48OSIedNi9Dp>9EhuO9FRMM*N!cE@;ABg&?x-c+QnMJ*}n)|0UM=Ww% z@Uw0S&h*t^CF~>HKYS8&?+W?ya*oo<4Xsl;*JjN2oEj>$Y@+k?tAR&67#OSp?%csB diff --git a/nano/images/status_icons/sig_high.gif b/nano/images/status_icons/sig_high.gif deleted file mode 100644 index efb20f6730654a761fa061b451efae0122d0aa71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHb)L;-}SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alBL-#$ z9gsXo3jO_X57g-b8zbsXLHQ^1moO6yJZE zsA1B~Kl!3Vf!jT|?^ePgVB*KO^Q)UQp-((S@6Vw^UIER58u{+UcY pWZL=se|Wpurscs#79FY`73myDPRw|+k>h7VQ0L5*oskR-)&PE-NT2`! diff --git a/nano/images/status_icons/sig_low.gif b/nano/images/status_icons/sig_low.gif deleted file mode 100644 index 08f98baea8e69b04e3b8a8f12f20ad4bb09b2ec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHb)L;-}IK;qUVZm_VzyXFIKo-LfAPEDC|GE8KLxPk%Fip~B~z57xb zi)?z*Z*Xy0o|rpPO~Z+yA@$@>1_6#hWrL)ndfU%un{lK$aNjjtzs6(v{wv#ltnFR= VJZVQz-_mTu^o*>a79LIpYXEgwJ&phX diff --git a/nano/images/status_icons/sig_none.gif b/nano/images/status_icons/sig_none.gif deleted file mode 100644 index 79840d8a2bd4b30c263cbc680aa2727dfeb27555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 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�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 aFYJv=&30+-^eun=x8>@*hF8uBlKcmje21X` diff --git a/nano/images/uiBasicBackground.png b/nano/images/uiBasicBackground.png deleted file mode 100644 index 572b1f1400a6d6a852ba09c950ca7a9990bf35a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3707 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 diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png deleted file mode 100644 index a337345e7656abfd0c370c559a42dbf357efc91d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2288 zcmV{{Hmz^!NAo`}_O&`1t+({qXSc`T6;J;s>q( z0004WQchC_SyihzJr(+(qJ^^kq!bdmZL6zCg4)ry8+iFDaf+>^I#9eq_1z_r+IRLwkA&6>%BH)n#(GbCNgA^eeLg0nY0zQOf zUlXB1p-?Ck3WclA1fR#joXofeE138bk_nt!@z@n93&1{y@`6Lq8}92rgdU3r^L=`{ zap120r(G->)&uf_NsfRAgA>;SIyo{1)LEcVC=?2XLZR|)01j=RyE~B6(O|s~CoUw4^Ih#@iR2bTyrpqJ&oINu4AXk@( z931RN14eUsBzKZT^ALuluRSJIR|odBklZsnw&20OEdn{9Rbj^%kV!86v+r^!O0 zP$(1%1$fv7T;KU(Dr3a~2Vq|aVgt6y9@s|ttBVX*umCPi9f<8in>rA-%~TTKObwxZ z2m+|N9A;Am!VV;bmpP427$hPr;3yq-HV&wVxdSSd1L~pbt6cS649EpLD9V;VSpaoF z_A~CnAMH zp-?CkxcBBE<-gqb{Q;cNdPoLS{!f@WP7o4w>@cYO>%fZbZwR*z#|W_j)~_3Z1+h8j z-YpKZWXy6&5*l(KB?n_&RQ)Ug?BU3)5ai3()AC8WCl75bg%2VJIV;Ta^=8*l?^BFB zlQU39AS?#B?}3Z3NhUg#~d0_@TT9TIl$c3?l)QO>QM0 zx7)3eUXR~N5&$L<;C9B`#sVlgWJoCaUAqedG%XKE0JZ1-o7=zw01d_+Gzx$v+7SW$ zuj@yf2rz#75V-Y!`{nhvTL9%cn*u-8AK7fI1l3_bwl^F*=>+0?gw-3$XAf zf3l1{po!-N2vfHQR$!rdk2kgja5APC+95#utNq>nIS>K%zcsZtivZCf8Os8E28sZj zk9YnTKl#arRw#CGAI~v)lKYzi^fn~G_MqV8cw2z>cU#(jjjhdP9+sU&-`+-lSb_k% z?&E{$Ef5yqH&i`x%WZ{R=b!Z-4S-=qC*2i@bJ_j#09Vgk{_8Yo8!7ro6bgkxp`dIx zS)YpB0XXXHB)>*XxfCBF5So?LbR z;RjzOfEPr}y zU4hmA6UKnx&N~l65@!t%>>|1FA&%v0K9L!-EO}CfCRYRZe4&=L%@R`7QooL zH~n}7cn}1*JzRioEo6FZ3^46#oFfAr2 z{{93LL0;$=BMXH>p-@2dj$oPO$EP4=*YJ>cNLYX_&tR~UWiaqFzzehFKs^w>_snmR z0HZuG^nPJ5kN}Gk~02il%;x8InS-`3C08F+8u>jdck z$@VTcr?su}PCNJKxI@&xwFp{<9W?hRE1%lSfgOV8{s42{?e8IgKZ8So2Z2Habb7Z# zAafWwNkAY(h`A&1l7nDp;;LV#!GM|wJ!mS+it~9!p-?Ck3I$eh7Jq)Q5(2-r08AW? zKW=6L8tuCXkbmF60_9)Cpj8Ca7(kr`UKfQzp-?Ck_(nY?8eGeNtG;flK;dDEtp4IU1MDxAy%20000< KMNUMnLSTX!TsMIL diff --git a/nano/images/uiIcons16Green.png b/nano/images/uiIcons16Green.png deleted file mode 100644 index 1ca23cb81d5fe43a83472660b2a128be748760a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18091 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 KMNUMnLSTZ~v*-K( diff --git a/nano/images/uiIcons16Red.png b/nano/images/uiIcons16Red.png deleted file mode 100644 index 3af11de93a25a4195a395079b27259b7fa6484f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17681 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 JPDHLkV1h&Y(Te~8 diff --git a/nano/images/uiLinkPendingIcon.gif b/nano/images/uiLinkPendingIcon.gif deleted file mode 100644 index c3070fd157a1a9fdf37ae77d3e060dc54fa1dfec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmZ?wbhEHb6krfw_{6{vP_^d&|NoUU_g}dE0?62P`reXVS7vTHr}$6GxhOTUBsE2$ zJhLQ2Au%hlA}2pFMK3ciEuTU0Ckq1?0|SHNe{Mh5kYH!W09PYD17=2`kPZ+7jTT^F zU^eF1b?2YKDbH--WDYA1$vNzPGtxL+HyR$=B{K8iHob%+hYBy~MoU=UUB+%H!NcyA z{oDg+B-m(1WOGbF=J@p}DoD5R?B4LK%camMFeJfHQX#>|HCk##jm*~4`)?B^*c%kC zOFU|GmfWPOq9p`1hzZ#sGmc$G%G#$KPfR#7B}|{KHCcx5i=^L2Pp8Bgs|#d4aGlw_ zSLWCXZKlY#;(r*M5Az$XOp%(up9N|ZGqO=Yza^<^pE7Ej_-0O6d~5eI&Q?Vp7DJcz zL>a+VZcQ65$}=Yg#eTMxH?Yu=>OZlh$kGSqHx^`bj5u}`scU;ZPZ9Yb@!6-5N3HB| zLQGP~l-8D=av70Mn&(eB2r$dNw2?oo1~w;X63iG@WMhENQ8+ZgQv7kr^F6ob8Au+N zd7!B0v~BLG@HLAJdDyr`iW7HlF#SH2vC&`yXXozuxtd-ubJ&p00XpZ-zYm;(H|K=L z&SHFbtFT~dLdV_2Id@H_wK}>TH4vGQFnb##FUuhZf!T%)hpwHQ2s4Hq!x&)9uTFKk zGDq{e90$i?g}&p3d@P0rD^G1$7a(y67+qnvmNF@nCP_5Six!-~z+eqZIA8z(XFS>N diff --git a/nano/images/uiMaskBackground.png b/nano/images/uiMaskBackground.png deleted file mode 100644 index babc9a855e8c3802e473b38abdcf17e56bdde5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_{3?x-PN__%S%mF?ju0VQumF+Dc#aI&L7kqR7 p%S~cH4zH(+V@O3@vP4LN2vBMQ1LKv diff --git a/nano/images/uiNoticeBackground.jpg b/nano/images/uiNoticeBackground.jpg deleted file mode 100644 index dffe2f296b87776041b6baab21ea0254c729e453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40135 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 diff --git a/nano/js/libraries.min.js b/nano/js/libraries.min.js deleted file mode 100644 index f27e98c7331..00000000000 --- a/nano/js/libraries.min.js +++ /dev/null @@ -1 +0,0 @@ -jQuery.fn.extend({everyTime:function(e,t,r,n){return this.each(function(){jQuery.timer.add(this,e,t,r,n)})},oneTime:function(e,t,r){return this.each(function(){jQuery.timer.add(this,e,t,r,1)})},stopTime:function(e,t){return this.each(function(){jQuery.timer.remove(this,e,t)})}}),jQuery.extend({timer:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1e3,das:1e4,hs:1e5,ks:1e6},timeParse:function(e){if(null==e||null==e)return null;var t=this.regex.exec(jQuery.trim(e.toString()));return t[2]?parseFloat(t[1])*(this.powers[t[2]]||1):e},add:function(e,t,r,n,i){var o,a,u=0;jQuery.isFunction(r)&&(i=i||n,n=r,r=t),"number"!=typeof(t=jQuery.timer.timeParse(t))||isNaN(t)||t<0||(("number"!=typeof i||isNaN(i)||i<0)&&(i=0),i=i||0,(o=jQuery.data(e,this.dataKey)||jQuery.data(e,this.dataKey,{}))[r]||(o[r]={}),n.timerID=n.timerID||this.guid++,(a=function(){(++u>i&&0!==i||!1===n.call(e,u))&&jQuery.timer.remove(e,r,n)}).timerID=n.timerID,o[r][n.timerID]||(o[r][n.timerID]=window.setInterval(a,t)),this.global.push(e))},remove:function(e,t,r){var n,i=jQuery.data(e,this.dataKey);if(i){if(t){if(i[t]){if(r)r.timerID&&(window.clearInterval(i[t][r.timerID]),delete i[t][r.timerID]);else for(r in i[t])window.clearInterval(i[t][r]),delete i[t][r];for(n in i[t])break;n||(n=null,delete i[t])}}else for(t in i)this.remove(e,t,r);for(n in i)break;n||jQuery.removeData(e,this.dataKey)}}}}),jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(e,t){jQuery.timer.remove(t)})}),function(){"use strict";var u={version:"1.0.1-nanoui",templateSettings:{evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{:([\s\S]+?)\}\}/g,encode:/\{\{>([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,conditional:/\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,conditionalElse:/\{\{else\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,props:/\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,empty:/\{\{empty\}\}/g,varname:"data, config, helper",strip:!0,append:!0,selfcontained:!1},template:void 0,compile:void 0};function s(){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},e=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(e,function(e){return t[e]||e}):this}}"undefined"!=typeof module&&module.exports?module.exports=u:"function"==typeof define&&define.amd?define(function(){return u}):function(){return this||(0,eval)("this")}().doT=u,String.prototype.encodeHTML=s();var c={append:{start:"'+(",end:")+'",endencode:"||'').toString().encodeHTML()+'"},split:{start:"';out+=(",end:");out+='",endencode:"||'').toString().encodeHTML();out+='"}},l=/$^/;function f(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}u.template=function(e,t,r){var n,i=(t=t||u.templateSettings).append?c.append:c.split,o=0,a=t.use||t.define?function n(i,e,o){return("string"==typeof e?e:e.toString()).replace(i.define||l,function(e,n,t,r){return 0===n.indexOf("def.")&&(n=n.substring(4)),n in o||(":"===t?(i.defineParams&&r.replace(i.defineParams,function(e,t,r){o[n]={arg:t,text:r}}),n in o||(o[n]=r)):new Function("def","def['"+n+"']="+r)(o)),""}).replace(i.use||l,function(e,t){i.useParams&&(t=t.replace(i.useParams,function(e,t,r,n){if(o[r]&&o[r].arg&&n){var i=(r+":"+n).replace(/'|\\/g,"_");return o.__exp=o.__exp||{},o.__exp[i]=o[r].text.replace(new RegExp("(^|[^\\w$])"+o[r].arg+"([^\\w$])","g"),"$1"+n+"$2"),t+"def.__exp['"+i+"']"}}));var r=new Function("def","return "+t)(o);return r?n(i,r,o):r})}(t,e,r||{}):e,a=("var out='"+(t.strip?a.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):a).replace(/'|\\/g,"\\$&").replace(t.interpolate||l,function(e,t){return i.start+f(t)+i.end}).replace(t.encode||l,function(e,t){return n=!0,i.start+f(t)+i.endencode}).replace(t.conditional||l,function(e,t){return t?"';if("+f(t)+"){out+='":"';}out+='"}).replace(t.conditionalElse||l,function(e,t){return t?"';}else if("+f(t)+"){out+='":"';}else{out+='"}).replace(t.iterate||l,function(e,t,r,n){if(!t)return"';} } out+='";o+=1,r=r||"value",n=n||"index",t=f(t);var i="arr"+o;return"';var "+i+"="+t+";if("+i+" && "+i+".length > 0){var "+r+","+n+"=-1,l"+o+"="+i+".length-1;while("+n+" 0){var "+r+";for( var "+n+" in "+i+"){ if (!"+i+".hasOwnProperty("+n+")) continue; "+r+"="+i+"["+n+"];out+='"}).replace(t.empty||l,function(e){return"';}}else{if(true){out+='"}).replace(t.evaluate||l,function(e,t){return"';"+f(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,"").replace(/(\s|;|\}|^|\{)out\+=''\+/g,"$1out+=");n&&t.selfcontained&&(a="String.prototype.encodeHTML=("+s.toString()+"());"+a);try{return new Function(t.varname,a)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+a),e}},u.compile=function(e,t){return u.template(e,null,t)}}(); \ No newline at end of file diff --git a/nano/js/libraries/doT.js b/nano/js/libraries/doT.js deleted file mode 100644 index a0ec5520c02..00000000000 --- a/nano/js/libraries/doT.js +++ /dev/null @@ -1,157 +0,0 @@ -(function () { - "use strict"; - - var doT = { - version: '1.0.1-nanoui', - templateSettings: { - evaluate: /\{\{([\s\S]+?)\}\}/g, - interpolate: /\{\{:([\s\S]+?)\}\}/g, - encode: /\{\{>([\s\S]+?)\}\}/g, - use: /\{\{#([\s\S]+?)\}\}/g, - define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, - conditional: /\{\{\/?if\s*([\s\S]*?)\s*\}\}/g, - conditionalElse: /\{\{else\s*([\s\S]*?)\s*\}\}/g, - iterate: /\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - props: /\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - empty: /\{\{empty\}\}/g, - varname: 'data, config, helper', - strip: true, - append: true, - selfcontained: false - }, - template: undefined, //fn, compile template - compile: undefined //fn, for express - }, global; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = doT; - } else if (typeof define === 'function' && define.amd) { - define(function () { - return doT; - }); - } else { - global = (function () { - return this || (0, eval)('this'); - }()); - global.doT = doT; - } - - function encodeHTMLSource() { - var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': '"', "'": ''', "/": '/' }, - matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g; - return function () { - return this ? this.replace(matchHTML, function (m) { - return encodeHTMLRules[m] || m; - }) : this; - }; - } - - String.prototype.encodeHTML = encodeHTMLSource(); - - var startend = { - append: { start: "'+(", end: ")+'", endencode: "||'').toString().encodeHTML()+'" }, - split: { start: "';out+=(", end: ");out+='", endencode: "||'').toString().encodeHTML();out+='"} - }, skip = /$^/; - - function resolveDefs(c, block, def) { - return ((typeof block === 'string') ? block : block.toString()) - .replace(c.define || skip, function (m, code, assign, value) { - if (code.indexOf('def.') === 0) { - code = code.substring(4); - } - if (!(code in def)) { - if (assign === ':') { - if (c.defineParams) value.replace(c.defineParams, function (m, param, v) { - def[code] = {arg: param, text: v}; - }); - if (!(code in def)) def[code] = value; - } else { - new Function("def", "def['" + code + "']=" + value)(def); - } - } - return ''; - }) - .replace(c.use || skip, function (m, code) { - if (c.useParams) code = code.replace(c.useParams, function (m, s, d, param) { - if (def[d] && def[d].arg && param) { - var rw = (d + ":" + param).replace(/'|\\/g, '_'); - def.__exp = def.__exp || {}; - def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2"); - return s + "def.__exp['" + rw + "']"; - } - }); - var v = new Function("def", "return " + code)(def); - return v ? resolveDefs(c, v, def) : v; - }); - } - - function unescape(code) { - return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, ' '); - } - - doT.template = function (tmpl, c, def) { - c = c || doT.templateSettings; - var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, - str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl; - - str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ') - .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str) - .replace(/'|\\/g, '\\$&') - .replace(c.interpolate || skip, function (m, code) { - return cse.start + unescape(code) + cse.end; - }) - .replace(c.encode || skip, function (m, code) { - needhtmlencode = true; - return cse.start + unescape(code) + cse.endencode; - }) - .replace(c.conditional || skip, function (m, code) { - return (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='"); - }) - .replace(c.conditionalElse || skip, function (m, code) { - return (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='"); - }) - .replace(c.iterate || skip, function (m, iterate, vname, iname) { - if (!iterate) return "';} } out+='"; - sid += 1; - vname = vname || "value"; - iname = iname || "index"; - iterate = unescape(iterate); - var arrayName = "arr" + sid; - return "';var " + arrayName + "=" + iterate + ";if(" + arrayName + " && " + arrayName + ".length > 0){var " + vname + "," + iname + "=-1,l" + sid + "=" + arrayName + ".length-1;while(" + iname + " 0){var " + vname + ";for( var " + iname + " in " + objectName + "){ if (!" + objectName + ".hasOwnProperty(" + iname + ")) continue; " + vname + "=" + objectName + "[" + iname + "];out+='"; - }) - .replace(c.empty || skip, function (m) { - return "';}}else{if(true){out+='"; // The "if(true)" condition is required to account for the for tag closing with two brackets - }) - .replace(c.evaluate || skip, function (m, code) { - return "';" + unescape(code) + "out+='"; - }) - + "';return out;") - .replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r') - .replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, '') - .replace(/(\s|;|\}|^|\{)out\+=''\+/g, '$1out+='); - - if (needhtmlencode && c.selfcontained) { - str = "String.prototype.encodeHTML=(" + encodeHTMLSource.toString() + "());" + str; - } - try { - return new Function(c.varname, str); - } catch (e) { - if (typeof console !== 'undefined') console.log("Could not create a template function: " + str); - throw e; - } - }; - - doT.compile = function (tmpl, def) { - return doT.template(tmpl, null, def); - }; -}()); \ No newline at end of file diff --git a/nano/js/libraries/jquery.timers.js b/nano/js/libraries/jquery.timers.js deleted file mode 100644 index 7001e503108..00000000000 --- a/nano/js/libraries/jquery.timers.js +++ /dev/null @@ -1,4 +0,0 @@ -jQuery.fn.extend({everyTime:function(c,a,d,b){return this.each(function(){jQuery.timer.add(this,c,a,d,b)})},oneTime:function(c,a,d){return this.each(function(){jQuery.timer.add(this,c,a,d,1)})},stopTime:function(c,a){return this.each(function(){jQuery.timer.remove(this,c,a)})}}); -jQuery.extend({timer:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1E3,das:1E4,hs:1E5,ks:1E6},timeParse:function(c){if(c==undefined||c==null)return null;var a=this.regex.exec(jQuery.trim(c.toString()));return a[2]?parseFloat(a[1])*(this.powers[a[2]]||1):c},add:function(c,a,d,b,e){var g=0;if(jQuery.isFunction(d)){e||(e=b);b=d;d=a}a=jQuery.timer.timeParse(a);if(!(typeof a!="number"||isNaN(a)||a<0)){if(typeof e!="number"||isNaN(e)||e<0)e= -0;e=e||0;var f=jQuery.data(c,this.dataKey)||jQuery.data(c,this.dataKey,{});f[d]||(f[d]={});b.timerID=b.timerID||this.guid++;var h=function(){if(++g>e&&e!==0||b.call(c,g)===false)jQuery.timer.remove(c,d,b)};h.timerID=b.timerID;f[d][b.timerID]||(f[d][b.timerID]=window.setInterval(h,a));this.global.push(c)}},remove:function(c,a,d){var b=jQuery.data(c,this.dataKey),e;if(b){if(a){if(b[a]){if(d){if(d.timerID){window.clearInterval(b[a][d.timerID]);delete b[a][d.timerID]}}else for(d in b[a]){window.clearInterval(b[a][d]); -delete b[a][d]}for(e in b[a])break;if(!e){e=null;delete b[a]}}}else for(a in b)this.remove(c,a,d);for(e in b)break;e||jQuery.removeData(c,this.dataKey)}}}});jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(c,a){jQuery.timer.remove(a)})}); \ No newline at end of file diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js deleted file mode 100644 index 889c6a80424..00000000000 --- a/nano/js/nano_base_callbacks.js +++ /dev/null @@ -1,126 +0,0 @@ -// NanoBaseCallbacks is where the base callbacks (common to all templates) are stored -NanoBaseCallbacks = function () -{ - // _canClick is used to disable clicks for a short period after each click (to avoid mis-clicks) - var _canClick = true; - - var _baseBeforeUpdateCallbacks = {} - - var _baseAfterUpdateCallbacks = { - // this callback is triggered after new data is processed - // it updates the status/visibility icon and adds click event handling to buttons/links - status: function (updateData) { - var uiStatusClass; - if (updateData['config']['status'] == 2) - { - uiStatusClass = 'icon24 uiStatusGood'; - $('.linkActive').removeClass('inactive'); - } - else if (updateData['config']['status'] == 1) - { - uiStatusClass = 'icon24 uiStatusAverage'; - $('.linkActive').addClass('inactive'); - } - else - { - uiStatusClass = 'icon24 uiStatusBad' - $('.linkActive').addClass('inactive'); - } - $('#uiStatusIcon').attr('class', uiStatusClass); - - $('.linkActive').stopTime('linkPending'); - $('.linkActive').removeClass('linkPending'); - - $('.linkActive') - .off('click') - .on('click', function (event) { - event.preventDefault(); - var href = $(this).data('href'); - if (href != null && _canClick) - { - _canClick = false; - $('body').oneTime(300, 'enableClick', function () { - _canClick = true; - }); - if (updateData['config']['status'] == 2) - { - $(this).oneTime(300, 'linkPending', function () { - $(this).addClass('linkPending'); - }); - } - window.location.href = href; - } - }); - - return updateData; - }, - nanomap: function (updateData) { - $('.mapIcon') - .off('mouseenter mouseleave') - .on('mouseenter', - function (event) { - var self = this; - $('#uiMapTooltip') - .html($(this).children('.tooltip').html()) - .show() - .stopTime() - .oneTime(5000, 'hideTooltip', function () { - $(this).fadeOut(500); - }); - } - ); - - $('.zoomLink') - .off('click') - .on('click', function (event) { - event.preventDefault(); - var zoomLevel = $(this).data('zoomLevel'); - var uiMapObject = $('#uiMap'); - var uiMapWidth = uiMapObject.width() * zoomLevel; - var uiMapHeight = uiMapObject.height() * zoomLevel; - - uiMapObject.css({ - zoom: zoomLevel, - left: '50%', - top: '50%', - marginLeft: '-' + Math.floor(uiMapWidth / 2) + 'px', - marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px' - }); - }); - - $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png'); - - return updateData; - } - }; - - return { - addCallbacks: function () { - NanoStateManager.addBeforeUpdateCallbacks(_baseBeforeUpdateCallbacks); - NanoStateManager.addAfterUpdateCallbacks(_baseAfterUpdateCallbacks); - }, - removeCallbacks: function () { - for (var callbackKey in _baseBeforeUpdateCallbacks) - { - if (_baseBeforeUpdateCallbacks.hasOwnProperty(callbackKey)) - { - NanoStateManager.removeBeforeUpdateCallback(callbackKey); - } - } - for (var callbackKey in _baseAfterUpdateCallbacks) - { - if (_baseAfterUpdateCallbacks.hasOwnProperty(callbackKey)) - { - NanoStateManager.removeAfterUpdateCallback(callbackKey); - } - } - } - }; -} (); - - - - - - - diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js deleted file mode 100644 index 20e6160fed4..00000000000 --- a/nano/js/nano_base_helpers.js +++ /dev/null @@ -1,213 +0,0 @@ -// NanoBaseHelpers is where the base template helpers (common to all templates) are stored -NanoBaseHelpers = function () -{ - var _baseHelpers = { - // change ui styling to "syndicate mode" - syndicateMode: function() { - $('body').css("background-color","#8f1414"); - $('body').css("background-image","url('uiBackground-Syndicate.png')"); - $('body').css("background-position","50% 0"); - $('body').css("background-repeat","repeat-x"); - - $('#uiTitleFluff').css("background-image","url('uiTitleFluff-Syndicate.png')"); - $('#uiTitleFluff').css("background-position","50% 50%"); - $('#uiTitleFluff').css("background-repeat", "no-repeat"); - - return ''; - }, - // Generate a Byond link - link: function( text, icon, parameters, status, elementClass, elementId) { - - var iconHtml = ''; - var iconClass = 'noIcon'; - if (typeof icon != 'undefined' && icon) - { - iconHtml = '
'; - iconClass = 'hasIcon'; - } - - if (typeof elementClass == 'undefined' || !elementClass) - { - elementClass = 'link'; - } - - var elementIdHtml = ''; - if (typeof elementId != 'undefined' && elementId) - { - elementIdHtml = 'id="' + elementId + '"'; - } - - if (typeof status != 'undefined' && status) - { - return ''; - } - - return '
' + iconHtml + text + '
'; - }, - // Round a number to the nearest integer - round: function(number) { - return Math.round(number); - }, - // Returns the number fixed to 1 decimal - fixed: function(number) { - return Math.round(number * 10) / 10; - }, - // Round a number down to integer - floor: function(number) { - return Math.floor(number); - }, - // Round a number up to integer - ceil: function(number) { - return Math.ceil(number); - }, - // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?") - string: function() { - if (arguments.length == 0) - { - return ''; - } - else if (arguments.length == 1) - { - return arguments[0]; - } - else if (arguments.length > 1) - { - stringArgs = []; - for (var i = 1; i < arguments.length; i++) - { - stringArgs.push(arguments[i]); - } - return arguments[0].format(stringArgs); - } - return ''; - }, - formatNumber: function(x) { - // From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript - var parts = x.toString().split("."); - parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); - return parts.join("."); - }, - // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript - capitalizeFirstLetter: function(string) { - return string.charAt(0).toUpperCase() + string.slice(1); - }, - // Display a bar. Used to show health, capacity, etc. - displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { - - if (rangeMin < rangeMax) - { - if (value < rangeMin) - { - value = rangeMin; - } - else if (value > rangeMax) - { - value = rangeMax; - } - } - else - { - if (value > rangeMin) - { - value = rangeMin; - } - else if (value < rangeMax) - { - value = rangeMax; - } - } - - if (typeof styleClass == 'undefined' || !styleClass) - { - styleClass = ''; - } - - if (typeof showText == 'undefined' || !showText) - { - showText = ''; - } - - var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100); - - return '
' + showText + '
'; - }, - // Display DNA Blocks (for the DNA Modifier UI) - displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { - if (!dnaString) - { - return '
Please place a valid subject into the DNA modifier.
'; - } - - var characters = dnaString.split(''); - - var html = '
'; - var block = 1; - var subblock = 1; - for (index in characters) - { - if (!characters.hasOwnProperty(index) || typeof characters[index] === 'object') - { - continue; - } - - var parameters; - if (paramKey.toUpperCase() == 'UI') - { - parameters = { 'selectUIBlock' : block, 'selectUISubblock' : subblock }; - } - else - { - parameters = { 'selectSEBlock' : block, 'selectSESubblock' : subblock }; - } - - var status = 'linkActive'; - if (block == selectedBlock && subblock == selectedSubblock) - { - status = 'selected'; - } - - html += '' - - index++; - if (index % blockSize == 0 && index < characters.length) - { - block++; - subblock = 1; - html += '
'; - } - else - { - subblock++; - } - } - - html += '
'; - - return html; - } - }; - - return { - addHelpers: function () - { - NanoTemplate.addHelpers(_baseHelpers); - }, - removeHelpers: function () - { - for (var helperKey in _baseHelpers) - { - if (_baseHelpers.hasOwnProperty(helperKey)) - { - NanoTemplate.removeHelper(helperKey); - } - } - } - }; -} (); - - - - - - - diff --git a/nano/js/nano_state.js b/nano/js/nano_state.js deleted file mode 100644 index 198fa451246..00000000000 --- a/nano/js/nano_state.js +++ /dev/null @@ -1,121 +0,0 @@ -// This is the base state class, it is not to be used directly - -function NanoStateClass() { - /*if (typeof this.key != 'string' || !this.key.length) - { - alert('ERROR: Tried to create a state with an invalid state key: ' + this.key); - return; - } - - this.key = this.key.toLowerCase(); - - NanoStateManager.addState(this);*/ -} - -NanoStateClass.prototype.key = null; -NanoStateClass.prototype.layoutRendered = false; -NanoStateClass.prototype.contentRendered = false; -NanoStateClass.prototype.mapInitialised = false; - -NanoStateClass.prototype.isCurrent = function () { - return NanoStateManager.getCurrentState() == this; -}; - -NanoStateClass.prototype.onAdd = function (previousState) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoBaseCallbacks.addCallbacks(); - NanoBaseHelpers.addHelpers(); -}; - -NanoStateClass.prototype.onRemove = function (nextState) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoBaseCallbacks.removeCallbacks(); - NanoBaseHelpers.removeHelpers(); -}; - -NanoStateClass.prototype.onBeforeUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - data = NanoStateManager.executeBeforeUpdateCallbacks(data); - - return data; // Return data to continue, return false to prevent onUpdate and onAfterUpdate -}; - -NanoStateClass.prototype.onUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - try - { - if (!this.layoutRendered || (data['config'].hasOwnProperty('autoUpdateLayout') && data['config']['autoUpdateLayout'])) - { - $("#uiLayout").html(NanoTemplate.parse('layout', data)); // render the 'mail' template to the #mainTemplate div - this.layoutRendered = true; - } - if (!this.contentRendered || (data['config'].hasOwnProperty('autoUpdateContent') && data['config']['autoUpdateContent'])) - { - $("#uiContent").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div - this.contentRendered = true; - } - if (NanoTemplate.templateExists('mapContent')) - { - if (!this.mapInitialised) - { - // Add drag functionality to the map ui - $('#uiMap').draggable({ - handle : '#uiMapImage' - }); - - $('#uiMapTooltip') - .off('click') - .on('click', function (event) { - event.preventDefault(); - $(this).fadeOut(400); - }); - - this.mapInitialised = true; - } - - $("#uiMapContent").html(NanoTemplate.parse('mapContent', data)); // render the 'mapContent' template to the #uiMapContent div - - if (data['config'].hasOwnProperty('showMap') && data['config']['showMap']) - { - $('#uiContent').addClass('hidden'); - $('#uiMapWrapper').removeClass('hidden'); - } - else - { - $('#uiMapWrapper').addClass('hidden'); - $('#uiContent').removeClass('hidden'); - } - } - if (NanoTemplate.templateExists('mapHeader')) - { - $("#uiMapHeader").html(NanoTemplate.parse('mapHeader', data)); // render the 'mapHeader' template to the #uiMapHeader div - } - if (NanoTemplate.templateExists('mapFooter')) - { - $("#uiMapFooter").html(NanoTemplate.parse('mapFooter', data)); // render the 'mapFooter' template to the #uiMapFooter div - } - } - catch(error) - { - alert('ERROR: An error occurred while rendering the UI: ' + error.message); - return; - } -}; - -NanoStateClass.prototype.onAfterUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoStateManager.executeAfterUpdateCallbacks(data); -}; - -NanoStateClass.prototype.alertText = function (text) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - alert(text); -}; - - diff --git a/nano/js/nano_state_default.js b/nano/js/nano_state_default.js deleted file mode 100644 index 65493b8c87e..00000000000 --- a/nano/js/nano_state_default.js +++ /dev/null @@ -1,14 +0,0 @@ - -NanoStateDefaultClass.inheritsFrom(NanoStateClass); -var NanoStateDefault = new NanoStateDefaultClass(); - -function NanoStateDefaultClass() { - - this.key = 'default'; - - //this.parent.constructor.call(this); - - this.key = this.key.toLowerCase(); - - NanoStateManager.addState(this); -} \ No newline at end of file diff --git a/nano/js/nano_state_manager.js b/nano/js/nano_state_manager.js deleted file mode 100644 index 84de1d1c89e..00000000000 --- a/nano/js/nano_state_manager.js +++ /dev/null @@ -1,220 +0,0 @@ -// NanoStateManager handles data from the server and uses it to render templates -NanoStateManager = function () -{ - // _isInitialised is set to true when all of this ui's templates have been processed/rendered - var _isInitialised = false; - - // the data for this ui - var _data = null; - - // this is an array of callbacks which are called when new data arrives, before it is processed - var _beforeUpdateCallbacks = {}; - // this is an array of callbacks which are called when new data arrives, before it is processed - var _afterUpdateCallbacks = {}; - - // this is an array of state objects, these can be used to provide custom javascript logic - var _states = {}; - - var _currentState = null; - - // the init function is called when the ui has loaded - // this function sets up the templates and base functionality - var init = function () - { - // We store initialData and templateData in the body tag, it's as good a place as any - _data = $('body').data('initialData'); - - if (_data == null || !_data.hasOwnProperty('config') || !_data.hasOwnProperty('data')) - { - alert('Error: Initial data did not load correctly.'); - } - - var stateKey = 'default'; - if (_data['config'].hasOwnProperty('stateKey') && _data['config']['stateKey']) - { - stateKey = _data['config']['stateKey'].toLowerCase(); - } - - NanoStateManager.setCurrentState(stateKey); - - $(document).on('templatesLoaded', function () { - doUpdate(_data); - - _isInitialised = true; - }); - }; - - // Receive update data from the server - var receiveUpdateData = function (jsonString) - { - var updateData; - try - { - // parse the JSON string from the server into a JSON object - updateData = jQuery.parseJSON(jsonString); - } - catch (error) - { - alert(error.Message); - return; - } - - if (!updateData.hasOwnProperty('data')) - { - if (_data && _data.hasOwnProperty('data')) - { - updateData['data'] = _data['data']; - } - else - { - updateData['data'] = {}; - } - } - - if (_isInitialised) // all templates have been registered, so render them - { - doUpdate(updateData); - } - else - { - _data = updateData; // all templates have not been registered. We set _data directly here which will be applied after the template is loaded with the initial data - } - }; - - // This function does the update by calling the methods on the current state - var doUpdate = function (data) - { - if (_currentState == null) - { - return; - } - - data = _currentState.onBeforeUpdate(data); - - if (data === false) - { - alert('data is false, return'); - return; // A beforeUpdateCallback returned a false value, this prevents the render from occuring - } - - _data = data; - - _currentState.onUpdate(_data); - - _currentState.onAfterUpdate(_data); - }; - - // Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing and potential modification - var executeCallbacks = function (callbacks, data) - { - for (var key in callbacks) - { - if (callbacks.hasOwnProperty(key) && jQuery.isFunction(callbacks[key])) - { - data = callbacks[key].call(this, data); - } - } - - return data; - }; - - return { - init: function () - { - init(); - }, - receiveUpdateData: function (jsonString) - { - receiveUpdateData(jsonString); - }, - addBeforeUpdateCallback: function (key, callbackFunction) - { - _beforeUpdateCallbacks[key] = callbackFunction; - }, - addBeforeUpdateCallbacks: function (callbacks) { - for (var callbackKey in callbacks) { - if (!callbacks.hasOwnProperty(callbackKey)) - { - continue; - } - NanoStateManager.addBeforeUpdateCallback(callbackKey, callbacks[callbackKey]); - } - }, - removeBeforeUpdateCallback: function (key) - { - if (_beforeUpdateCallbacks.hasOwnProperty(key)) - { - delete _beforeUpdateCallbacks[key]; - } - }, - executeBeforeUpdateCallbacks: function (data) { - return executeCallbacks(_beforeUpdateCallbacks, data); - }, - addAfterUpdateCallback: function (key, callbackFunction) - { - _afterUpdateCallbacks[key] = callbackFunction; - }, - addAfterUpdateCallbacks: function (callbacks) { - for (var callbackKey in callbacks) { - if (!callbacks.hasOwnProperty(callbackKey)) - { - continue; - } - NanoStateManager.addAfterUpdateCallback(callbackKey, callbacks[callbackKey]); - } - }, - removeAfterUpdateCallback: function (key) - { - if (_afterUpdateCallbacks.hasOwnProperty(key)) - { - delete _afterUpdateCallbacks[key]; - } - }, - executeAfterUpdateCallbacks: function (data) { - return executeCallbacks(_afterUpdateCallbacks, data); - }, - addState: function (state) - { - if (!(state instanceof NanoStateClass)) - { - alert('ERROR: Attempted to add a state which is not instanceof NanoStateClass'); - return; - } - if (!state.key) - { - alert('ERROR: Attempted to add a state with an invalid stateKey'); - return; - } - _states[state.key] = state; - }, - setCurrentState: function (stateKey) - { - if (typeof stateKey == 'undefined' || !stateKey) { - alert('ERROR: No state key was passed!'); - return false; - } - if (!_states.hasOwnProperty(stateKey)) - { - alert('ERROR: Attempted to set a current state which does not exist: ' + stateKey); - return false; - } - - var previousState = _currentState; - - _currentState = _states[stateKey]; - - if (previousState != null) { - previousState.onRemove(_currentState); - } - - _currentState.onAdd(previousState); - - return true; - }, - getCurrentState: function () - { - return _currentState; - } - }; -} (); - \ No newline at end of file diff --git a/nano/js/nano_template.js b/nano/js/nano_template.js deleted file mode 100644 index 877f2315bf1..00000000000 --- a/nano/js/nano_template.js +++ /dev/null @@ -1,135 +0,0 @@ - -var NanoTemplate = function () { - - var _templateData = {}; - - var _templates = {}; - var _compiledTemplates = {}; - - var _helpers = {}; - - var init = function () { - // We store templateData in the body tag, it's as good a place as any - _templateData = $('body').data('templateData'); - - if (_templateData == null) - { - alert('Error: Template data did not load correctly.'); - } - - loadNextTemplate(); - }; - - var loadNextTemplate = function () { - // we count the number of templates for this ui so that we know when they've all been rendered - var templateCount = Object.size(_templateData); - - if (!templateCount) - { - $(document).trigger('templatesLoaded'); - return; - } - - // load markup for each template and register it - for (var key in _templateData) - { - if (!_templateData.hasOwnProperty(key)) - { - continue; - } - - $.when($.ajax({ - url: _templateData[key], - cache: false, - dataType: 'text' - })) - .done(function(templateMarkup) { - - templateMarkup += '
'; - - try - { - NanoTemplate.addTemplate(key, templateMarkup); - } - catch(error) - { - alert('ERROR: An error occurred while loading the UI: ' + error.message); - return; - } - - delete _templateData[key]; - - loadNextTemplate(); - }) - .fail(function () { - alert('ERROR: Loading template ' + key + '(' + _templateData[key] + ') failed!'); - }); - - return; - } - } - - var compileTemplates = function () { - - for (var key in _templates) { - try { - _compiledTemplates[key] = doT.template(_templates[key], null, _templates) - } - catch (error) { - alert(error.message); - } - } - }; - - return { - init: function () { - init(); - }, - addTemplate: function (key, templateString) { - _templates[key] = templateString; - }, - templateExists: function (key) { - return _templates.hasOwnProperty(key); - }, - parse: function (templateKey, data) { - if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) { - if (!_templates.hasOwnProperty(templateKey)) { - alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!'); - return '

Template error (does not exist)

'; - } - compileTemplates(); - } - if (typeof _compiledTemplates[templateKey] != 'function') { - alert(_compiledTemplates[templateKey]); - alert('ERROR: Template "' + templateKey + '" failed to compile!'); - return '

Template error (failed to compile)

'; - } - return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers); - }, - addHelper: function (helperName, helperFunction) { - if (!jQuery.isFunction(helperFunction)) { - alert('NanoTemplate.addHelper failed to add ' + helperName + ' as it is not a function.'); - return; - } - - _helpers[helperName] = helperFunction; - }, - addHelpers: function (helpers) { - for (var helperName in helpers) { - if (!helpers.hasOwnProperty(helperName)) - { - continue; - } - NanoTemplate.addHelper(helperName, helpers[helperName]); - } - }, - removeHelper: function (helperName) { - if (helpers.hasOwnProperty(helperName)) - { - delete _helpers[helperName]; - } - } - } -}(); - - diff --git a/nano/js/nano_utility.js b/nano/js/nano_utility.js deleted file mode 100644 index 59a4b2a24a6..00000000000 --- a/nano/js/nano_utility.js +++ /dev/null @@ -1,161 +0,0 @@ -// NanoUtility is the place to store utility functions -var NanoUtility = function () -{ - var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter - - return { - init: function () - { - var body = $('body'); // We store data in the body tag, it's as good a place as any - - _urlParameters = body.data('urlParameters'); - }, - // generate a Byond href, combines _urlParameters with parameters - generateHref: function (parameters) - { - var queryString = '?'; - - for (var key in _urlParameters) - { - if (_urlParameters.hasOwnProperty(key)) - { - if (queryString !== '?') - { - queryString += ';'; - } - queryString += key + '=' + _urlParameters[key]; - } - } - - for (var key in parameters) - { - if (parameters.hasOwnProperty(key)) - { - if (queryString !== '?') - { - queryString += ';'; - } - queryString += key + '=' + parameters[key]; - } - } - return queryString; - } - } -} (); - -if (typeof jQuery == 'undefined') { - alert('ERROR: Javascript library failed to load!'); -} -if (typeof doT == 'undefined') { - alert('ERROR: Template engine failed to load!'); -} - -// All scripts are initialised here, this allows control of init order -$(document).ready(function () { - NanoUtility.init(); - NanoStateManager.init(); - NanoTemplate.init(); -}); - -if (!Array.prototype.indexOf) -{ - Array.prototype.indexOf = function(elt /*, from*/) - { - var len = this.length; - - var from = Number(arguments[1]) || 0; - from = (from < 0) - ? Math.ceil(from) - : Math.floor(from); - if (from < 0) - from += len; - - for (; from < len; from++) - { - if (from in this && - this[from] === elt) - return from; - } - return -1; - }; -}; - -if (!String.prototype.format) -{ - String.prototype.format = function (args) { - var str = this; - return str.replace(String.prototype.format.regex, function(item) { - var intVal = parseInt(item.substring(1, item.length - 1)); - var replace; - if (intVal >= 0) { - replace = args[intVal]; - } else if (intVal === -1) { - replace = "{"; - } else if (intVal === -2) { - replace = "}"; - } else { - replace = ""; - } - return replace; - }); - }; - String.prototype.format.regex = new RegExp("{-?[0-9]+}", "g"); -}; - -Object.size = function(obj) { - var size = 0, key; - for (var key in obj) { - if (obj.hasOwnProperty(key)) size++; - } - return size; -}; - -if(!window.console) { - window.console = { - log : function(str) { - return false; - } - }; -}; - -String.prototype.toTitleCase = function () { - var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i; - - return this.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) { - if (index > 0 && index + p1.length !== title.length && - p1.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && - title.charAt(index - 1).search(/[^\s-]/) < 0) { - return match.toLowerCase(); - } - - if (p1.substr(1).search(/[A-Z]|\../) > -1) { - return match; - } - - return match.charAt(0).toUpperCase() + match.substr(1); - }); -}; - -$.ajaxSetup({ - cache: false -}); - -Function.prototype.inheritsFrom = function (parentClassOrObject) { - this.prototype = new parentClassOrObject; - this.prototype.constructor = this; - this.prototype.parent = parentClassOrObject.prototype; - return this; -}; - -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -// Replicate the ckey proc from BYOND -if (!String.prototype.ckey) { - String.prototype.ckey = function () { - return this.replace(/\W/g, '').toLowerCase(); - }; -} \ No newline at end of file diff --git a/nano/mapbase1024.png b/nano/mapbase1024.png deleted file mode 100644 index a927a71b6e7b31c1c8a4c02341bd9d56210caac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525330 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 k19V`uD7lb1PL3ZT&73Y)<%etFG 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

OZtWj(Uf8j+b)su{gA5XnI5^vM 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 w$|)mQ<2&3=;A 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 - {{:helper.link('Overall info', 'note', {'state' :'status'}, null, data.state == 'status' ? 'selected' : null)}} - {{:helper.link('Details', 'note', {'state' : 'engines'}, null, data.state == 'engines' ? 'selected' : null)}} - -
-
-
- Global controls: -
-
- {{:helper.link(data.global_state ? 'Shut all down' : 'Power all up', 'power', {'global_toggle' : 1}, null, data.global_state ? 'selected' : null)}} -
-
-
-
- Thrust limit: -
-
- {{:helper.link('', 'circle-plus', { 'global_limit' : 0.1}, null, null)}} - {{:helper.link(data.global_limit+'%', null, { 'set_global_limit' : 1 }, null, null)}} - {{:helper.link('', 'circle-minus', { 'global_limit' : -0.1}, null, null)}} -
-
-
-
- Total thrust: -
-
- {{:data.total_thrust}} -
-
-
-{{if data.state == "engines"}} - {{if data.engines_info}} - {{for data.engines_info}} -
-
- Engine #{{:(index + 1)}}: -
-
- {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? value.eng_on == 1 ? 'linkOn' : 'yellowButton' : null)}} -
-
-
-
- Type: -
-
- {{:value.eng_type}} -
-
-
-
- Status: -
-
- {{:value.eng_on ? value.eng_on == 1 ? 'Online' : 'Booting' : 'Offline'}}
- {{:value.eng_status}} -
-
-
-
- Current thrust: -
-
- {{:value.eng_thrust}} -
-
-
-
- Thrust limit: -
-
- {{:helper.link('', 'circle-plus', { 'limit' : 0.1, 'engine' : value.eng_reference }, null, null)}} - {{:helper.link(value.eng_thrust_limiter+'%', null, { 'set_limit' : 1, 'engine' : value.eng_reference }, null, null)}} - {{:helper.link('', 'circle-minus', { 'limit' : -0.1, 'engine' : value.eng_reference }, null, null)}} -
-
-
- {{/for}} - {{/if}} -{{/if}} -{{if data.state == "status"}} - {{if data.engines_info}} - {{for data.engines_info}} -
-
-
- Engine #{{:(index + 1)}}: -
-
- {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? value.eng_on == 1 ? 'linkOn' : 'yellowButton' : null)}} -
-
-
-
- Thrust: -
- Thrust limit: -
-
- {{:value.eng_thrust}} -
- {{:value.eng_thrust_limiter}}% -
-
-
- {{/for}} - {{/if}} -{{/if}} \ No newline at end of file diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl deleted file mode 100644 index b32bb621c8e..00000000000 --- a/nano/templates/hardsuit.tmpl +++ /dev/null @@ -1,257 +0,0 @@ - - - - -{{if data.interfacelock || data.malf > 0}} -
-- HARDSUIT INTERFACE OFFLINE --
-{{else}} - {{if data.aicontrol && data.ai != 1}} -
-- HARDSUIT CONTROL OVERRIDDEN BY AI --
- {{else}} -
-
-
- Power supply -
-
- {{:helper.displayBar(data.chargestatus, 0, 50, (data.chargestatus >= 35) ? 'good' : (data.chargestatus >= 15) ? 'average' : 'bad')}} {{:data.charge}}/{{:data.maxcharge}} -
-
-
-
-
- AI control: -
-
- {{if data.aioverride}} -
ENABLED
- {{else}} -
DISABLED
- {{/if}} -
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_ai_control' : 1}, null)}} -
-
-
-
- Suit status: -
-
- {{if data.sealing == 1}} -
PROCESSING
- {{else}} - {{if data.seals == 1}} -
INACTIVE
- {{else}} -
ACTIVE
- {{/if}} - {{/if}} -
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_seals' : 1}, null)}} -
-
-
-
- Cover status: -
-
- {{if data.emagged || !data.securitycheck}} -
ERROR - MAINTENANCE LOCK CONTROL OFFLINE
- {{else}} - {{if data.coverlock}} -
LOCKED
- {{else}} -
UNLOCKED
- {{/if}} - {{/if}} -
-
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_suit_lock' : 1}, null)}} -
-
-
-
- -

Hardware

-

Suit pieces

- -
-
-
- Helmet: -
-
- {{:helper.capitalizeFirstLetter(data.helmet)}} -
- {{if data.sealing != 1}} -
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}} -
- {{/if}} -
-
-
- Gauntlets: -
-
- {{:helper.capitalizeFirstLetter(data.gauntlets)}} -
- {{if data.sealing != 1}} -
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'gauntlets'}, null)}} -
- {{/if}} -
-
-
- Boots: -
-
- {{:helper.capitalizeFirstLetter(data.boots)}} -
- {{if data.sealing != 1}} -
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'boots'}, null)}} -
- {{/if}} -
-
-
- Chestpiece: -
-
- {{:helper.capitalizeFirstLetter(data.chest)}} -
- {{if data.sealing != 1}} -
- {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'chest'}, null)}} -
- {{/if}} -
-
- -

System modules

- {{if data.seals == 1 || data.sealing == 1}} -

HARDSUIT SYSTEMS OFFLINE

- {{else}} -

Selected primary system: - {{if data.primarysystem}} - {{:helper.capitalizeFirstLetter(data.primarysystem)}} - {{else}} - None - {{/if}} -

- {{if data.modules}} -
- {{for data.modules}} -
-
-
-
{{:helper.capitalizeFirstLetter(value.name)}}
- {{if value.damage > 0}} -
- {{if value.damage == 1}} - (
damaged
) - {{else}} - (
destroyed
) - {{/if}} -
- {{/if}} -
-
- Engage: {{:value.engagecost}} - Activate: {{:value.activecost}} - Passive: {{:value.passivecost}} -
-
- {{:value.desc}} -
-
- {{if value.can_use == 1}} -
- {{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}} -
- {{/if}} - {{if value.can_select == 1}} -
- {{if value.name == data.primarysystem}} -
SELECTED
- {{else}} - {{:helper.link('Select', 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select'}, null)}} - {{/if}} -
- {{/if}} - {{if value.can_toggle == 1}} -
- {{if value.is_active == 1}} - {{:helper.link(value.deactivatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'deactivate'}, null)}} - {{else}} - {{:helper.link(value.activatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'activate'}, null)}} - {{/if}} -
- {{/if}} -
-
-
-
- {{if value.charges}} -
Stored charges
-
Selected:
{{:helper.capitalizeFirstLetter(value.chargetype)}} - {{for value.charges :itemValue:itemIndex}} -
- {{:helper.link(helper.capitalizeFirstLetter(itemValue.caption), null, {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}} -
- {{/for}} - {{/if}} -
-
-
- {{/for}} -
- {{else}} - None. - {{/if}} - {{/if}} - {{/if}} -{{/if}} \ No newline at end of file diff --git a/nano/templates/layout_basic.tmpl b/nano/templates/layout_basic.tmpl deleted file mode 100644 index 67fcd51f805..00000000000 --- a/nano/templates/layout_basic.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -
-
Initiating...
-
\ No newline at end of file diff --git a/nano/templates/layout_default.tmpl b/nano/templates/layout_default.tmpl deleted file mode 100644 index 45c304ae745..00000000000 --- a/nano/templates/layout_default.tmpl +++ /dev/null @@ -1,73 +0,0 @@ -{{if data._PC}} -
-
- - {{if data._PC.batteryicon && data._PC.showbatteryicon}} -
- {{/if}} - {{if data._PC.batterypercent && data._PC.showbatteryicon}} - {{:data._PC.batterypercent}} - {{/if}} - {{if data._PC.ntneticon}} - - {{/if}} - {{if data._PC.apclinkicon}} - - {{/if}} - {{if data._PC.stationtime}} - {{:data._PC.stationtime}} - {{/if}} - {{for data._PC.programheaders}} - - {{/for}} -
-
-
-
- - {{if data._PC.showexitprogram}} -
{{:helper.link('Minimize', null, {'PC_minimize' : 1})}} - {{:helper.link('Exit', null, {'PC_exit' : 1})}} - {{/if}} -
-
-
-{{/if}} - -
{{:config.title}}
- -
-
Initiating...
-
diff --git a/package.json b/package.json new file mode 100644 index 00000000000..1d123f3ffce --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "devDependencies": { + "@biomejs/biome": "^2.1.2", + "prettier": "^3.6.2" + }, + "scripts": { + "tgui:fix": "biome check --write --unsafe tgui", + "tgui:lint": "biome lint tgui" + } +} diff --git a/tgui/.eslintignore b/tgui/.eslintignore deleted file mode 100644 index a59187b933a..00000000000 --- a/tgui/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -/.yarn/** -/**/node_modules -/**/*.bundle.* -/**/*.chunk.* -/**/*.hot-update.* -/packages/inferno/** diff --git a/tgui/.eslintrc-sonar.yml b/tgui/.eslintrc-sonar.yml deleted file mode 100644 index 3cdd49f889e..00000000000 --- a/tgui/.eslintrc-sonar.yml +++ /dev/null @@ -1,26 +0,0 @@ -rules: - # radar/cognitive-complexity: error - radar/max-switch-cases: error - radar/no-all-duplicated-branches: error - radar/no-collapsible-if: error - radar/no-collection-size-mischeck: error - radar/no-duplicate-string: error - radar/no-duplicated-branches: error - radar/no-element-overwrite: error - radar/no-extra-arguments: error - radar/no-identical-conditions: error - radar/no-identical-expressions: error - radar/no-identical-functions: error - radar/no-inverted-boolean-check: error - radar/no-one-iteration-loop: error - radar/no-redundant-boolean: error - radar/no-redundant-jump: error - radar/no-same-line-conditional: error - radar/no-small-switch: error - radar/no-unused-collection: error - radar/no-use-of-empty-return-value: error - radar/no-useless-catch: error - radar/prefer-immediate-return: error - radar/prefer-object-literal: error - radar/prefer-single-boolean-return: error - radar/prefer-while: error diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml deleted file mode 100644 index 4ab8f84dccc..00000000000 --- a/tgui/.eslintrc.yml +++ /dev/null @@ -1,766 +0,0 @@ -root: true -extends: prettier -parser: '@typescript-eslint/parser' -parserOptions: - ecmaVersion: 2020 - sourceType: module - ecmaFeatures: - jsx: true -env: - es6: true - browser: true - node: true -plugins: - - radar - - react - - unused-imports -settings: - react: - version: '16.10' -rules: - ## Possible Errors - ## ---------------------------------------- - ## Enforce “for” loop update clause moving the counter in the right - ## direction. - # for-direction: error - ## Enforce return statements in getters - # getter-return: error - ## Disallow using an async function as a Promise executor - no-async-promise-executor: error - ## Disallow await inside of loops - # no-await-in-loop: error - ## Disallow comparing against -0 - # no-compare-neg-zero: error - ## Disallow assignment operators in conditional expressions - no-cond-assign: error - ## Disallow the use of console - # no-console: error - ## Disallow constant expressions in conditions - # no-constant-condition: error - ## Disallow control characters in regular expressions - # no-control-regex: error - ## Disallow the use of debugger - no-debugger: error - ## Disallow duplicate arguments in function definitions - no-dupe-args: error - ## Disallow duplicate keys in object literals - no-dupe-keys: error - ## Disallow duplicate case labels - no-duplicate-case: error - ## Disallow empty block statements - # no-empty: error - ## Disallow empty character classes in regular expressions - no-empty-character-class: error - ## Disallow reassigning exceptions in catch clauses - no-ex-assign: error - ## Disallow unnecessary boolean casts - no-extra-boolean-cast: error - ## Disallow unnecessary parentheses - # no-extra-parens: warn - ## Disallow unnecessary semicolons - no-extra-semi: error - ## Disallow reassigning function declarations - no-func-assign: error - ## Disallow assigning to imported bindings - no-import-assign: error - ## Disallow variable or function declarations in nested blocks - no-inner-declarations: error - ## Disallow invalid regular expression strings in RegExp constructors - no-invalid-regexp: error - ## Disallow irregular whitespace - no-irregular-whitespace: error - ## Disallow characters which are made with multiple code points in character - ## class syntax - no-misleading-character-class: error - ## Disallow calling global object properties as functions - no-obj-calls: error - ## Disallow calling some Object.prototype methods directly on objects - no-prototype-builtins: error - ## Disallow multiple spaces in regular expressions - no-regex-spaces: error - ## Disallow sparse arrays - no-sparse-arrays: error - ## Disallow template literal placeholder syntax in regular strings - no-template-curly-in-string: error - ## Disallow confusing multiline expressions - no-unexpected-multiline: error - ## Disallow unreachable code after return, throw, continue, and break - ## statements - # no-unreachable: warn - ## Disallow control flow statements in finally blocks - no-unsafe-finally: error - ## Disallow negating the left operand of relational operators - no-unsafe-negation: error - ## Disallow assignments that can lead to race conditions due to usage of - ## await or yield - # require-atomic-updates: error - ## Require calls to isNaN() when checking for NaN - use-isnan: error - ## Enforce comparing typeof expressions against valid strings - valid-typeof: error - - ## Best practices - ## ---------------------------------------- - ## Enforce getter and setter pairs in objects and classes - # accessor-pairs: error - ## Enforce return statements in callbacks of array methods - # array-callback-return: error - ## Enforce the use of variables within the scope they are defined - # block-scoped-var: error - ## Enforce that class methods utilize this - # class-methods-use-this: error - ## Enforce a maximum cyclomatic complexity allowed in a program - complexity: [error, { max: 50 }] - ## Require return statements to either always or never specify values - # consistent-return: error - ## Enforce consistent brace style for all control statements - curly: [error, multi-line] - ## Require default cases in switch statements - # default-case: error - ## Enforce default parameters to be last - # default-param-last: error - ## Enforce consistent newlines before and after dots - dot-location: [error, property] - ## Enforce dot notation whenever possible - # dot-notation: error - ## Require the use of === and !== - eqeqeq: [error, always] - ## Require for-in loops to include an if statement - # guard-for-in: error - ## Enforce a maximum number of classes per file - # max-classes-per-file: error - ## Disallow the use of alert, confirm, and prompt - # no-alert: error - ## Disallow the use of arguments.caller or arguments.callee - # no-caller: error - ## Disallow lexical declarations in case clauses - no-case-declarations: error - ## Disallow division operators explicitly at the beginning of regular - ## expressions - # no-div-regex: error - ## Disallow else blocks after return statements in if statements - # no-else-return: error - ## Disallow empty functions - # no-empty-function: error - ## Disallow empty destructuring patterns - no-empty-pattern: error - ## Disallow null comparisons without type-checking operators - # no-eq-null: error - ## Disallow the use of eval() - # no-eval: error - ## Disallow extending native types - # no-extend-native: error - ## Disallow unnecessary calls to .bind() - # no-extra-bind: error - ## Disallow unnecessary labels - # no-extra-label: error - ## Disallow fallthrough of case statements - no-fallthrough: error - ## Disallow leading or trailing decimal points in numeric literals - # no-floating-decimal: error - ## Disallow assignments to native objects or read-only global variables - no-global-assign: error - ## Disallow shorthand type conversions - # no-implicit-coercion: error - ## Disallow variable and function declarations in the global scope - # no-implicit-globals: error - ## Disallow the use of eval()-like methods - # no-implied-eval: error - ## Disallow this keywords outside of classes or class-like objects - # no-invalid-this: error - ## Disallow the use of the __iterator__ property - # no-iterator: error - ## Disallow labeled statements - # no-labels: error - ## Disallow unnecessary nested blocks - # no-lone-blocks: error - ## Disallow function declarations that contain unsafe references inside - ## loop statements - # no-loop-func: error - ## Disallow magic numbers - # no-magic-numbers: error - ## Disallow multiple spaces - no-multi-spaces: warn - ## Disallow multiline strings - # no-multi-str: error - ## Disallow new operators outside of assignments or comparisons - # no-new: error - ## Disallow new operators with the Function object - # no-new-func: error - ## Disallow new operators with the String, Number, and Boolean objects - # no-new-wrappers: error - ## Disallow octal literals - no-octal: error - ## Disallow octal escape sequences in string literals - no-octal-escape: error - ## Disallow reassigning function parameters - # no-param-reassign: error - ## Disallow the use of the __proto__ property - # no-proto: error - ## Disallow variable redeclaration - no-redeclare: error - ## Disallow certain properties on certain objects - # no-restricted-properties: error - ## Disallow assignment operators in return statements - no-return-assign: error - ## Disallow unnecessary return await - # no-return-await: error - ## Disallow javascript: urls - # no-script-url: error - ## Disallow assignments where both sides are exactly the same - no-self-assign: error - ## Disallow comparisons where both sides are exactly the same - # no-self-compare: error - ## Disallow comma operators - no-sequences: error - ## Disallow throwing literals as exceptions - # no-throw-literal: error - ## Disallow unmodified loop conditions - # no-unmodified-loop-condition: error - ## Disallow unused expressions - # no-unused-expressions: error - ## Disallow unused labels - no-unused-labels: warn - ## Disallow unnecessary calls to .call() and .apply() - # no-useless-call: error - ## Disallow unnecessary catch clauses - # no-useless-catch: error - ## Disallow unnecessary concatenation of literals or template literals - # no-useless-concat: error - ## Disallow unnecessary escape characters - no-useless-escape: warn - ## Disallow redundant return statements - # no-useless-return: error - ## Disallow void operators - # no-void: error - ## Disallow specified warning terms in comments - # no-warning-comments: error - ## Disallow with statements - no-with: error - ## Enforce using named capture group in regular expression - # prefer-named-capture-group: error - ## Require using Error objects as Promise rejection reasons - # prefer-promise-reject-errors: error - ## Disallow use of the RegExp constructor in favor of regular expression - ## literals - # prefer-regex-literals: error - ## Enforce the consistent use of the radix argument when using parseInt() - radix: error - ## Disallow async functions which have no await expression - # require-await: error - ## Enforce the use of u flag on RegExp - # require-unicode-regexp: error - ## Require var declarations be placed at the top of their containing scope - # vars-on-top: error - ## Require parentheses around immediate function invocations - # wrap-iife: error - ## Require or disallow “Yoda” conditions - # yoda: error - - ## Strict mode - ## ---------------------------------------- - ## Require or disallow strict mode directives - strict: error - - ## Variables - ## ---------------------------------------- - ## Require or disallow initialization in variable declarations - # init-declarations: error - ## Disallow deleting variables - no-delete-var: error - ## Disallow labels that share a name with a variable - # no-label-var: error - ## Disallow specified global variables - # no-restricted-globals: error - ## Disallow variable declarations from shadowing variables declared in - ## the outer scope - # no-shadow: error - ## Disallow identifiers from shadowing restricted names - no-shadow-restricted-names: error - ## Disallow the use of undeclared variables unless mentioned - ## in /*global*/ comments - ## NOTE: Pointless when TypeScript can check for this - # no-undef: error - ## Disallow initializing variables to undefined - no-undef-init: error - ## Disallow the use of undefined as an identifier - # no-undefined: error - ## Disallow unused variables - # no-unused-vars: error - ## Disallow the use of variables before they are defined - # no-use-before-define: error - - ## Code style - ## ---------------------------------------- - ## Enforce linebreaks after opening and before closing array brackets - array-bracket-newline: [error, consistent] - ## Enforce consistent spacing inside array brackets - array-bracket-spacing: [error, never] - ## Enforce line breaks after each array element - # array-element-newline: error - ## Disallow or enforce spaces inside of blocks after opening block and - ## before closing block - block-spacing: [error, always] - ## Enforce consistent brace style for blocks - # brace-style: [error, stroustrup, { allowSingleLine: false }] - ## Enforce camelcase naming convention - # camelcase: error - ## Enforce or disallow capitalization of the first letter of a comment - # capitalized-comments: error - ## Require or disallow trailing commas - comma-dangle: [ - error, - { - arrays: always-multiline, - objects: always-multiline, - imports: always-multiline, - exports: always-multiline, - functions: only-multiline, ## Optional on functions - }, - ] - ## Enforce consistent spacing before and after commas - comma-spacing: [error, { before: false, after: true }] - ## Enforce consistent comma style - comma-style: [error, last] - ## Enforce consistent spacing inside computed property brackets - computed-property-spacing: [error, never] - ## Enforce consistent naming when capturing the current execution context - # consistent-this: error - ## Require or disallow newline at the end of files - # eol-last: error - ## Require or disallow spacing between function identifiers and their - ## invocations - func-call-spacing: [error, never] - ## Require function names to match the name of the variable or property - ## to which they are assigned - # func-name-matching: error - ## Require or disallow named function expressions - # func-names: error - ## Enforce the consistent use of either function declarations or expressions - # func-style: [error, expression] - ## Enforce line breaks between arguments of a function call - # function-call-argument-newline: error - ## Enforce consistent line breaks inside function parentheses - ## NOTE: This rule does not honor a newline on opening paren. - # function-paren-newline: [error, never] - ## Disallow specified identifiers - # id-blacklist: error - ## Enforce minimum and maximum identifier lengths - # id-length: error - ## Require identifiers to match a specified regular expression - # id-match: error - ## Enforce the location of arrow function bodies - # implicit-arrow-linebreak: error - ## Enforce consistent indentation - # indent: [error, 2, { SwitchCase: 1 }] - ## Enforce the consistent use of either double or single quotes in JSX - ## attributes - # jsx-quotes: [error, prefer-double] - ## Enforce consistent spacing between keys and values in object literal - ## properties - # key-spacing: [error, { beforeColon: false, afterColon: true }] - ## Enforce consistent spacing before and after keywords - # keyword-spacing: [error, { before: true, after: true }] - ## Enforce position of line comments - # line-comment-position: error - ## Enforce consistent linebreak style - # linebreak-style: error - ## Require empty lines around comments - # lines-around-comment: error - ## Require or disallow an empty line between class members - # lines-between-class-members: error - ## Enforce a maximum depth that blocks can be nested - # max-depth: error - ## Enforce a maximum line length - # max-len: [error, { - # code: 80, - # ## Ignore imports - # ignorePattern: '^(import\s.+\sfrom\s|.*require\()', - # ignoreUrls: true, - # ignoreRegExpLiterals: true, - # ignoreStrings: true, - # ignoreTemplateLiterals: true, - # }] - ## Enforce a maximum number of lines per file - # max-lines: error - ## Enforce a maximum number of line of code in a function - # max-lines-per-function: error - ## Enforce a maximum depth that callbacks can be nested - # max-nested-callbacks: error - ## Enforce a maximum number of parameters in function definitions - # max-params: error - ## Enforce a maximum number of statements allowed in function blocks - # max-statements: error - ## Enforce a maximum number of statements allowed per line - # max-statements-per-line: error - ## Enforce a particular style for multiline comments - # multiline-comment-style: error - ## Enforce newlines between operands of ternary expressions - # multiline-ternary: [error, always-multiline] - ## Require constructor names to begin with a capital letter - # new-cap: error - ## Enforce or disallow parentheses when invoking a constructor with no - ## arguments - # new-parens: error - ## Require a newline after each call in a method chain - # newline-per-chained-call: error - ## Disallow Array constructors - # no-array-constructor: error - ## Disallow bitwise operators - # no-bitwise: error - ## Disallow continue statements - # no-continue: error - ## Disallow inline comments after code - # no-inline-comments: error - ## Disallow if statements as the only statement in else blocks - # no-lonely-if: error - ## Disallow mixed binary operators - # no-mixed-operators: error - ## Disallow mixed spaces and tabs for indentation - # no-mixed-spaces-and-tabs: error - ## Disallow use of chained assignment expressions - # no-multi-assign: error - ## Disallow multiple empty lines - # no-multiple-empty-lines: error - ## Disallow negated conditions - # no-negated-condition: error - ## Disallow nested ternary expressions - # no-nested-ternary: error - ## Disallow Object constructors - # no-new-object: error - ## Disallow the unary operators ++ and -- - # no-plusplus: error - ## Disallow specified syntax - # no-restricted-syntax: error - ## Disallow all tabs - # no-tabs: error - ## Disallow ternary operators - # no-ternary: error - ## Disallow trailing whitespace at the end of lines - # no-trailing-spaces: error - ## Disallow dangling underscores in identifiers - # no-underscore-dangle: error - ## Disallow ternary operators when simpler alternatives exist - # no-unneeded-ternary: error - ## Disallow whitespace before properties - # no-whitespace-before-property: error - ## Enforce the location of single-line statements - # nonblock-statement-body-position: error - ## Enforce consistent line breaks inside braces - # object-curly-newline: [error, { multiline: true }] - ## Enforce consistent spacing inside braces - object-curly-spacing: [error, always] - ## Enforce placing object properties on separate lines - # object-property-newline: error - ## Enforce variables to be declared either together or separately in - ## functions - # one-var: error - ## Require or disallow newlines around variable declarations - # one-var-declaration-per-line: error - ## Require or disallow assignment operator shorthand where possible - # operator-assignment: error - ## Enforce consistent linebreak style for operators - # operator-linebreak: [error, before] - ## Require or disallow padding within blocks - # padded-blocks: error - ## Require or disallow padding lines between statements - # padding-line-between-statements: error - ## Disallow using Object.assign with an object literal as the first - ## argument and prefer the use of object spread instead. - # prefer-object-spread: error - ## Require quotes around object literal property names - # quote-props: error - ## Enforce the consistent use of either backticks, double, or single quotes - # quotes: [error, single] - ## Require or disallow semicolons instead of ASI - semi: error - ## Enforce consistent spacing before and after semicolons - semi-spacing: [error, { before: false, after: true }] - ## Enforce location of semicolons - semi-style: [error, last] - ## Require object keys to be sorted - # sort-keys: error - ## Require variables within the same declaration block to be sorted - # sort-vars: error - ## Enforce consistent spacing before blocks - space-before-blocks: [error, always] - ## Enforce consistent spacing before function definition opening parenthesis - # space-before-function-paren: [error, { - # anonymous: always, - # named: never, - # asyncArrow: always, - # }] - ## Enforce consistent spacing inside parentheses - space-in-parens: [error, never] - ## Require spacing around infix operators - # space-infix-ops: error - ## Enforce consistent spacing before or after unary operators - # space-unary-ops: error - ## Enforce consistent spacing after the // or /* in a comment - spaced-comment: [error, always] - ## Enforce spacing around colons of switch statements - switch-colon-spacing: [error, { before: false, after: true }] - ## Require or disallow spacing between template tags and their literals - template-tag-spacing: [error, never] - ## Require or disallow Unicode byte order mark (BOM) - # unicode-bom: [error, never] - ## Require parenthesis around regex literals - # wrap-regex: error - - ## ES6 - ## ---------------------------------------- - ## Require braces around arrow function bodies - # arrow-body-style: error - ## Require parentheses around arrow function arguments - # arrow-parens: [error, as-needed] - ## Enforce consistent spacing before and after the arrow in arrow functions - arrow-spacing: [error, { before: true, after: true }] - ## Require super() calls in constructors - # constructor-super: error - ## Enforce consistent spacing around * operators in generator functions - generator-star-spacing: [error, { before: false, after: true }] - ## Disallow reassigning class members - no-class-assign: error - ## Disallow arrow functions where they could be confused with comparisons - # no-confusing-arrow: error - ## Disallow reassigning const variables - no-const-assign: error - ## Disallow duplicate class members - no-dupe-class-members: error - ## Disallow duplicate module imports - # no-duplicate-imports: error - ## Disallow new operators with the Symbol object - no-new-symbol: error - ## Disallow specified modules when loaded by import - # no-restricted-imports: error - ## Disallow this/super before calling super() in constructors - no-this-before-super: error - ## Disallow unnecessary computed property keys in object literals - # no-useless-computed-key: error - ## Disallow unnecessary constructors - # no-useless-constructor: error - ## Disallow renaming import, export, and destructured assignments to the - ## same name - # no-useless-rename: error - ## Require let or const instead of var - no-var: error - ## Require or disallow method and property shorthand syntax for object - ## literals - # object-shorthand: error - ## Require using arrow functions for callbacks - prefer-arrow-callback: error - ## Require const declarations for variables that are never reassigned after - ## declared - # prefer-const: error - ## Require destructuring from arrays and/or objects - # prefer-destructuring: error - ## Disallow parseInt() and Number.parseInt() in favor of binary, octal, and - ## hexadecimal literals - # prefer-numeric-literals: error - ## Require rest parameters instead of arguments - # prefer-rest-params: error - ## Require spread operators instead of .apply() - # prefer-spread: error - ## Require template literals instead of string concatenation - # prefer-template: error - ## Require generator functions to contain yield - # require-yield: error - ## Enforce spacing between rest and spread operators and their expressions - # rest-spread-spacing: error - ## Enforce sorted import declarations within modules - # sort-imports: error - ## Require symbol descriptions - # symbol-description: error - ## Require or disallow spacing around embedded expressions of template - ## strings - # template-curly-spacing: error - ## Require or disallow spacing around the * in yield* expressions - yield-star-spacing: [error, { before: false, after: true }] - - ## React - ## ---------------------------------------- - ## Enforces consistent naming for boolean props - react/boolean-prop-naming: error - ## Forbid "button" element without an explicit "type" attribute - react/button-has-type: error - ## Prevent extraneous defaultProps on components - react/default-props-match-prop-types: error - ## Rule enforces consistent usage of destructuring assignment in component - # react/destructuring-assignment: [error, always, { ignoreClassFields: true }] - ## Prevent missing displayName in a React component definition - # react/display-name: error - ## Forbid certain props on Components - # react/forbid-component-props: error - ## Forbid certain props on DOM Nodes - # react/forbid-dom-props: error - ## Forbid certain elements - # react/forbid-elements: error - ## Forbid certain propTypes - # react/forbid-prop-types: error - ## Forbid foreign propTypes - # react/forbid-foreign-prop-types: error - ## Prevent using this.state inside this.setState - react/no-access-state-in-setstate: error - ## Prevent using Array index in key props - # react/no-array-index-key: error - ## Prevent passing children as props - react/no-children-prop: error - ## Prevent usage of dangerous JSX properties - react/no-danger: error - ## Prevent problem with children and props.dangerouslySetInnerHTML - react/no-danger-with-children: error - ## Prevent usage of deprecated methods, including component lifecycle - ## methods - react/no-deprecated: error - ## Prevent usage of setState in componentDidMount - react/no-did-mount-set-state: error - ## Prevent usage of setState in componentDidUpdate - react/no-did-update-set-state: error - ## Prevent direct mutation of this.state - react/no-direct-mutation-state: error - ## Prevent usage of findDOMNode - react/no-find-dom-node: error - ## Prevent usage of isMounted - react/no-is-mounted: error - ## Prevent multiple component definition per file - # react/no-multi-comp: error - ## Prevent usage of shouldComponentUpdate when extending React.PureComponent - react/no-redundant-should-component-update: error - ## Prevent usage of the return value of React.render - react/no-render-return-value: error - ## Prevent usage of setState - # react/no-set-state: error - ## Prevent common casing typos - react/no-typos: error - ## Prevent using string references in ref attribute. - react/no-string-refs: error - ## Prevent using this in stateless functional components - react/no-this-in-sfc: error - ## Prevent invalid characters from appearing in markup - react/no-unescaped-entities: error - ## Prevent usage of unknown DOM property (fixable) - # react/no-unknown-property: error - ## Prevent usage of unsafe lifecycle methods - react/no-unsafe: error - ## Prevent definitions of unused prop types - react/no-unused-prop-types: error - ## Prevent definitions of unused state properties - react/no-unused-state: error - ## Prevent usage of setState in componentWillUpdate - react/no-will-update-set-state: error - ## Enforce ES5 or ES6 class for React Components - react/prefer-es6-class: error - ## Enforce that props are read-only - react/prefer-read-only-props: error - ## Enforce stateless React Components to be written as a pure function - react/prefer-stateless-function: error - ## Prevent missing props validation in a React component definition - # react/prop-types: error - ## Prevent missing React when using JSX - # react/react-in-jsx-scope: error - ## Enforce a defaultProps definition for every prop that is not a required - ## prop - # react/require-default-props: error - ## Enforce React components to have a shouldComponentUpdate method - # react/require-optimization: error - ## Enforce ES5 or ES6 class for returning value in render function - react/require-render-return: error - ## Prevent extra closing tags for components without children (fixable) - react/self-closing-comp: error - ## Enforce component methods order (fixable) - # react/sort-comp: error - ## Enforce propTypes declarations alphabetical sorting - # react/sort-prop-types: error - ## Enforce the state initialization style to be either in a constructor or - ## with a class property - # react/state-in-constructor: error - ## Enforces where React component static properties should be positioned. - # react/static-property-placement: error - ## Enforce style prop value being an object - react/style-prop-object: error - ## Prevent void DOM elements (e.g. ,
) from receiving children - react/void-dom-elements-no-children: error - - ## JSX-specific rules - ## ---------------------------------------- - ## Enforce boolean attributes notation in JSX (fixable) - react/jsx-boolean-value: error - ## Enforce or disallow spaces inside of curly braces in JSX attributes and - ## expressions. - # react/jsx-child-element-spacing: error - ## Validate closing bracket location in JSX (fixable) - # react/jsx-closing-bracket-location: [error, { - # ## NOTE: Not really sure about enforcing this one - # selfClosing: false, - # nonEmpty: after-props, - # }] - ## Validate closing tag location in JSX (fixable) - react/jsx-closing-tag-location: error - ## Enforce or disallow newlines inside of curly braces in JSX attributes and - ## expressions (fixable) - # react/jsx-curly-newline: error - ## Enforce or disallow spaces inside of curly braces in JSX attributes and - ## expressions (fixable) - react/jsx-curly-spacing: error - ## Enforce or disallow spaces around equal signs in JSX attributes (fixable) - react/jsx-equals-spacing: error - ## Restrict file extensions that may contain JSX - # react/jsx-filename-extension: error - ## Enforce position of the first prop in JSX (fixable) - # react/jsx-first-prop-new-line: error - ## Enforce event handler naming conventions in JSX - react/jsx-handler-names: error - ## Validate JSX indentation (fixable) - # react/jsx-indent: [error, 2, { - # checkAttributes: true, - # }] - ## Validate props indentation in JSX (fixable) - # react/jsx-indent-props: [error, 2] - ## Validate JSX has key prop when in array or iterator - react/jsx-key: error - ## Validate JSX maximum depth - react/jsx-max-depth: [error, { max: 10 }] ## Generous - ## Limit maximum of props on a single line in JSX (fixable) - # react/jsx-max-props-per-line: error - ## Prevent usage of .bind() and arrow functions in JSX props - # react/jsx-no-bind: error - ## Prevent comments from being inserted as text nodes - react/jsx-no-comment-textnodes: error - ## Prevent duplicate props in JSX - react/jsx-no-duplicate-props: error - ## Prevent usage of unwrapped JSX strings - # react/jsx-no-literals: error - ## Prevent usage of unsafe target='_blank' - react/jsx-no-target-blank: error - ## Disallow undeclared variables in JSX - react/jsx-no-undef: error - ## Disallow unnecessary fragments (fixable) - react/jsx-no-useless-fragment: error - ## Limit to one expression per line in JSX - # react/jsx-one-expression-per-line: error - ## Enforce curly braces or disallow unnecessary curly braces in JSX - # react/jsx-curly-brace-presence: error - ## Enforce shorthand or standard form for React fragments - react/jsx-fragments: error - ## Enforce PascalCase for user-defined JSX components - react/jsx-pascal-case: error - ## Disallow multiple spaces between inline JSX props (fixable) - react/jsx-props-no-multi-spaces: error - ## Disallow JSX props spreading - # react/jsx-props-no-spreading: error - ## Enforce default props alphabetical sorting - # react/jsx-sort-default-props: error - ## Enforce props alphabetical sorting (fixable) - # react/jsx-sort-props: error - ## Validate whitespace in and around the JSX opening and closing brackets - ## (fixable) - react/jsx-tag-spacing: error - ## Prevent React to be incorrectly marked as unused - react/jsx-uses-react: error - ## Prevent variables used in JSX to be incorrectly marked as unused - react/jsx-uses-vars: error - ## Prevent missing parentheses around multilines JSX (fixable) - react/jsx-wrap-multilines: error - ## Prevents the use of unused imports. - ## This could be done by enabling no-unused-vars, but we're doing this for now - unused-imports/no-unused-imports: error diff --git a/tgui/.gitattributes b/tgui/.gitattributes index 482063210d3..3103a46c242 100644 --- a/tgui/.gitattributes +++ b/tgui/.gitattributes @@ -6,7 +6,6 @@ *.ts text eol=lf *.tsx text eol=lf *.css text eol=lf -*.cjs text eol=lf *.scss text eol=lf *.html text eol=lf *.json text eol=lf diff --git a/tgui/.gitignore b/tgui/.gitignore index 4d0dd666d88..46b4182f604 100644 --- a/tgui/.gitignore +++ b/tgui/.gitignore @@ -1,24 +1,9 @@ ## NPM garbage node_modules *.log -package-lock.json - -## Yarn stuff -/.pnp.* -/.yarn/* -!/.yarn/releases -!/.yarn/plugins -!/.yarn/sdks -!/.yarn/versions -!/.yarn/lock.yml ## Build artifacts -/public/.tmp/**/* /public/**/* !/public/*.html -!/public/tgui-polyfill.min.js -/coverage - -## Previously ignored locations that are kept to avoid confusing git -## while transitioning to a new project structure. -/packages/tgui/public/** +!/public/ntos-error.min.css +!/public/helpers.min.js diff --git a/tgui/.prettierignore b/tgui/.prettierignore index 97d37c5a6fa..64ad6361de2 100644 --- a/tgui/.prettierignore +++ b/tgui/.prettierignore @@ -1,8 +1,12 @@ -.pnp.* -.yarn node_modules +public + +*.js +*.ts +*.tsx +*.css +*.jsx +*.json -# Avoid running on any bundles. -/public/**/* # Running it on tgui.html is fine, however. !/public/tgui.html diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml index e3cf66636e8..64d6436bcd0 100644 --- a/tgui/.prettierrc.yml +++ b/tgui/.prettierrc.yml @@ -1,6 +1,6 @@ singleQuote: true overrides: - - files: 'public/tgui.html' + - files: 'packages/tgui-setup/helpers.js' options: trailingComma: es5 arrowParens: always diff --git a/tgui/.swcrc b/tgui/.swcrc new file mode 100644 index 00000000000..5cc7c7f5dec --- /dev/null +++ b/tgui/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://swc.rs/schema.json", + "jsc": { + "loose": true, + "parser": { + "syntax": "typescript", + "tsx": true + }, + "transform": { + "react": { + "runtime": "automatic" + } + } + } +} diff --git a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs deleted file mode 100644 index 527659ff97f..00000000000 --- a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +++ /dev/null @@ -1,363 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-interactive-tools", -factory: function (require) { -var plugin=(()=>{var PR=Object.create,J1=Object.defineProperty,MR=Object.defineProperties,FR=Object.getOwnPropertyDescriptor,LR=Object.getOwnPropertyDescriptors,RR=Object.getOwnPropertyNames,hh=Object.getOwnPropertySymbols,NR=Object.getPrototypeOf,Z4=Object.prototype.hasOwnProperty,aD=Object.prototype.propertyIsEnumerable;var dD=(i,u,f)=>u in i?J1(i,u,{enumerable:!0,configurable:!0,writable:!0,value:f}):i[u]=f,dt=(i,u)=>{for(var f in u||(u={}))Z4.call(u,f)&&dD(i,f,u[f]);if(hh)for(var f of hh(u))aD.call(u,f)&&dD(i,f,u[f]);return i},zn=(i,u)=>MR(i,LR(u)),BR=i=>J1(i,"__esModule",{value:!0});var Si=(i,u)=>{var f={};for(var c in i)Z4.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&hh)for(var c of hh(i))u.indexOf(c)<0&&aD.call(i,c)&&(f[c]=i[c]);return f};var Me=(i,u)=>()=>(u||i((u={exports:{}}).exports,u),u.exports),jR=(i,u)=>{for(var f in u)J1(i,f,{get:u[f],enumerable:!0})},UR=(i,u,f)=>{if(u&&typeof u=="object"||typeof u=="function")for(let c of RR(u))!Z4.call(i,c)&&c!=="default"&&J1(i,c,{get:()=>u[c],enumerable:!(f=FR(u,c))||f.enumerable});return i},Er=i=>UR(BR(J1(i!=null?PR(NR(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var ey=Me((YH,pD)=>{"use strict";var hD=Object.getOwnPropertySymbols,qR=Object.prototype.hasOwnProperty,zR=Object.prototype.propertyIsEnumerable;function WR(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function HR(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var u={},f=0;f<10;f++)u["_"+String.fromCharCode(f)]=f;var c=Object.getOwnPropertyNames(u).map(function(t){return u[t]});if(c.join("")!=="0123456789")return!1;var g={};return"abcdefghijklmnopqrst".split("").forEach(function(t){g[t]=t}),Object.keys(Object.assign({},g)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}pD.exports=HR()?Object.assign:function(i,u){for(var f,c=WR(i),g,t=1;t{"use strict";var ty=ey(),as=typeof Symbol=="function"&&Symbol.for,Q1=as?Symbol.for("react.element"):60103,bR=as?Symbol.for("react.portal"):60106,GR=as?Symbol.for("react.fragment"):60107,VR=as?Symbol.for("react.strict_mode"):60108,YR=as?Symbol.for("react.profiler"):60114,$R=as?Symbol.for("react.provider"):60109,KR=as?Symbol.for("react.context"):60110,XR=as?Symbol.for("react.forward_ref"):60112,JR=as?Symbol.for("react.suspense"):60113,QR=as?Symbol.for("react.memo"):60115,ZR=as?Symbol.for("react.lazy"):60116,mD=typeof Symbol=="function"&&Symbol.iterator;function Z1(i){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+i,f=1;fmh.length&&mh.push(i)}function uy(i,u,f,c){var g=typeof i;(g==="undefined"||g==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(g){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case Q1:case bR:t=!0}}if(t)return f(c,i,u===""?"."+sy(i,0):u),1;if(t=0,u=u===""?".":u+":",Array.isArray(i))for(var C=0;C{"use strict";kD.exports=xD()});var AD=Me((ga,e2)=>{(function(){var i,u="4.17.21",f=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",g="Expected a function",t="Invalid `variable` option passed into `_.template`",C="__lodash_hash_undefined__",A=500,x="__lodash_placeholder__",D=1,L=2,N=4,j=1,$=2,h=1,re=2,ce=4,Q=8,oe=16,Se=32,me=64,De=128,J=256,Te=512,Oe=30,Le="...",ot=800,ct=16,Ue=1,be=2,At=3,Ot=1/0,Nt=9007199254740991,Je=17976931348623157e292,V=0/0,ne=4294967295,ge=ne-1,Z=ne>>>1,Ae=[["ary",De],["bind",h],["bindKey",re],["curry",Q],["curryRight",oe],["flip",Te],["partial",Se],["partialRight",me],["rearg",J]],at="[object Arguments]",it="[object Array]",Ft="[object AsyncFunction]",jt="[object Boolean]",hn="[object Date]",Un="[object DOMException]",Jt="[object Error]",Yt="[object Function]",cr="[object GeneratorFunction]",w="[object Map]",pt="[object Number]",Mn="[object Null]",Bn="[object Object]",Xn="[object Promise]",vr="[object Proxy]",gr="[object RegExp]",r0="[object Set]",Ci="[object String]",yo="[object Symbol]",Ds="[object Undefined]",Mu="[object WeakMap]",Gf="[object WeakSet]",iu="[object ArrayBuffer]",ou="[object DataView]",ol="[object Float32Array]",ul="[object Float64Array]",Es="[object Int8Array]",Uo="[object Int16Array]",sl="[object Int32Array]",Ss="[object Uint8Array]",Cs="[object Uint8ClampedArray]",Ti="[object Uint16Array]",Fu="[object Uint32Array]",ll=/\b__p \+= '';/g,fl=/\b(__p \+=) '' \+/g,cl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,al=/&(?:amp|lt|gt|quot|#39);/g,Ui=/[&<>"']/g,Mr=RegExp(al.source),Ac=RegExp(Ui.source),of=/<%-([\s\S]+?)%>/g,Ts=/<%([\s\S]+?)%>/g,xs=/<%=([\s\S]+?)%>/g,dl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qi=/^\w*$/,qo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kr=/[\\^$.*+?()[\]{}|]/g,Fr=RegExp(kr.source),si=/^\s+/,H0=/\s/,b0=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Lu=/,? & /,c0=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ru=/[()=,{}\[\]\/\s]/,ks=/\\(\\)?/g,As=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,uu=/\w*$/,wo=/^[-+]0x[0-9a-f]+$/i,zo=/^0b[01]+$/i,Os=/^\[object .+?Constructor\]$/,Is=/^0o[0-7]+$/i,uf=/^(?:0|[1-9]\d*)$/,_n=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Nu=/($^)/,Wo=/['\n\r\u2028\u2029\\]/g,su="\\ud800-\\udfff",Ps="\\u0300-\\u036f",pl="\\ufe20-\\ufe2f",Vf="\\u20d0-\\u20ff",hl=Ps+pl+Vf,Bu="\\u2700-\\u27bf",ju="a-z\\xdf-\\xf6\\xf8-\\xff",sf="\\xac\\xb1\\xd7\\xf7",ro="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Ms="\\u2000-\\u206f",ml=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Uu="A-Z\\xc0-\\xd6\\xd8-\\xde",G0="\\ufe0e\\ufe0f",Fs=sf+ro+Ms+ml,tt="['\u2019]",zi="["+su+"]",lu="["+Fs+"]",Ho="["+hl+"]",O0="\\d+",vl="["+Bu+"]",gl="["+ju+"]",fu="[^"+su+Fs+O0+Bu+ju+Uu+"]",_l="\\ud83c[\\udffb-\\udfff]",Sn="(?:"+Ho+"|"+_l+")",gt="[^"+su+"]",en="(?:\\ud83c[\\udde6-\\uddff]){2}",I0="[\\ud800-\\udbff][\\udc00-\\udfff]",li="["+Uu+"]",qu="\\u200d",Wi="(?:"+gl+"|"+fu+")",zu="(?:"+li+"|"+fu+")",Wu="(?:"+tt+"(?:d|ll|m|re|s|t|ve))?",Ls="(?:"+tt+"(?:D|LL|M|RE|S|T|VE))?",fi=Sn+"?",e0="["+G0+"]?",io="(?:"+qu+"(?:"+[gt,en,I0].join("|")+")"+e0+fi+")*",D0="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Do="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",i0=e0+fi+io,Rs="(?:"+[vl,en,I0].join("|")+")"+i0,a0="(?:"+[gt+Ho+"?",Ho,en,I0,zi].join("|")+")",Hu=RegExp(tt,"g"),V0=RegExp(Ho,"g"),bu=RegExp(_l+"(?="+_l+")|"+a0+i0,"g"),Ns=RegExp([li+"?"+gl+"+"+Wu+"(?="+[lu,li,"$"].join("|")+")",zu+"+"+Ls+"(?="+[lu,li+Wi,"$"].join("|")+")",li+"?"+Wi+"+"+Wu,li+"+"+Ls,Do,D0,O0,Rs].join("|"),"g"),bo=RegExp("["+qu+su+hl+G0+"]"),P0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ln=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],lf=-1,nr={};nr[ol]=nr[ul]=nr[Es]=nr[Uo]=nr[sl]=nr[Ss]=nr[Cs]=nr[Ti]=nr[Fu]=!0,nr[at]=nr[it]=nr[iu]=nr[jt]=nr[ou]=nr[hn]=nr[Jt]=nr[Yt]=nr[w]=nr[pt]=nr[Bn]=nr[gr]=nr[r0]=nr[Ci]=nr[Mu]=!1;var rr={};rr[at]=rr[it]=rr[iu]=rr[ou]=rr[jt]=rr[hn]=rr[ol]=rr[ul]=rr[Es]=rr[Uo]=rr[sl]=rr[w]=rr[pt]=rr[Bn]=rr[gr]=rr[r0]=rr[Ci]=rr[yo]=rr[Ss]=rr[Cs]=rr[Ti]=rr[Fu]=!0,rr[Jt]=rr[Yt]=rr[Mu]=!1;var Go={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gu={"&":"&","<":"<",">":">",'"':""","'":"'"},yl={"&":"&","<":"<",">":">",""":'"',"'":"'"},cu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Bs=parseFloat,Vu=parseInt,M0=typeof global=="object"&&global&&global.Object===Object&&global,au=typeof self=="object"&&self&&self.Object===Object&&self,Lr=M0||au||Function("return this")(),F=typeof ga=="object"&&ga&&!ga.nodeType&&ga,R=F&&typeof e2=="object"&&e2&&!e2.nodeType&&e2,U=R&&R.exports===F,H=U&&M0.process,fe=function(){try{var ae=R&&R.require&&R.require("util").types;return ae||H&&H.binding&&H.binding("util")}catch(Be){}}(),ue=fe&&fe.isArrayBuffer,de=fe&&fe.isDate,W=fe&&fe.isMap,ve=fe&&fe.isRegExp,Fe=fe&&fe.isSet,Ge=fe&&fe.isTypedArray;function K(ae,Be,Ie){switch(Ie.length){case 0:return ae.call(Be);case 1:return ae.call(Be,Ie[0]);case 2:return ae.call(Be,Ie[0],Ie[1]);case 3:return ae.call(Be,Ie[0],Ie[1],Ie[2])}return ae.apply(Be,Ie)}function xe(ae,Be,Ie,ht){for(var mt=-1,wn=ae==null?0:ae.length;++mt-1}function wt(ae,Be,Ie){for(var ht=-1,mt=ae==null?0:ae.length;++ht-1;);return Ie}function js(ae,Be){for(var Ie=ae.length;Ie--&&Qe(Be,ae[Ie],0)>-1;);return Ie}function Dl(ae,Be){for(var Ie=ae.length,ht=0;Ie--;)ae[Ie]===Be&&++ht;return ht}var du=Cn(Go),Yu=Cn(Gu);function Us(ae){return"\\"+cu[ae]}function oo(ae,Be){return ae==null?i:ae[Be]}function Hi(ae){return bo.test(ae)}function qs(ae){return P0.test(ae)}function F0(ae){for(var Be,Ie=[];!(Be=ae.next()).done;)Ie.push(Be.value);return Ie}function Gr(ae){var Be=-1,Ie=Array(ae.size);return ae.forEach(function(ht,mt){Ie[++Be]=[mt,ht]}),Ie}function ir(ae,Be){return function(Ie){return ae(Be(Ie))}}function L0(ae,Be){for(var Ie=-1,ht=ae.length,mt=0,wn=[];++Ie-1}function Ju(a,p){var E=this.__data__,I=hf(E,a);return I<0?(++this.size,E.push([a,p])):E[I][1]=p,this}Z0.prototype.clear=df,Z0.prototype.delete=Ba,Z0.prototype.get=Oc,Z0.prototype.has=mu,Z0.prototype.set=Ju;function ei(a){var p=-1,E=a==null?0:a.length;for(this.clear();++p=p?a:p)),a}function vi(a,p,E,I,B,G){var te,se=p&D,Ee=p&L,$e=p&N;if(E&&(te=B?E(a,I,B,G):E(a)),te!==i)return te;if(!Jr(a))return a;var Ke=On(a);if(Ke){if(te=f1(a),!se)return Xr(a,te)}else{var nt=U0(a),Ct=nt==Yt||nt==cr;if(Eu(a))return Od(a,se);if(nt==Bn||nt==at||Ct&&!B){if(te=Ee||Ct?{}:zd(a),!se)return Ee?Zu(a,Wa(te,a)):j0(a,mf(te,a))}else{if(!rr[nt])return B?a:{};te=Wd(a,nt,se)}}G||(G=new co);var Gt=G.get(a);if(Gt)return Gt;G.set(a,te),kp(a)?a.forEach(function(dn){te.add(vi(dn,p,E,dn,a,G))}):Tp(a)&&a.forEach(function(dn,Yn){te.set(Yn,vi(dn,p,E,Yn,a,G))});var an=$e?Ee?Dn:r1:Ee?Yi:q0,qn=Ke?i:an(a);return je(qn||a,function(dn,Yn){qn&&(Yn=dn,dn=a[Yn]),xl(te,Yn,vi(dn,p,E,Yn,a,G))}),te}function Xf(a){var p=q0(a);return function(E){return Rc(E,a,p)}}function Rc(a,p,E){var I=E.length;if(a==null)return!I;for(a=$t(a);I--;){var B=E[I],G=p[B],te=a[B];if(te===i&&!(B in a)||!G(te))return!1}return!0}function Jf(a,p,E){if(typeof a!="function")throw new Yr(g);return wf(function(){a.apply(i,E)},p)}function ao(a,p,E,I){var B=-1,G=xt,te=!0,se=a.length,Ee=[],$e=p.length;if(!se)return Ee;E&&(p=lt(p,qr(E))),I?(G=wt,te=!1):p.length>=f&&(G=So,te=!1,p=new vu(p));e:for(;++BB?0:B+E),I=I===i||I>B?B:jn(I),I<0&&(I+=B),I=E>I?0:Ip(I);E0&&E(se)?p>1?k0(se,p-1,E,I,B):Rt(B,se):I||(B[B.length]=se)}return B}var v=ec(),m=ec(!0);function S(a,p){return a&&v(a,p,q0)}function O(a,p){return a&&m(a,p,q0)}function M(a,p){return st(p,function(E){return rs(a[E])})}function b(a,p){p=Gs(p,a);for(var E=0,I=p.length;a!=null&&Ep}function ut(a,p){return a!=null&&or.call(a,p)}function In(a,p){return a!=null&&p in $t(a)}function A0(a,p,E){return a>=kn(p,E)&&a=120&&Ke.length>=120)?new vu(te&&Ke):i}Ke=a[0];var nt=-1,Ct=se[0];e:for(;++nt-1;)se!==a&&C0.call(se,Ee,1),C0.call(a,Ee,1);return a}function jc(a,p){for(var E=a?p.length:0,I=E-1;E--;){var B=p[E];if(E==I||B!==G){var G=B;es(B)?C0.call(a,B,1):$a(a,B)}}return a}function Ga(a,p){return a+hu(Ai()*(p-a+1))}function Lm(a,p,E,I){for(var B=-1,G=wr(B0((p-a)/(E||1)),0),te=Ie(G);G--;)te[I?G:++B]=a,a+=E;return te}function Va(a,p){var E="";if(!a||p<1||p>Nt)return E;do p%2&&(E+=a),p=hu(p/2),p&&(a+=a);while(p);return E}function Wn(a,p){return m1(Gd(a,p,$i),a+"")}function wd(a){return Fc(Ef(a))}function Dd(a,p){var E=Ef(a);return Yc(E,mi(p,0,E.length))}function Ol(a,p,E,I){if(!Jr(a))return a;p=Gs(p,a);for(var B=-1,G=p.length,te=G-1,se=a;se!=null&&++BB?0:B+p),E=E>B?B:E,E<0&&(E+=B),B=p>E?0:E-p>>>0,p>>>=0;for(var G=Ie(B);++I>>1,te=a[G];te!==null&&!mo(te)&&(E?te<=p:te=f){var $e=p?null:bm(a);if($e)return Y0($e);te=!1,B=So,Ee=new vu}else Ee=p?[]:se;e:for(;++I=I?a:Oo(a,p,E)}var Ad=pu||function(a){return Lr.clearTimeout(a)};function Od(a,p){if(p)return a.slice();var E=a.length,I=Nr?Nr(E):new a.constructor(E);return a.copy(I),I}function Qa(a){var p=new a.constructor(a.byteLength);return new R0(p).set(new R0(a)),p}function jm(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.byteLength)}function Um(a){var p=new a.constructor(a.source,uu.exec(a));return p.lastIndex=a.lastIndex,p}function qm(a){return Wr?$t(Wr.call(a)):{}}function Id(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.length)}function Pd(a,p){if(a!==p){var E=a!==i,I=a===null,B=a===a,G=mo(a),te=p!==i,se=p===null,Ee=p===p,$e=mo(p);if(!se&&!$e&&!G&&a>p||G&&te&&Ee&&!se&&!$e||I&&te&&Ee||!E&&Ee||!B)return 1;if(!I&&!G&&!$e&&a=se)return Ee;var $e=E[I];return Ee*($e=="desc"?-1:1)}}return a.index-p.index}function gf(a,p,E,I){for(var B=-1,G=a.length,te=E.length,se=-1,Ee=p.length,$e=wr(G-te,0),Ke=Ie(Ee+$e),nt=!I;++se1?E[B-1]:i,te=B>2?E[2]:i;for(G=a.length>3&&typeof G=="function"?(B--,G):i,te&&Ii(E[0],E[1],te)&&(G=B<3?i:G,B=1),p=$t(p);++I-1?B[G?p[te]:te]:i}}function Rd(a){return yu(function(p){var E=p.length,I=E,B=Qn.prototype.thru;for(a&&p.reverse();I--;){var G=p[I];if(typeof G!="function")throw new Yr(g);if(B&&!te&&Gc(G)=="wrapper")var te=new Qn([],!0)}for(I=te?I:E;++I1&&er.reverse(),Ke&&Eese))return!1;var $e=G.get(a),Ke=G.get(p);if($e&&Ke)return $e==p&&Ke==a;var nt=-1,Ct=!0,Gt=E&$?new vu:i;for(G.set(a,p),G.set(p,a);++nt1?"& ":"")+p[I],p=p.join(E>2?", ":" "),a.replace(b0,`{ -/* [wrapped with `+p+`] */ -`)}function Xm(a){return On(a)||Ll(a)||!!(di&&a&&a[di])}function es(a,p){var E=typeof a;return p=p==null?Nt:p,!!p&&(E=="number"||E!="symbol"&&uf.test(a))&&a>-1&&a%1==0&&a0){if(++p>=ot)return arguments[0]}else p=0;return a.apply(i,arguments)}}function Yc(a,p){var E=-1,I=a.length,B=I-1;for(p=p===i?I:p;++E1?a[p-1]:i;return E=typeof E=="function"?(a.pop(),E):i,sp(a,E)});function fp(a){var p=z(a);return p.__chain__=!0,p}function cp(a,p){return p(a),a}function Kc(a,p){return p(a)}var Wv=yu(function(a){var p=a.length,E=p?a[0]:0,I=this.__wrapped__,B=function(G){return Hs(G,a)};return p>1||this.__actions__.length||!(I instanceof nn)||!es(E)?this.thru(B):(I=I.slice(E,+E+(p?1:0)),I.__actions__.push({func:Kc,args:[B],thisArg:i}),new Qn(I,this.__chain__).thru(function(G){return p&&!G.length&&G.push(i),G}))});function Hv(){return fp(this)}function bv(){return new Qn(this.value(),this.__chain__)}function Gv(){this.__values__===i&&(this.__values__=Op(this.value()));var a=this.__index__>=this.__values__.length,p=a?i:this.__values__[this.__index__++];return{done:a,value:p}}function Vv(){return this}function Yv(a){for(var p,E=this;E instanceof Or;){var I=Jd(E);I.__index__=0,I.__values__=i,p?B.__wrapped__=I:p=I;var B=I;E=E.__wrapped__}return B.__wrapped__=a,p}function Ml(){var a=this.__wrapped__;if(a instanceof nn){var p=a;return this.__actions__.length&&(p=new nn(this)),p=p.reverse(),p.__actions__.push({func:Kc,args:[g1],thisArg:i}),new Qn(p,this.__chain__)}return this.thru(g1)}function Fl(){return xd(this.__wrapped__,this.__actions__)}var Xc=_f(function(a,p,E){or.call(a,E)?++a[E]:ti(a,E,1)});function $v(a,p,E){var I=On(a)?rt:Nc;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}function Kv(a,p){var E=On(a)?st:Qf;return E(a,cn(p,3))}var Xv=Ld(Qd),D1=Ld($c);function Jv(a,p){return k0(Jc(a,p),1)}function Qv(a,p){return k0(Jc(a,p),Ot)}function ap(a,p,E){return E=E===i?1:jn(E),k0(Jc(a,p),E)}function dp(a,p){var E=On(a)?je:$o;return E(a,cn(p,3))}function pp(a,p){var E=On(a)?Xe:kl;return E(a,cn(p,3))}var Zv=_f(function(a,p,E){or.call(a,E)?a[E].push(p):ti(a,E,[p])});function eg(a,p,E,I){a=Vi(a)?a:Ef(a),E=E&&!I?jn(E):0;var B=a.length;return E<0&&(E=wr(B+E,0)),ia(a)?E<=B&&a.indexOf(p,E)>-1:!!B&&Qe(a,p,E)>-1}var tg=Wn(function(a,p,E){var I=-1,B=typeof p=="function",G=Vi(a)?Ie(a.length):[];return $o(a,function(te){G[++I]=B?K(p,te,E):po(te,p,E)}),G}),hp=_f(function(a,p,E){ti(a,E,p)});function Jc(a,p){var E=On(a)?lt:vd;return E(a,cn(p,3))}function ng(a,p,E,I){return a==null?[]:(On(p)||(p=p==null?[]:[p]),E=I?i:E,On(E)||(E=E==null?[]:[E]),Oi(a,p,E))}var rg=_f(function(a,p,E){a[E?0:1].push(p)},function(){return[[],[]]});function mp(a,p,E){var I=On(a)?yn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,$o)}function ig(a,p,E){var I=On(a)?sn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,kl)}function og(a,p){var E=On(a)?st:Qf;return E(a,Zc(cn(p,3)))}function ug(a){var p=On(a)?Fc:wd;return p(a)}function sg(a,p,E){(E?Ii(a,p,E):p===i)?p=1:p=jn(p);var I=On(a)?Lc:Dd;return I(a,p)}function lg(a){var p=On(a)?Kf:Ao;return p(a)}function E1(a){if(a==null)return 0;if(Vi(a))return ia(a)?Rr(a):a.length;var p=U0(a);return p==w||p==r0?a.size:Zf(a).length}function fg(a,p,E){var I=On(a)?ar:Nm;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}var cg=Wn(function(a,p){if(a==null)return[];var E=p.length;return E>1&&Ii(a,p[0],p[1])?p=[]:E>2&&Ii(p[0],p[1],p[2])&&(p=[p[0]]),Oi(a,k0(p,1),[])}),rc=Sl||function(){return Lr.Date.now()};function ag(a,p){if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){if(--a<1)return p.apply(this,arguments)}}function vp(a,p,E){return p=E?i:p,p=a&&p==null?a.length:p,Lt(a,De,i,i,i,i,p)}function gp(a,p){var E;if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){return--a>0&&(E=p.apply(this,arguments)),a<=1&&(p=i),E}}var S1=Wn(function(a,p,E){var I=h;if(E.length){var B=L0(E,An(S1));I|=Se}return Lt(a,I,p,E,B)}),_p=Wn(function(a,p,E){var I=h|re;if(E.length){var B=L0(E,An(_p));I|=Se}return Lt(p,I,a,E,B)});function C1(a,p,E){p=E?i:p;var I=Lt(a,Q,i,i,i,i,i,p);return I.placeholder=C1.placeholder,I}function yp(a,p,E){p=E?i:p;var I=Lt(a,oe,i,i,i,i,i,p);return I.placeholder=yp.placeholder,I}function wp(a,p,E){var I,B,G,te,se,Ee,$e=0,Ke=!1,nt=!1,Ct=!0;if(typeof a!="function")throw new Yr(g);p=Fo(p)||0,Jr(E)&&(Ke=!!E.leading,nt="maxWait"in E,G=nt?wr(Fo(E.maxWait)||0,p):G,Ct="trailing"in E?!!E.trailing:Ct);function Gt(f0){var Jo=I,Su=B;return I=B=i,$e=f0,te=a.apply(Su,Jo),te}function an(f0){return $e=f0,se=wf(Yn,p),Ke?Gt(f0):te}function qn(f0){var Jo=f0-Ee,Su=f0-$e,Zp=p-Jo;return nt?kn(Zp,G-Su):Zp}function dn(f0){var Jo=f0-Ee,Su=f0-$e;return Ee===i||Jo>=p||Jo<0||nt&&Su>=G}function Yn(){var f0=rc();if(dn(f0))return er(f0);se=wf(Yn,qn(f0))}function er(f0){return se=i,Ct&&I?Gt(f0):(I=B=i,te)}function vo(){se!==i&&Ad(se),$e=0,I=Ee=B=se=i}function Pi(){return se===i?te:er(rc())}function Mi(){var f0=rc(),Jo=dn(f0);if(I=arguments,B=this,Ee=f0,Jo){if(se===i)return an(Ee);if(nt)return Ad(se),se=wf(Yn,p),Gt(Ee)}return se===i&&(se=wf(Yn,p)),te}return Mi.cancel=vo,Mi.flush=Pi,Mi}var dg=Wn(function(a,p){return Jf(a,1,p)}),Dp=Wn(function(a,p,E){return Jf(a,Fo(p)||0,E)});function pg(a){return Lt(a,Te)}function Qc(a,p){if(typeof a!="function"||p!=null&&typeof p!="function")throw new Yr(g);var E=function(){var I=arguments,B=p?p.apply(this,I):I[0],G=E.cache;if(G.has(B))return G.get(B);var te=a.apply(this,I);return E.cache=G.set(B,te)||G,te};return E.cache=new(Qc.Cache||ei),E}Qc.Cache=ei;function Zc(a){if(typeof a!="function")throw new Yr(g);return function(){var p=arguments;switch(p.length){case 0:return!a.call(this);case 1:return!a.call(this,p[0]);case 2:return!a.call(this,p[0],p[1]);case 3:return!a.call(this,p[0],p[1],p[2])}return!a.apply(this,p)}}function ea(a){return gp(2,a)}var hg=Bm(function(a,p){p=p.length==1&&On(p[0])?lt(p[0],qr(cn())):lt(k0(p,1),qr(cn()));var E=p.length;return Wn(function(I){for(var B=-1,G=kn(I.length,E);++B=p}),Ll=_i(function(){return arguments}())?_i:function(a){return n0(a)&&or.call(a,"callee")&&!N0.call(a,"callee")},On=Ie.isArray,x1=ue?qr(ue):Re;function Vi(a){return a!=null&&na(a.length)&&!rs(a)}function l0(a){return n0(a)&&Vi(a)}function kg(a){return a===!0||a===!1||n0(a)&&Ye(a)==jt}var Eu=pi||W1,Ag=de?qr(de):Ce;function Og(a){return n0(a)&&a.nodeType===1&&!ic(a)}function Cp(a){if(a==null)return!0;if(Vi(a)&&(On(a)||typeof a=="string"||typeof a.splice=="function"||Eu(a)||Df(a)||Ll(a)))return!a.length;var p=U0(a);if(p==w||p==r0)return!a.size;if(nc(a))return!Zf(a).length;for(var E in a)if(or.call(a,E))return!1;return!0}function Ig(a,p){return ze(a,p)}function Pg(a,p,E){E=typeof E=="function"?E:i;var I=E?E(a,p):i;return I===i?ze(a,p,i,E):!!I}function k1(a){if(!n0(a))return!1;var p=Ye(a);return p==Jt||p==Un||typeof a.message=="string"&&typeof a.name=="string"&&!ic(a)}function Mg(a){return typeof a=="number"&&Br(a)}function rs(a){if(!Jr(a))return!1;var p=Ye(a);return p==Yt||p==cr||p==Ft||p==vr}function A1(a){return typeof a=="number"&&a==jn(a)}function na(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=Nt}function Jr(a){var p=typeof a;return a!=null&&(p=="object"||p=="function")}function n0(a){return a!=null&&typeof a=="object"}var Tp=W?qr(W):on;function Fg(a,p){return a===p||sr(a,p,Nn(p))}function Lg(a,p,E){return E=typeof E=="function"?E:i,sr(a,p,Nn(p),E)}function Rg(a){return xp(a)&&a!=+a}function Ng(a){if(Zm(a))throw new mt(c);return mn(a)}function Bg(a){return a===null}function O1(a){return a==null}function xp(a){return typeof a=="number"||n0(a)&&Ye(a)==pt}function ic(a){if(!n0(a)||Ye(a)!=Bn)return!1;var p=uo(a);if(p===null)return!0;var E=or.call(p,"constructor")&&p.constructor;return typeof E=="function"&&E instanceof E&&bi.call(E)==af}var ra=ve?qr(ve):pr;function jg(a){return A1(a)&&a>=-Nt&&a<=Nt}var kp=Fe?qr(Fe):Hr;function ia(a){return typeof a=="string"||!On(a)&&n0(a)&&Ye(a)==Ci}function mo(a){return typeof a=="symbol"||n0(a)&&Ye(a)==yo}var Df=Ge?qr(Ge):Vn;function Ap(a){return a===i}function Ug(a){return n0(a)&&U0(a)==Mu}function qg(a){return n0(a)&&Ye(a)==Gf}var zg=bc(Ha),Wg=bc(function(a,p){return a<=p});function Op(a){if(!a)return[];if(Vi(a))return ia(a)?Jn(a):Xr(a);if(u0&&a[u0])return F0(a[u0]());var p=U0(a),E=p==w?Gr:p==r0?Y0:Ef;return E(a)}function is(a){if(!a)return a===0?a:0;if(a=Fo(a),a===Ot||a===-Ot){var p=a<0?-1:1;return p*Je}return a===a?a:0}function jn(a){var p=is(a),E=p%1;return p===p?E?p-E:p:0}function Ip(a){return a?mi(jn(a),0,ne):0}function Fo(a){if(typeof a=="number")return a;if(mo(a))return V;if(Jr(a)){var p=typeof a.valueOf=="function"?a.valueOf():a;a=Jr(p)?p+"":p}if(typeof a!="string")return a===0?a:+a;a=E0(a);var E=zo.test(a);return E||Is.test(a)?Vu(a.slice(2),E?2:8):wo.test(a)?V:+a}function oa(a){return yi(a,Yi(a))}function Hg(a){return a?mi(jn(a),-Nt,Nt):a===0?a:0}function yr(a){return a==null?"":ho(a)}var Pp=Io(function(a,p){if(nc(p)||Vi(p)){yi(p,q0(p),a);return}for(var E in p)or.call(p,E)&&xl(a,E,p[E])}),Mp=Io(function(a,p){yi(p,Yi(p),a)}),ua=Io(function(a,p,E,I){yi(p,Yi(p),a,I)}),bg=Io(function(a,p,E,I){yi(p,q0(p),a,I)}),Gg=yu(Hs);function Vg(a,p){var E=dr(a);return p==null?E:mf(E,p)}var Fp=Wn(function(a,p){a=$t(a);var E=-1,I=p.length,B=I>2?p[2]:i;for(B&&Ii(p[0],p[1],B)&&(I=1);++E1),G}),yi(a,Dn(a),E),I&&(E=vi(E,D|L|N,Gm));for(var B=p.length;B--;)$a(E,p[B]);return E});function l_(a,p){return Bp(a,Zc(cn(p)))}var f_=yu(function(a,p){return a==null?{}:Fm(a,p)});function Bp(a,p){if(a==null)return{};var E=lt(Dn(a),function(I){return[I]});return p=cn(p),yd(a,E,function(I,B){return p(I,B[0])})}function c_(a,p,E){p=Gs(p,a);var I=-1,B=p.length;for(B||(B=1,a=i);++Ip){var I=a;a=p,p=I}if(E||a%1||p%1){var B=Ai();return kn(a+B*(p-a+Bs("1e-"+((B+"").length-1))),p)}return Ga(a,p)}var __=yf(function(a,p,E){return p=p.toLowerCase(),a+(E?Wp(p):p)});function Wp(a){return L1(yr(a).toLowerCase())}function Hp(a){return a=yr(a),a&&a.replace(_n,du).replace(V0,"")}function y_(a,p,E){a=yr(a),p=ho(p);var I=a.length;E=E===i?I:mi(jn(E),0,I);var B=E;return E-=p.length,E>=0&&a.slice(E,B)==p}function M1(a){return a=yr(a),a&&Ac.test(a)?a.replace(Ui,Yu):a}function w_(a){return a=yr(a),a&&Fr.test(a)?a.replace(kr,"\\$&"):a}var D_=yf(function(a,p,E){return a+(E?"-":"")+p.toLowerCase()}),bp=yf(function(a,p,E){return a+(E?" ":"")+p.toLowerCase()}),E_=Fd("toLowerCase");function S_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;if(!p||I>=p)return a;var B=(p-I)/2;return Hc(hu(B),E)+a+Hc(B0(B),E)}function C_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;return p&&I>>0,E?(a=yr(a),a&&(typeof p=="string"||p!=null&&!ra(p))&&(p=ho(p),!p&&Hi(a))?Vs(Jn(a),0,E):a.split(p,E)):[]}var I_=yf(function(a,p,E){return a+(E?" ":"")+L1(p)});function P_(a,p,E){return a=yr(a),E=E==null?0:mi(jn(E),0,a.length),p=ho(p),a.slice(E,E+p.length)==p}function M_(a,p,E){var I=z.templateSettings;E&&Ii(a,p,E)&&(p=i),a=yr(a),p=ua({},p,I,n1);var B=ua({},p.imports,I.imports,n1),G=q0(B),te=Eo(B,G),se,Ee,$e=0,Ke=p.interpolate||Nu,nt="__p += '",Ct=X0((p.escape||Nu).source+"|"+Ke.source+"|"+(Ke===xs?As:Nu).source+"|"+(p.evaluate||Nu).source+"|$","g"),Gt="//# sourceURL="+(or.call(p,"sourceURL")?(p.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++lf+"]")+` -`;a.replace(Ct,function(dn,Yn,er,vo,Pi,Mi){return er||(er=vo),nt+=a.slice($e,Mi).replace(Wo,Us),Yn&&(se=!0,nt+=`' + -__e(`+Yn+`) + -'`),Pi&&(Ee=!0,nt+=`'; -`+Pi+`; -__p += '`),er&&(nt+=`' + -((__t = (`+er+`)) == null ? '' : __t) + -'`),$e=Mi+dn.length,dn}),nt+=`'; -`;var an=or.call(p,"variable")&&p.variable;if(!an)nt=`with (obj) { -`+nt+` -} -`;else if(Ru.test(an))throw new mt(t);nt=(Ee?nt.replace(ll,""):nt).replace(fl,"$1").replace(cl,"$1;"),nt="function("+(an||"obj")+`) { -`+(an?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(se?", __e = _.escape":"")+(Ee?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+nt+`return __p -}`;var qn=$p(function(){return wn(G,Gt+"return "+nt).apply(i,te)});if(qn.source=nt,k1(qn))throw qn;return qn}function F_(a){return yr(a).toLowerCase()}function L_(a){return yr(a).toUpperCase()}function R_(a,p,E){if(a=yr(a),a&&(E||p===i))return E0(a);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=Jn(p),G=wl(I,B),te=js(I,B)+1;return Vs(I,G,te).join("")}function F1(a,p,E){if(a=yr(a),a&&(E||p===i))return a.slice(0,ai(a)+1);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=js(I,Jn(p))+1;return Vs(I,0,B).join("")}function N_(a,p,E){if(a=yr(a),a&&(E||p===i))return a.replace(si,"");if(!a||!(p=ho(p)))return a;var I=Jn(a),B=wl(I,Jn(p));return Vs(I,B).join("")}function B_(a,p){var E=Oe,I=Le;if(Jr(p)){var B="separator"in p?p.separator:B;E="length"in p?jn(p.length):E,I="omission"in p?ho(p.omission):I}a=yr(a);var G=a.length;if(Hi(a)){var te=Jn(a);G=te.length}if(E>=G)return a;var se=E-Rr(I);if(se<1)return I;var Ee=te?Vs(te,0,se).join(""):a.slice(0,se);if(B===i)return Ee+I;if(te&&(se+=Ee.length-se),ra(B)){if(a.slice(se).search(B)){var $e,Ke=Ee;for(B.global||(B=X0(B.source,yr(uu.exec(B))+"g")),B.lastIndex=0;$e=B.exec(Ke);)var nt=$e.index;Ee=Ee.slice(0,nt===i?se:nt)}}else if(a.indexOf(ho(B),se)!=se){var Ct=Ee.lastIndexOf(B);Ct>-1&&(Ee=Ee.slice(0,Ct))}return Ee+I}function Vp(a){return a=yr(a),a&&Mr.test(a)?a.replace(al,o0):a}var j_=yf(function(a,p,E){return a+(E?" ":"")+p.toUpperCase()}),L1=Fd("toUpperCase");function Yp(a,p,E){return a=yr(a),p=E?i:p,p===i?qs(a)?cf(a):d0(a):a.match(p)||[]}var $p=Wn(function(a,p){try{return K(a,i,p)}catch(E){return k1(E)?E:new mt(E)}}),U_=yu(function(a,p){return je(p,function(E){E=Xo(E),ti(a,E,S1(a[E],a))}),a});function Kp(a){var p=a==null?0:a.length,E=cn();return a=p?lt(a,function(I){if(typeof I[1]!="function")throw new Yr(g);return[E(I[0]),I[1]]}):[],Wn(function(I){for(var B=-1;++BNt)return[];var E=ne,I=kn(a,ne);p=cn(p),a-=ne;for(var B=ci(I,p);++E0||p<0)?new nn(E):(a<0?E=E.takeRight(-a):a&&(E=E.drop(a)),p!==i&&(p=jn(p),E=p<0?E.dropRight(-p):E.take(p-a)),E)},nn.prototype.takeRightWhile=function(a){return this.reverse().takeWhile(a).reverse()},nn.prototype.toArray=function(){return this.take(ne)},S(nn.prototype,function(a,p){var E=/^(?:filter|find|map|reject)|While$/.test(p),I=/^(?:head|last)$/.test(p),B=z[I?"take"+(p=="last"?"Right":""):p],G=I||/^find/.test(p);!B||(z.prototype[p]=function(){var te=this.__wrapped__,se=I?[1]:arguments,Ee=te instanceof nn,$e=se[0],Ke=Ee||On(te),nt=function(Yn){var er=B.apply(z,Rt([Yn],se));return I&&Ct?er[0]:er};Ke&&E&&typeof $e=="function"&&$e.length!=1&&(Ee=Ke=!1);var Ct=this.__chain__,Gt=!!this.__actions__.length,an=G&&!Ct,qn=Ee&&!Gt;if(!G&&Ke){te=qn?te:new nn(this);var dn=a.apply(te,se);return dn.__actions__.push({func:Kc,args:[nt],thisArg:i}),new Qn(dn,Ct)}return an&&qn?a.apply(this,se):(dn=this.thru(nt),an?I?dn.value()[0]:dn.value():dn)})}),je(["pop","push","shift","sort","splice","unshift"],function(a){var p=$r[a],E=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",I=/^(?:pop|shift)$/.test(a);z.prototype[a]=function(){var B=arguments;if(I&&!this.__chain__){var G=this.value();return p.apply(On(G)?G:[],B)}return this[E](function(te){return p.apply(On(te)?te:[],B)})}}),S(nn.prototype,function(a,p){var E=z[p];if(E){var I=E.name+"";or.call(bt,I)||(bt[I]=[]),bt[I].push({name:p,func:E})}}),bt[zc(i,re).name]=[{name:"wrapper",func:i}],nn.prototype.clone=s0,nn.prototype.reverse=t0,nn.prototype.value=g0,z.prototype.at=Wv,z.prototype.chain=Hv,z.prototype.commit=bv,z.prototype.next=Gv,z.prototype.plant=Yv,z.prototype.reverse=Ml,z.prototype.toJSON=z.prototype.valueOf=z.prototype.value=Fl,z.prototype.first=z.prototype.head,u0&&(z.prototype[u0]=Vv),z},K0=$0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Lr._=K0,define(function(){return K0})):R?((R.exports=K0)._=K0,F._=K0):Lr._=K0}).call(ga)});var ay=Me((XH,cy)=>{"use strict";var fr=cy.exports;cy.exports.default=fr;var Pr="[",t2="]",ya="\x07",vh=";",OD=process.env.TERM_PROGRAM==="Apple_Terminal";fr.cursorTo=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof u!="number"?Pr+(i+1)+"G":Pr+(u+1)+";"+(i+1)+"H"};fr.cursorMove=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let f="";return i<0?f+=Pr+-i+"D":i>0&&(f+=Pr+i+"C"),u<0?f+=Pr+-u+"A":u>0&&(f+=Pr+u+"B"),f};fr.cursorUp=(i=1)=>Pr+i+"A";fr.cursorDown=(i=1)=>Pr+i+"B";fr.cursorForward=(i=1)=>Pr+i+"C";fr.cursorBackward=(i=1)=>Pr+i+"D";fr.cursorLeft=Pr+"G";fr.cursorSavePosition=OD?"7":Pr+"s";fr.cursorRestorePosition=OD?"8":Pr+"u";fr.cursorGetPosition=Pr+"6n";fr.cursorNextLine=Pr+"E";fr.cursorPrevLine=Pr+"F";fr.cursorHide=Pr+"?25l";fr.cursorShow=Pr+"?25h";fr.eraseLines=i=>{let u="";for(let f=0;f[t2,"8",vh,vh,u,ya,i,t2,"8",vh,vh,ya].join("");fr.image=(i,u={})=>{let f=`${t2}1337;File=inline=1`;return u.width&&(f+=`;width=${u.width}`),u.height&&(f+=`;height=${u.height}`),u.preserveAspectRatio===!1&&(f+=";preserveAspectRatio=0"),f+":"+i.toString("base64")+ya};fr.iTerm={setCwd:(i=process.cwd())=>`${t2}50;CurrentDir=${i}${ya}`,annotation:(i,u={})=>{let f=`${t2}1337;`,c=typeof u.x!="undefined",g=typeof u.y!="undefined";if((c||g)&&!(c&&g&&typeof u.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),f+=u.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",u.length>0?f+=(c?[i,u.length,u.x,u.y]:[u.length,i]).join("|"):f+=i,f+ya}}});var PD=Me((JH,dy)=>{"use strict";var ID=(i,u)=>{for(let f of Reflect.ownKeys(u))Object.defineProperty(i,f,Object.getOwnPropertyDescriptor(u,f));return i};dy.exports=ID;dy.exports.default=ID});var FD=Me((QH,gh)=>{"use strict";var oN=PD(),_h=new WeakMap,MD=(i,u={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let f,c=!1,g=0,t=i.displayName||i.name||"",C=function(...A){if(_h.set(C,++g),c){if(u.throw===!0)throw new Error(`Function \`${t}\` can only be called once`);return f}return c=!0,f=i.apply(this,A),i=null,f};return oN(C,i),_h.set(C,g),C};gh.exports=MD;gh.exports.default=MD;gh.exports.callCount=i=>{if(!_h.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return _h.get(i)}});var LD=Me((ZH,yh)=>{yh.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&yh.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&yh.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var vy=Me((eb,n2)=>{var uN=require("assert"),r2=LD(),sN=/^win/i.test(process.platform),wh=require("events");typeof wh!="function"&&(wh=wh.EventEmitter);var Bi;process.__signal_exit_emitter__?Bi=process.__signal_exit_emitter__:(Bi=process.__signal_exit_emitter__=new wh,Bi.count=0,Bi.emitted={});Bi.infinite||(Bi.setMaxListeners(Infinity),Bi.infinite=!0);n2.exports=function(i,u){uN.equal(typeof i,"function","a callback must be provided for exit handler"),i2===!1&&RD();var f="exit";u&&u.alwaysLast&&(f="afterexit");var c=function(){Bi.removeListener(f,i),Bi.listeners("exit").length===0&&Bi.listeners("afterexit").length===0&&py()};return Bi.on(f,i),c};n2.exports.unload=py;function py(){!i2||(i2=!1,r2.forEach(function(i){try{process.removeListener(i,hy[i])}catch(u){}}),process.emit=my,process.reallyExit=ND,Bi.count-=1)}function wa(i,u,f){Bi.emitted[i]||(Bi.emitted[i]=!0,Bi.emit(i,u,f))}var hy={};r2.forEach(function(i){hy[i]=function(){var f=process.listeners(i);f.length===Bi.count&&(py(),wa("exit",null,i),wa("afterexit",null,i),sN&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});n2.exports.signals=function(){return r2};n2.exports.load=RD;var i2=!1;function RD(){i2||(i2=!0,Bi.count+=1,r2=r2.filter(function(i){try{return process.on(i,hy[i]),!0}catch(u){return!1}}),process.emit=fN,process.reallyExit=lN)}var ND=process.reallyExit;function lN(i){process.exitCode=i||0,wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),ND.call(process,process.exitCode)}var my=process.emit;function fN(i,u){if(i==="exit"){u!==void 0&&(process.exitCode=u);var f=my.apply(this,arguments);return wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),f}else return my.apply(this,arguments)}});var jD=Me((tb,BD)=>{"use strict";var cN=FD(),aN=vy();BD.exports=cN(()=>{aN(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var gy=Me(Da=>{"use strict";var dN=jD(),Dh=!1;Da.show=(i=process.stderr)=>{!i.isTTY||(Dh=!1,i.write("[?25h"))};Da.hide=(i=process.stderr)=>{!i.isTTY||(dN(),Dh=!0,i.write("[?25l"))};Da.toggle=(i,u)=>{i!==void 0&&(Dh=i),Dh?Da.show(u):Da.hide(u)}});var WD=Me(o2=>{"use strict";var UD=o2&&o2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(o2,"__esModule",{value:!0});var qD=UD(ay()),zD=UD(gy()),pN=(i,{showCursor:u=!1}={})=>{let f=0,c="",g=!1,t=C=>{!u&&!g&&(zD.default.hide(),g=!0);let A=C+` -`;A!==c&&(c=A,i.write(qD.default.eraseLines(f)+A),f=A.split(` -`).length)};return t.clear=()=>{i.write(qD.default.eraseLines(f)),c="",f=0},t.done=()=>{c="",f=0,u||(zD.default.show(),g=!1)},t};o2.default={create:pN}});var bD=Me((ib,HD)=>{HD.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var YD=Me(ru=>{"use strict";var GD=bD(),nl=process.env;Object.defineProperty(ru,"_vendors",{value:GD.map(function(i){return i.constant})});ru.name=null;ru.isPR=null;GD.forEach(function(i){var u=Array.isArray(i.env)?i.env:[i.env],f=u.every(function(c){return VD(c)});if(ru[i.constant]=f,f)switch(ru.name=i.name,typeof i.pr){case"string":ru.isPR=!!nl[i.pr];break;case"object":"env"in i.pr?ru.isPR=i.pr.env in nl&&nl[i.pr.env]!==i.pr.ne:"any"in i.pr?ru.isPR=i.pr.any.some(function(c){return!!nl[c]}):ru.isPR=VD(i.pr);break;default:ru.isPR=null}});ru.isCI=!!(nl.CI||nl.CONTINUOUS_INTEGRATION||nl.BUILD_NUMBER||nl.RUN_ID||ru.name);function VD(i){return typeof i=="string"?!!nl[i]:Object.keys(i).every(function(u){return nl[u]===i[u]})}});var KD=Me((ub,$D)=>{"use strict";$D.exports=YD().isCI});var JD=Me((sb,XD)=>{"use strict";var hN=i=>{let u=new Set;do for(let f of Reflect.ownKeys(i))u.add([i,f]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return u};XD.exports=(i,{include:u,exclude:f}={})=>{let c=g=>{let t=C=>typeof C=="string"?g===C:C.test(g);return u?u.some(t):f?!f.some(t):!0};for(let[g,t]of hN(i.constructor.prototype)){if(t==="constructor"||!c(t))continue;let C=Reflect.getOwnPropertyDescriptor(g,t);C&&typeof C.value=="function"&&(i[t]=i[t].bind(i))}return i}});var iE=Me(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});var Ea,u2,Eh,Sh,_y;typeof window=="undefined"||typeof MessageChannel!="function"?(Sa=null,yy=null,wy=function(){if(Sa!==null)try{var i=Sr.unstable_now();Sa(!0,i),Sa=null}catch(u){throw setTimeout(wy,0),u}},QD=Date.now(),Sr.unstable_now=function(){return Date.now()-QD},Ea=function(i){Sa!==null?setTimeout(Ea,0,i):(Sa=i,setTimeout(wy,0))},u2=function(i,u){yy=setTimeout(i,u)},Eh=function(){clearTimeout(yy)},Sh=function(){return!1},_y=Sr.unstable_forceFrameRate=function(){}):(Ch=window.performance,Dy=window.Date,ZD=window.setTimeout,eE=window.clearTimeout,typeof console!="undefined"&&(tE=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof tE!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ch=="object"&&typeof Ch.now=="function"?Sr.unstable_now=function(){return Ch.now()}:(nE=Dy.now(),Sr.unstable_now=function(){return Dy.now()-nE}),s2=!1,l2=null,Th=-1,Ey=5,Sy=0,Sh=function(){return Sr.unstable_now()>=Sy},_y=function(){},Sr.unstable_forceFrameRate=function(i){0>i||125kh(C,f))x!==void 0&&0>kh(x,C)?(i[c]=x,i[A]=f,c=A):(i[c]=C,i[t]=f,c=t);else if(x!==void 0&&0>kh(x,f))i[c]=x,i[A]=f,c=A;else break e}}return u}return null}function kh(i,u){var f=i.sortIndex-u.sortIndex;return f!==0?f:i.id-u.id}var ds=[],Nf=[],mN=1,_o=null,to=3,Oh=!1,pc=!1,f2=!1;function Ih(i){for(var u=Iu(Nf);u!==null;){if(u.callback===null)Ah(Nf);else if(u.startTime<=i)Ah(Nf),u.sortIndex=u.expirationTime,Ty(ds,u);else break;u=Iu(Nf)}}function xy(i){if(f2=!1,Ih(i),!pc)if(Iu(ds)!==null)pc=!0,Ea(ky);else{var u=Iu(Nf);u!==null&&u2(xy,u.startTime-i)}}function ky(i,u){pc=!1,f2&&(f2=!1,Eh()),Oh=!0;var f=to;try{for(Ih(u),_o=Iu(ds);_o!==null&&(!(_o.expirationTime>u)||i&&!Sh());){var c=_o.callback;if(c!==null){_o.callback=null,to=_o.priorityLevel;var g=c(_o.expirationTime<=u);u=Sr.unstable_now(),typeof g=="function"?_o.callback=g:_o===Iu(ds)&&Ah(ds),Ih(u)}else Ah(ds);_o=Iu(ds)}if(_o!==null)var t=!0;else{var C=Iu(Nf);C!==null&&u2(xy,C.startTime-u),t=!1}return t}finally{_o=null,to=f,Oh=!1}}function rE(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var vN=_y;Sr.unstable_ImmediatePriority=1;Sr.unstable_UserBlockingPriority=2;Sr.unstable_NormalPriority=3;Sr.unstable_IdlePriority=5;Sr.unstable_LowPriority=4;Sr.unstable_runWithPriority=function(i,u){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var f=to;to=i;try{return u()}finally{to=f}};Sr.unstable_next=function(i){switch(to){case 1:case 2:case 3:var u=3;break;default:u=to}var f=to;to=u;try{return i()}finally{to=f}};Sr.unstable_scheduleCallback=function(i,u,f){var c=Sr.unstable_now();if(typeof f=="object"&&f!==null){var g=f.delay;g=typeof g=="number"&&0c?(i.sortIndex=g,Ty(Nf,i),Iu(ds)===null&&i===Iu(Nf)&&(f2?Eh():f2=!0,u2(xy,g-c))):(i.sortIndex=f,Ty(ds,i),pc||Oh||(pc=!0,Ea(ky))),i};Sr.unstable_cancelCallback=function(i){i.callback=null};Sr.unstable_wrapCallback=function(i){var u=to;return function(){var f=to;to=u;try{return i.apply(this,arguments)}finally{to=f}}};Sr.unstable_getCurrentPriorityLevel=function(){return to};Sr.unstable_shouldYield=function(){var i=Sr.unstable_now();Ih(i);var u=Iu(ds);return u!==_o&&_o!==null&&u!==null&&u.callback!==null&&u.startTime<=i&&u.expirationTime<_o.expirationTime||Sh()};Sr.unstable_requestPaint=vN;Sr.unstable_continueExecution=function(){pc||Oh||(pc=!0,Ea(ky))};Sr.unstable_pauseExecution=function(){};Sr.unstable_getFirstCallbackNode=function(){return Iu(ds)};Sr.unstable_Profiling=null});var Ay=Me((fb,oE)=>{"use strict";oE.exports=iE()});var uE=Me((cb,c2)=>{c2.exports=function i(u){"use strict";var f=ey(),c=lr(),g=Ay();function t(v){for(var m="https://reactjs.org/docs/error-decoder.html?invariant="+v,S=1;Sqo||(v.current=qi[qo],qi[qo]=null,qo--)}function Fr(v,m){qo++,qi[qo]=v.current,v.current=m}var si={},H0={current:si},b0={current:!1},Bt=si;function Lu(v,m){var S=v.type.contextTypes;if(!S)return si;var O=v.stateNode;if(O&&O.__reactInternalMemoizedUnmaskedChildContext===m)return O.__reactInternalMemoizedMaskedChildContext;var M={},b;for(b in S)M[b]=m[b];return O&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=m,v.__reactInternalMemoizedMaskedChildContext=M),M}function c0(v){return v=v.childContextTypes,v!=null}function Ru(v){kr(b0,v),kr(H0,v)}function ks(v){kr(b0,v),kr(H0,v)}function As(v,m,S){if(H0.current!==si)throw Error(t(168));Fr(H0,m,v),Fr(b0,S,v)}function uu(v,m,S){var O=v.stateNode;if(v=m.childContextTypes,typeof O.getChildContext!="function")return S;O=O.getChildContext();for(var M in O)if(!(M in v))throw Error(t(108,Oe(m)||"Unknown",M));return f({},S,{},O)}function wo(v){var m=v.stateNode;return m=m&&m.__reactInternalMemoizedMergedChildContext||si,Bt=H0.current,Fr(H0,m,v),Fr(b0,b0.current,v),!0}function zo(v,m,S){var O=v.stateNode;if(!O)throw Error(t(169));S?(m=uu(v,m,Bt),O.__reactInternalMemoizedMergedChildContext=m,kr(b0,v),kr(H0,v),Fr(H0,m,v)):kr(b0,v),Fr(b0,S,v)}var Os=g.unstable_runWithPriority,Is=g.unstable_scheduleCallback,uf=g.unstable_cancelCallback,_n=g.unstable_shouldYield,Nu=g.unstable_requestPaint,Wo=g.unstable_now,su=g.unstable_getCurrentPriorityLevel,Ps=g.unstable_ImmediatePriority,pl=g.unstable_UserBlockingPriority,Vf=g.unstable_NormalPriority,hl=g.unstable_LowPriority,Bu=g.unstable_IdlePriority,ju={},sf=Nu!==void 0?Nu:function(){},ro=null,Ms=null,ml=!1,Uu=Wo(),G0=1e4>Uu?Wo:function(){return Wo()-Uu};function Fs(){switch(su()){case Ps:return 99;case pl:return 98;case Vf:return 97;case hl:return 96;case Bu:return 95;default:throw Error(t(332))}}function tt(v){switch(v){case 99:return Ps;case 98:return pl;case 97:return Vf;case 96:return hl;case 95:return Bu;default:throw Error(t(332))}}function zi(v,m){return v=tt(v),Os(v,m)}function lu(v,m,S){return v=tt(v),Is(v,m,S)}function Ho(v){return ro===null?(ro=[v],Ms=Is(Ps,vl)):ro.push(v),ju}function O0(){if(Ms!==null){var v=Ms;Ms=null,uf(v)}vl()}function vl(){if(!ml&&ro!==null){ml=!0;var v=0;try{var m=ro;zi(99,function(){for(;v=m&&(ai=!0),v.firstContext=null)}function D0(v,m){if(zu!==v&&m!==!1&&m!==0)if((typeof m!="number"||m===1073741823)&&(zu=v,m=1073741823),m={context:v,observedBits:m,next:null},Wi===null){if(qu===null)throw Error(t(308));Wi=m,qu.dependencies={expirationTime:0,firstContext:m,responders:null}}else Wi=Wi.next=m;return Jt?v._currentValue:v._currentValue2}var Do=!1;function i0(v){return{baseState:v,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Rs(v){return{baseState:v.baseState,firstUpdate:v.firstUpdate,lastUpdate:v.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function a0(v,m){return{expirationTime:v,suspenseConfig:m,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Hu(v,m){v.lastUpdate===null?v.firstUpdate=v.lastUpdate=m:(v.lastUpdate.next=m,v.lastUpdate=m)}function V0(v,m){var S=v.alternate;if(S===null){var O=v.updateQueue,M=null;O===null&&(O=v.updateQueue=i0(v.memoizedState))}else O=v.updateQueue,M=S.updateQueue,O===null?M===null?(O=v.updateQueue=i0(v.memoizedState),M=S.updateQueue=i0(S.memoizedState)):O=v.updateQueue=Rs(M):M===null&&(M=S.updateQueue=Rs(O));M===null||O===M?Hu(O,m):O.lastUpdate===null||M.lastUpdate===null?(Hu(O,m),Hu(M,m)):(Hu(O,m),M.lastUpdate=m)}function bu(v,m){var S=v.updateQueue;S=S===null?v.updateQueue=i0(v.memoizedState):Ns(v,S),S.lastCapturedUpdate===null?S.firstCapturedUpdate=S.lastCapturedUpdate=m:(S.lastCapturedUpdate.next=m,S.lastCapturedUpdate=m)}function Ns(v,m){var S=v.alternate;return S!==null&&m===S.updateQueue&&(m=v.updateQueue=Rs(m)),m}function bo(v,m,S,O,M,b){switch(S.tag){case 1:return v=S.payload,typeof v=="function"?v.call(b,O,M):v;case 3:v.effectTag=v.effectTag&-4097|64;case 0:if(v=S.payload,M=typeof v=="function"?v.call(b,O,M):v,M==null)break;return f({},O,M);case 2:Do=!0}return O}function P0(v,m,S,O,M){Do=!1,m=Ns(v,m);for(var b=m.baseState,ee=null,Ye=0,Ze=m.firstUpdate,ut=b;Ze!==null;){var In=Ze.expirationTime;Inpr?(Hr=mn,mn=null):Hr=mn.sibling;var Vn=jr(Re,mn,ze[pr],Et);if(Vn===null){mn===null&&(mn=Hr);break}v&&mn&&Vn.alternate===null&&m(Re,mn),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn,mn=Hr}if(pr===ze.length)return S(Re,mn),on;if(mn===null){for(;prpr?(Hr=mn,mn=null):Hr=mn.sibling;var ni=jr(Re,mn,Vn.value,Et);if(ni===null){mn===null&&(mn=Hr);break}v&&mn&&ni.alternate===null&&m(Re,mn),Ce=b(ni,Ce,pr),sr===null?on=ni:sr.sibling=ni,sr=ni,mn=Hr}if(Vn.done)return S(Re,mn),on;if(mn===null){for(;!Vn.done;pr++,Vn=ze.next())Vn=A0(Re,Vn.value,Et),Vn!==null&&(Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return on}for(mn=O(Re,mn);!Vn.done;pr++,Vn=ze.next())Vn=gi(mn,Re,pr,Vn.value,Et),Vn!==null&&(v&&Vn.alternate!==null&&mn.delete(Vn.key===null?pr:Vn.key),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return v&&mn.forEach(function(Zf){return m(Re,Zf)}),on}return function(Re,Ce,ze,Et){var on=typeof ze=="object"&&ze!==null&&ze.type===L&&ze.key===null;on&&(ze=ze.props.children);var sr=typeof ze=="object"&&ze!==null;if(sr)switch(ze.$$typeof){case x:e:{for(sr=ze.key,on=Ce;on!==null;){if(on.key===sr)if(on.tag===7?ze.type===L:on.elementType===ze.type){S(Re,on.sibling),Ce=M(on,ze.type===L?ze.props.children:ze.props,Et),Ce.ref=au(Re,on,ze),Ce.return=Re,Re=Ce;break e}else{S(Re,on);break}else m(Re,on);on=on.sibling}ze.type===L?(Ce=mi(ze.props.children,Re.mode,Et,ze.key),Ce.return=Re,Re=Ce):(Et=Hs(ze.type,ze.key,ze.props,null,Re.mode,Et),Et.ref=au(Re,Ce,ze),Et.return=Re,Re=Et)}return ee(Re);case D:e:{for(on=ze.key;Ce!==null;){if(Ce.key===on)if(Ce.tag===4&&Ce.stateNode.containerInfo===ze.containerInfo&&Ce.stateNode.implementation===ze.implementation){S(Re,Ce.sibling),Ce=M(Ce,ze.children||[],Et),Ce.return=Re,Re=Ce;break e}else{S(Re,Ce);break}else m(Re,Ce);Ce=Ce.sibling}Ce=Xf(ze,Re.mode,Et),Ce.return=Re,Re=Ce}return ee(Re)}if(typeof ze=="string"||typeof ze=="number")return ze=""+ze,Ce!==null&&Ce.tag===6?(S(Re,Ce.sibling),Ce=M(Ce,ze,Et),Ce.return=Re,Re=Ce):(S(Re,Ce),Ce=vi(ze,Re.mode,Et),Ce.return=Re,Re=Ce),ee(Re);if(M0(ze))return po(Re,Ce,ze,Et);if(J(ze))return _i(Re,Ce,ze,Et);if(sr&&Lr(Re,ze),typeof ze=="undefined"&&!on)switch(Re.tag){case 1:case 0:throw Re=Re.type,Error(t(152,Re.displayName||Re.name||"Component"))}return S(Re,Ce)}}var R=F(!0),U=F(!1),H={},fe={current:H},ue={current:H},de={current:H};function W(v){if(v===H)throw Error(t(174));return v}function ve(v,m){Fr(de,m,v),Fr(ue,v,v),Fr(fe,H,v),m=Ot(m),kr(fe,v),Fr(fe,m,v)}function Fe(v){kr(fe,v),kr(ue,v),kr(de,v)}function Ge(v){var m=W(de.current),S=W(fe.current);m=Nt(S,v.type,m),S!==m&&(Fr(ue,v,v),Fr(fe,m,v))}function K(v){ue.current===v&&(kr(fe,v),kr(ue,v))}var xe={current:0};function je(v){for(var m=v;m!==null;){if(m.tag===13){var S=m.memoizedState;if(S!==null&&(S=S.dehydrated,S===null||ll(S)||fl(S)))return m}else if(m.tag===19&&m.memoizedProps.revealOrder!==void 0){if((m.effectTag&64)!=0)return m}else if(m.child!==null){m.child.return=m,m=m.child;continue}if(m===v)break;for(;m.sibling===null;){if(m.return===null||m.return===v)return null;m=m.return}m.sibling.return=m.return,m=m.sibling}return null}function Xe(v,m){return{responder:v,props:m}}var rt=C.ReactCurrentDispatcher,st=C.ReactCurrentBatchConfig,xt=0,wt=null,lt=null,Rt=null,yn=null,sn=null,ar=null,rn=0,Hn=null,d0=0,Cr=!1,He=null,Qe=0;function Ne(){throw Error(t(321))}function ft(v,m){if(m===null)return!1;for(var S=0;Srn&&(rn=In,pf(rn))):(Yf(In,Ze.suspenseConfig),b=Ze.eagerReducer===v?Ze.eagerState:v(b,Ze.action)),ee=Ze,Ze=Ze.next}while(Ze!==null&&Ze!==O);ut||(Ye=ee,M=b),Sn(b,m.memoizedState)||(ai=!0),m.memoizedState=b,m.baseUpdate=Ye,m.baseState=M,S.lastRenderedState=b}return[m.memoizedState,S.dispatch]}function ci(v){var m=Cn();return typeof v=="function"&&(v=v()),m.memoizedState=m.baseState=v,v=m.queue={last:null,dispatch:null,lastRenderedReducer:p0,lastRenderedState:v},v=v.dispatch=Us.bind(null,wt,v),[m.memoizedState,v]}function xi(v){return h0(p0,v)}function E0(v,m,S,O){return v={tag:v,create:m,destroy:S,deps:O,next:null},Hn===null?(Hn={lastEffect:null},Hn.lastEffect=v.next=v):(m=Hn.lastEffect,m===null?Hn.lastEffect=v.next=v:(S=m.next,m.next=v,v.next=S,Hn.lastEffect=v)),v}function qr(v,m,S,O){var M=Cn();d0|=v,M.memoizedState=E0(m,S,void 0,O===void 0?null:O)}function Eo(v,m,S,O){var M=bn();O=O===void 0?null:O;var b=void 0;if(lt!==null){var ee=lt.memoizedState;if(b=ee.destroy,O!==null&&ft(O,ee.deps)){E0(0,S,b,O);return}}d0|=v,M.memoizedState=E0(m,S,b,O)}function So(v,m){return qr(516,192,v,m)}function wl(v,m){return Eo(516,192,v,m)}function js(v,m){if(typeof m=="function")return v=v(),m(v),function(){m(null)};if(m!=null)return v=v(),m.current=v,function(){m.current=null}}function Dl(){}function du(v,m){return Cn().memoizedState=[v,m===void 0?null:m],v}function Yu(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(S.memoizedState=[v,m],v)}function Us(v,m,S){if(!(25>Qe))throw Error(t(301));var O=v.alternate;if(v===wt||O!==null&&O===wt)if(Cr=!0,v={expirationTime:xt,suspenseConfig:null,action:S,eagerReducer:null,eagerState:null,next:null},He===null&&(He=new Map),S=He.get(m),S===void 0)He.set(m,v);else{for(m=S;m.next!==null;)m=m.next;m.next=v}else{var M=g0(),b=nr.suspense;M=Kr(M,v,b),b={expirationTime:M,suspenseConfig:b,action:S,eagerReducer:null,eagerState:null,next:null};var ee=m.last;if(ee===null)b.next=b;else{var Ye=ee.next;Ye!==null&&(b.next=Ye),ee.next=b}if(m.last=b,v.expirationTime===0&&(O===null||O.expirationTime===0)&&(O=m.lastRenderedReducer,O!==null))try{var Ze=m.lastRenderedState,ut=O(Ze,S);if(b.eagerReducer=O,b.eagerState=ut,Sn(ut,Ze))return}catch(In){}finally{}_0(v,M)}}var oo={readContext:D0,useCallback:Ne,useContext:Ne,useEffect:Ne,useImperativeHandle:Ne,useLayoutEffect:Ne,useMemo:Ne,useReducer:Ne,useRef:Ne,useState:Ne,useDebugValue:Ne,useResponder:Ne,useDeferredValue:Ne,useTransition:Ne},Hi={readContext:D0,useCallback:du,useContext:D0,useEffect:So,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,qr(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return qr(4,36,v,m)},useMemo:function(v,m){var S=Cn();return m=m===void 0?null:m,v=v(),S.memoizedState=[v,m],v},useReducer:function(v,m,S){var O=Cn();return m=S!==void 0?S(m):m,O.memoizedState=O.baseState=m,v=O.queue={last:null,dispatch:null,lastRenderedReducer:v,lastRenderedState:m},v=v.dispatch=Us.bind(null,wt,v),[O.memoizedState,v]},useRef:function(v){var m=Cn();return v={current:v},m.memoizedState=v},useState:ci,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=ci(v),O=S[0],M=S[1];return So(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=ci(!1),S=m[0],O=m[1];return[du(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},qs={readContext:D0,useCallback:Yu,useContext:D0,useEffect:wl,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,Eo(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return Eo(4,36,v,m)},useMemo:function(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(v=v(),S.memoizedState=[v,m],v)},useReducer:h0,useRef:function(){return bn().memoizedState},useState:xi,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=xi(v),O=S[0],M=S[1];return wl(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=xi(!1),S=m[0],O=m[1];return[Yu(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},F0=null,Gr=null,ir=!1;function L0(v,m){var S=xo(5,null,null,0);S.elementType="DELETED",S.type="DELETED",S.stateNode=m,S.return=v,S.effectTag=8,v.lastEffect!==null?(v.lastEffect.nextEffect=S,v.lastEffect=S):v.firstEffect=v.lastEffect=S}function Y0(v,m){switch(v.tag){case 5:return m=Ti(m,v.type,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 6:return m=Fu(m,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 13:return!1;default:return!1}}function Co(v){if(ir){var m=Gr;if(m){var S=m;if(!Y0(v,m)){if(m=cl(S),!m||!Y0(v,m)){v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v;return}L0(F0,S)}F0=v,Gr=al(m)}else v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v}}function $u(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;F0=v}function Vo(v){if(!w||v!==F0)return!1;if(!ir)return $u(v),ir=!0,!1;var m=v.type;if(v.tag!==5||m!=="head"&&m!=="body"&&!at(m,v.memoizedProps))for(m=Gr;m;)L0(v,m),m=cl(m);if($u(v),v.tag===13){if(!w)throw Error(t(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(t(317));Gr=Ac(v)}else Gr=F0?cl(v.stateNode):null;return!0}function Rr(){w&&(Gr=F0=null,ir=!1)}var Jn=C.ReactCurrentOwner,ai=!1;function o0(v,m,S,O){m.child=v===null?U(m,null,S,O):R(m,v.child,S,O)}function Vr(v,m,S,O,M){S=S.render;var b=m.ref;return io(m,M),O=St(v,m,S,O,b,M),v!==null&&!ai?(m.updateQueue=v.updateQueue,m.effectTag&=-517,v.expirationTime<=M&&(v.expirationTime=0),X0(v,m,M)):(m.effectTag|=1,o0(v,m,O,M),m.child)}function ff(v,m,S,O,M,b){if(v===null){var ee=S.type;return typeof ee=="function"&&!mf(ee)&&ee.defaultProps===void 0&&S.compare===null&&S.defaultProps===void 0?(m.tag=15,m.type=ee,cf(v,m,ee,O,M,b)):(v=Hs(S.type,null,O,null,m.mode,b),v.ref=m.ref,v.return=m,m.child=v)}return ee=v.child,Mm)&&Qn.set(v,m)))}}function Gi(v,m){v.expirationTimev?m:v)}function x0(v){if(v.lastExpiredTime!==0)v.callbackExpirationTime=1073741823,v.callbackPriority=99,v.callbackNode=Ho(Z0.bind(null,v));else{var m=fo(v),S=v.callbackNode;if(m===0)S!==null&&(v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90);else{var O=g0();if(m===1073741823?O=99:m===1||m===2?O=95:(O=10*(1073741821-m)-10*(1073741821-O),O=0>=O?99:250>=O?98:5250>=O?97:95),S!==null){var M=v.callbackPriority;if(v.callbackExpirationTime===m&&M>=O)return;S!==ju&&uf(S)}v.callbackExpirationTime=m,v.callbackPriority=O,m=m===1073741823?Ho(Z0.bind(null,v)):lu(O,Xu.bind(null,v),{timeout:10*(1073741821-m)-G0()}),v.callbackNode=m}}}function Xu(v,m){if(t0=0,m)return m=g0(),kl(v,m),x0(v),null;var S=fo(v);if(S!==0){if(m=v.callbackNode,(Kt&(Br|zr))!==Fn)throw Error(t(327));if(Ws(),v===X&&S===ye||mu(v,S),Y!==null){var O=Kt;Kt|=Br;var M=ei(v);do try{Ua();break}catch(Ye){Ju(v,Ye)}while(1);if(Wu(),Kt=O,B0.current=M,he===wr)throw m=We,mu(v,S),ao(v,S),x0(v),m;if(Y===null)switch(M=v.finishedWork=v.current.alternate,v.finishedExpirationTime=S,O=he,X=null,O){case lo:case wr:throw Error(t(345));case kn:kl(v,2=S){v.lastPingedTime=S,mu(v,S);break}}if(b=fo(v),b!==0&&b!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}v.timeoutHandle=jt(gu.bind(null,v),M);break}gu(v);break;case hi:if(ao(v,S),O=v.lastSuspendedTime,S===O&&(v.nextKnownPendingLevel=$f(M)),qt&&(M=v.lastPingedTime,M===0||M>=S)){v.lastPingedTime=S,mu(v,S);break}if(M=fo(v),M!==0&&M!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}if(Dt!==1073741823?O=10*(1073741821-Dt)-G0():et===1073741823?O=0:(O=10*(1073741821-et)-5e3,M=G0(),S=10*(1073741821-S)-M,O=M-O,0>O&&(O=0),O=(120>O?120:480>O?480:1080>O?1080:1920>O?1920:3e3>O?3e3:4320>O?4320:1960*Cl(O/1960))-O,S=O?O=0:(M=ee.busyDelayMs|0,b=G0()-(10*(1073741821-b)-(ee.timeoutMs|0||5e3)),O=b<=M?0:M+O-b),10 component higher in the tree to provide a loading indicator or placeholder to display.`+dl(M))}he!==Ai&&(he=kn),b=zs(b,M),Ze=O;do{switch(Ze.tag){case 3:ee=b,Ze.effectTag|=4096,Ze.expirationTime=m;var Ce=pu(Ze,ee,m);bu(Ze,Ce);break e;case 1:ee=b;var ze=Ze.type,Et=Ze.stateNode;if((Ze.effectTag&64)==0&&(typeof ze.getDerivedStateFromError=="function"||Et!==null&&typeof Et.componentDidCatch=="function"&&(Ar===null||!Ar.has(Et)))){Ze.effectTag|=4096,Ze.expirationTime=m;var on=Sl(Ze,ee,m);bu(Ze,on);break e}}Ze=Ze.return}while(Ze!==null)}Y=vu(Y)}catch(sr){m=sr;continue}break}while(1)}function ei(){var v=B0.current;return B0.current=oo,v===null?oo:v}function Yf(v,m){vZt&&(Zt=v)}function ja(){for(;Y!==null;)Y=Ic(Y)}function Ua(){for(;Y!==null&&!_n();)Y=Ic(Y)}function Ic(v){var m=Lc(v.alternate,v,ye);return v.memoizedProps=v.pendingProps,m===null&&(m=vu(v)),hu.current=null,m}function vu(v){Y=v;do{var m=Y.alternate;if(v=Y.return,(Y.effectTag&2048)==0){e:{var S=m;m=Y;var O=ye,M=m.pendingProps;switch(m.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:c0(m.type)&&Ru(m);break;case 3:Fe(m),ks(m),M=m.stateNode,M.pendingContext&&(M.context=M.pendingContext,M.pendingContext=null),(S===null||S.child===null)&&Vo(m)&&ki(m),$r(m);break;case 5:K(m);var b=W(de.current);if(O=m.type,S!==null&&m.stateNode!=null)m0(S,m,O,M,b),S.ref!==m.ref&&(m.effectTag|=128);else if(M){if(S=W(fe.current),Vo(m)){if(M=m,!w)throw Error(t(175));S=Ui(M.stateNode,M.type,M.memoizedProps,b,S,M),M.updateQueue=S,S=S!==null,S&&ki(m)}else{var ee=ne(O,M,b,S,m);Yr(ee,m,!1,!1),m.stateNode=ee,Z(ee,O,M,b,S)&&ki(m)}m.ref!==null&&(m.effectTag|=128)}else if(m.stateNode===null)throw Error(t(166));break;case 6:if(S&&m.stateNode!=null)Tn(S,m,S.memoizedProps,M);else{if(typeof M!="string"&&m.stateNode===null)throw Error(t(166));if(S=W(de.current),b=W(fe.current),Vo(m)){if(S=m,!w)throw Error(t(176));(S=Mr(S.stateNode,S.memoizedProps,S))&&ki(m)}else m.stateNode=Ft(M,S,b,m)}break;case 11:break;case 13:if(kr(xe,m),M=m.memoizedState,(m.effectTag&64)!=0){m.expirationTime=O;break e}M=M!==null,b=!1,S===null?m.memoizedProps.fallback!==void 0&&Vo(m):(O=S.memoizedState,b=O!==null,M||O===null||(O=S.child.sibling,O!==null&&(ee=m.firstEffect,ee!==null?(m.firstEffect=O,O.nextEffect=ee):(m.firstEffect=m.lastEffect=O,O.nextEffect=null),O.effectTag=8))),M&&!b&&(m.mode&2)!=0&&(S===null&&m.memoizedProps.unstable_avoidThisFallback!==!0||(xe.current&1)!=0?he===lo&&(he=T0):((he===lo||he===T0)&&(he=hi),Zt!==0&&X!==null&&(ao(X,ye),$o(X,Zt)))),cr&&M&&(m.effectTag|=4),Yt&&(M||b)&&(m.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Fe(m),$r(m);break;case 10:fi(m);break;case 9:break;case 14:break;case 17:c0(m.type)&&Ru(m);break;case 19:if(kr(xe,m),M=m.memoizedState,M===null)break;if(b=(m.effectTag&64)!=0,ee=M.rendering,ee===null){if(b)bi(M,!1);else if(he!==lo||S!==null&&(S.effectTag&64)!=0)for(S=m.child;S!==null;){if(ee=je(S),ee!==null){for(m.effectTag|=64,bi(M,!1),S=ee.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),M.lastEffect===null&&(m.firstEffect=null),m.lastEffect=M.lastEffect,S=O,M=m.child;M!==null;)b=M,O=S,b.effectTag&=2,b.nextEffect=null,b.firstEffect=null,b.lastEffect=null,ee=b.alternate,ee===null?(b.childExpirationTime=0,b.expirationTime=O,b.child=null,b.memoizedProps=null,b.memoizedState=null,b.updateQueue=null,b.dependencies=null):(b.childExpirationTime=ee.childExpirationTime,b.expirationTime=ee.expirationTime,b.child=ee.child,b.memoizedProps=ee.memoizedProps,b.memoizedState=ee.memoizedState,b.updateQueue=ee.updateQueue,O=ee.dependencies,b.dependencies=O===null?null:{expirationTime:O.expirationTime,firstContext:O.firstContext,responders:O.responders}),M=M.sibling;Fr(xe,xe.current&1|2,m),m=m.child;break e}S=S.sibling}}else{if(!b)if(S=je(ee),S!==null){if(m.effectTag|=64,b=!0,S=S.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),bi(M,!0),M.tail===null&&M.tailMode==="hidden"&&!ee.alternate){m=m.lastEffect=M.lastEffect,m!==null&&(m.nextEffect=null);break}}else G0()>M.tailExpiration&&1M&&(M=O),ee>M&&(M=ee),b=b.sibling;S.childExpirationTime=M}if(m!==null)return m;v!==null&&(v.effectTag&2048)==0&&(v.firstEffect===null&&(v.firstEffect=Y.firstEffect),Y.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=Y.firstEffect),v.lastEffect=Y.lastEffect),1v?m:v}function gu(v){var m=Fs();return zi(99,co.bind(null,v,m)),null}function co(v,m){do Ws();while(dr!==null);if((Kt&(Br|zr))!==Fn)throw Error(t(327));var S=v.finishedWork,O=v.finishedExpirationTime;if(S===null)return null;if(v.finishedWork=null,v.finishedExpirationTime=0,S===v.current)throw Error(t(177));v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90,v.nextKnownPendingLevel=0;var M=$f(S);if(v.firstPendingTime=M,O<=v.lastSuspendedTime?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:O<=v.firstSuspendedTime&&(v.firstSuspendedTime=O-1),O<=v.lastPingedTime&&(v.lastPingedTime=0),O<=v.lastExpiredTime&&(v.lastExpiredTime=0),v===X&&(Y=X=null,ye=0),1=S?mt(v,m,S):(Fr(xe,xe.current&1,m),m=X0(v,m,S),m!==null?m.sibling:null);Fr(xe,xe.current&1,m);break;case 19:if(O=m.childExpirationTime>=S,(v.effectTag&64)!=0){if(O)return $t(v,m,S);m.effectTag|=64}if(M=m.memoizedState,M!==null&&(M.rendering=null,M.tail=null),Fr(xe,xe.current,m),!O)return null}return X0(v,m,S)}ai=!1}}else ai=!1;switch(m.expirationTime=0,m.tag){case 2:if(O=m.type,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,M=Lu(m,H0.current),io(m,S),M=St(null,m,O,v,M,S),m.effectTag|=1,typeof M=="object"&&M!==null&&typeof M.render=="function"&&M.$$typeof===void 0){if(m.tag=1,Qt(),c0(O)){var b=!0;wo(m)}else b=!1;m.memoizedState=M.state!==null&&M.state!==void 0?M.state:null;var ee=O.getDerivedStateFromProps;typeof ee=="function"&&Go(m,O,ee,v),M.updater=Gu,m.stateNode=M,M._reactInternalFiber=m,Vu(m,O,v,S),m=Be(null,m,O,!0,b,S)}else m.tag=0,o0(null,m,M,S),m=m.child;return m;case 16:if(M=m.elementType,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,Te(M),M._status!==1)throw M._result;switch(M=M._result,m.type=M,b=m.tag=Wa(M),v=I0(M,v),b){case 0:m=K0(null,m,M,v,S);break;case 1:m=ae(null,m,M,v,S);break;case 11:m=Vr(null,m,M,v,S);break;case 14:m=ff(null,m,M,I0(M.type,v),O,S);break;default:throw Error(t(306,M,""))}return m;case 0:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),K0(v,m,O,M,S);case 1:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),ae(v,m,O,M,S);case 3:if(Ie(m),O=m.updateQueue,O===null)throw Error(t(282));if(M=m.memoizedState,M=M!==null?M.element:null,P0(m,O,m.pendingProps,null,S),O=m.memoizedState.element,O===M)Rr(),m=X0(v,m,S);else{if((M=m.stateNode.hydrate)&&(w?(Gr=al(m.stateNode.containerInfo),F0=m,M=ir=!0):M=!1),M)for(S=U(m,null,O,S),m.child=S;S;)S.effectTag=S.effectTag&-3|1024,S=S.sibling;else o0(v,m,O,S),Rr();m=m.child}return m;case 5:return Ge(m),v===null&&Co(m),O=m.type,M=m.pendingProps,b=v!==null?v.memoizedProps:null,ee=M.children,at(O,M)?ee=null:b!==null&&at(O,b)&&(m.effectTag|=16),$0(v,m),m.mode&4&&S!==1&&it(O,M)?(m.expirationTime=m.childExpirationTime=1,m=null):(o0(v,m,ee,S),m=m.child),m;case 6:return v===null&&Co(m),null;case 13:return mt(v,m,S);case 4:return ve(m,m.stateNode.containerInfo),O=m.pendingProps,v===null?m.child=R(m,null,O,S):o0(v,m,O,S),m.child;case 11:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),Vr(v,m,O,M,S);case 7:return o0(v,m,m.pendingProps,S),m.child;case 8:return o0(v,m,m.pendingProps.children,S),m.child;case 12:return o0(v,m,m.pendingProps.children,S),m.child;case 10:e:{if(O=m.type._context,M=m.pendingProps,ee=m.memoizedProps,b=M.value,Ls(m,b),ee!==null){var Ye=ee.value;if(b=Sn(Ye,b)?0:(typeof O._calculateChangedBits=="function"?O._calculateChangedBits(Ye,b):1073741823)|0,b===0){if(ee.children===M.children&&!b0.current){m=X0(v,m,S);break e}}else for(Ye=m.child,Ye!==null&&(Ye.return=m);Ye!==null;){var Ze=Ye.dependencies;if(Ze!==null){ee=Ye.child;for(var ut=Ze.firstContext;ut!==null;){if(ut.context===O&&(ut.observedBits&b)!=0){Ye.tag===1&&(ut=a0(S,null),ut.tag=2,V0(Ye,ut)),Ye.expirationTime=m&&v<=m}function ao(v,m){var S=v.firstSuspendedTime,O=v.lastSuspendedTime;Sm||S===0)&&(v.lastSuspendedTime=m),m<=v.lastPingedTime&&(v.lastPingedTime=0),m<=v.lastExpiredTime&&(v.lastExpiredTime=0)}function $o(v,m){m>v.firstPendingTime&&(v.firstPendingTime=m);var S=v.firstSuspendedTime;S!==0&&(m>=S?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:m>=v.lastSuspendedTime&&(v.lastSuspendedTime=m+1),m>v.nextKnownPendingLevel&&(v.nextKnownPendingLevel=m))}function kl(v,m){var S=v.lastExpiredTime;(S===0||S>m)&&(v.lastExpiredTime=m)}function Nc(v){var m=v._reactInternalFiber;if(m===void 0)throw typeof v.render=="function"?Error(t(188)):Error(t(268,Object.keys(v)));return v=Ue(m),v===null?null:v.stateNode}function Al(v,m){v=v.memoizedState,v!==null&&v.dehydrated!==null&&v.retryTime{"use strict";sE.exports=uE()});var cE=Me((db,fE)=>{"use strict";var gN={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};fE.exports=gN});var hE=Me((pb,aE)=>{"use strict";var _N=Object.assign||function(i){for(var u=1;u"}}]),i}(),dE=function(){Ph(i,null,[{key:"fromJS",value:function(f){var c=f.width,g=f.height;return new i(c,g)}}]);function i(u,f){Iy(this,i),this.width=u,this.height=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),pE=function(){function i(u,f){Iy(this,i),this.unit=u,this.value=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case ps.UNIT_POINT:return String(this.value);case ps.UNIT_PERCENT:return this.value+"%";case ps.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();aE.exports=function(i,u){function f(C,A,x){var D=C[A];C[A]=function(){for(var L=arguments.length,N=Array(L),j=0;j1?N-1:0),$=1;$1&&arguments[1]!==void 0?arguments[1]:NaN,x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,D=arguments.length>3&&arguments[3]!==void 0?arguments[3]:ps.DIRECTION_LTR;return C.call(this,A,x,D)}),_N({Config:u.Config,Node:u.Node,Layout:i("Layout",yN),Size:i("Size",dE),Value:i("Value",pE),getInstanceCount:function(){return u.getInstanceCount.apply(u,arguments)}},ps)}});var mE=Me((exports,module)=>{(function(i,u){typeof define=="function"&&define.amd?define([],function(){return u}):typeof module=="object"&&module.exports?module.exports=u:(i.nbind=i.nbind||{}).init=u})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,u){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(f){u(f);return}u(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(u,f){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),u=nodePath.normalize(u);var c=nodeFS.readFileSync(u);return f?c:c.toString()},Module.readBinary=function(u){var f=Module.read(u,!0);return f.buffer||(f=new Uint8Array(f)),assert(f.buffer),f},Module.load=function(u){globalEval(read(u))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(u){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(u));var f=read(u,"binary");return assert(typeof f=="object"),f},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,u){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),Module.readAsync=function(u,f,c){var g=new XMLHttpRequest;g.open("GET",u,!0),g.responseType="arraybuffer",g.onload=function(){g.status==200||g.status==0&&g.response?f(g.response):c()},g.onerror=c,g.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(u){console.log(u)}),Module.printErr||(Module.printErr=function(u){console.warn(u)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(u){globalEval(Module.read(u))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,u){throw u}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var u=parseInt(i.substr(1));return assert(u%8==0),u/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,u){return u==="double"||u==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,u,f){return!f&&(i=="i64"||i=="double")?8:i?Math.min(u||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(u,8)},dynCall:function(i,u,f){return f&&f.length?Module["dynCall_"+i].apply(null,[u].concat(f)):Module["dynCall_"+i].call(null,u)},functionPointers:[],addFunction:function(i){for(var u=0;u>2],f=(u+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=f,f>=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return HEAP32[DYNAMICTOP_PTR>>2]=u,0}return u},alignMemory:function(i,u){var f=i=Math.ceil(i/(u||16))*(u||16);return f},makeBigInt:function(i,u,f){var c=f?+(i>>>0)+ +(u>>>0)*4294967296:+(i>>>0)+ +(u|0)*4294967296;return c},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,u){i||abort("Assertion failed: "+u)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var u=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,u),u},stringToC:function(i){var u=0;if(i!=null&&i!==0){var f=(i.length<<2)+1;u=Runtime.stackAlloc(f),stringToUTF8(i,u,f)}return u}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(u,f,c,g,t){var C=getCFunc(u),A=[],x=0;if(g)for(var D=0;D>0]=u;break;case"i8":HEAP8[i>>0]=u;break;case"i16":HEAP16[i>>1]=u;break;case"i32":HEAP32[i>>2]=u;break;case"i64":tempI64=[u>>>0,(tempDouble=u,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=u;break;case"double":HEAPF64[i>>3]=u;break;default:abort("invalid type for setValue: "+f)}}Module.setValue=setValue;function getValue(i,u,f){switch(u=u||"i8",u.charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+u)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,u,f,c){var g,t;typeof i=="number"?(g=!0,t=i):(g=!1,t=i.length);var C=typeof u=="string"?u:null,A;if(f==ALLOC_NONE?A=c:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][f===void 0?ALLOC_STATIC:f](Math.max(t,C?1:u.length)),g){var c=A,x;for(assert((A&3)==0),x=A+(t&~3);c>2]=0;for(x=A+t;c>0]=0;return A}if(C==="i8")return i.subarray||i.slice?HEAPU8.set(i,A):HEAPU8.set(new Uint8Array(i),A),A;for(var D=0,L,N,j;D>0],f|=c,!(c==0&&!u||(g++,u&&g==u)););u||(u=g);var t="";if(f<128){for(var C=1024,A;u>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(u,C))),t=t?t+A:A,i+=C,u-=C;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var u="";;){var f=HEAP8[i++>>0];if(!f)return u;u+=String.fromCharCode(f)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,u){return writeAsciiToMemory(i,u,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,u){for(var f=u;i[f];)++f;if(f-u>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(u,f));for(var c,g,t,C,A,x,D="";;){if(c=i[u++],!c)return D;if(!(c&128)){D+=String.fromCharCode(c);continue}if(g=i[u++]&63,(c&224)==192){D+=String.fromCharCode((c&31)<<6|g);continue}if(t=i[u++]&63,(c&240)==224?c=(c&15)<<12|g<<6|t:(C=i[u++]&63,(c&248)==240?c=(c&7)<<18|g<<12|t<<6|C:(A=i[u++]&63,(c&252)==248?c=(c&3)<<24|g<<18|t<<12|C<<6|A:(x=i[u++]&63,c=(c&1)<<30|g<<24|t<<18|C<<12|A<<6|x))),c<65536)D+=String.fromCharCode(c);else{var L=c-65536;D+=String.fromCharCode(55296|L>>10,56320|L&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,u,f,c){if(!(c>0))return 0;for(var g=f,t=f+c-1,C=0;C=55296&&A<=57343&&(A=65536+((A&1023)<<10)|i.charCodeAt(++C)&1023),A<=127){if(f>=t)break;u[f++]=A}else if(A<=2047){if(f+1>=t)break;u[f++]=192|A>>6,u[f++]=128|A&63}else if(A<=65535){if(f+2>=t)break;u[f++]=224|A>>12,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=2097151){if(f+3>=t)break;u[f++]=240|A>>18,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=67108863){if(f+4>=t)break;u[f++]=248|A>>24,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else{if(f+5>=t)break;u[f++]=252|A>>30,u[f++]=128|A>>24&63,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}}return u[f]=0,f-g}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,u,f){return stringToUTF8Array(i,HEAPU8,u,f)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var u=0,f=0;f=55296&&c<=57343&&(c=65536+((c&1023)<<10)|i.charCodeAt(++f)&1023),c<=127?++u:c<=2047?u+=2:c<=65535?u+=3:c<=2097151?u+=4:c<=67108863?u+=5:u+=6}return u}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var u=Module.___cxa_demangle||Module.__cxa_demangle;if(u){try{var f=i.substr(1),c=lengthBytesUTF8(f)+1,g=_malloc(c);stringToUTF8(f,g,c);var t=_malloc(4),C=u(g,0,0,t);if(getValue(t,"i32")===0&&C)return Pointer_stringify(C)}catch(A){}finally{g&&_free(g),t&&_free(t),C&&_free(C)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var u=/__Z[\w\d_]+/g;return i.replace(u,function(f){var c=demangle(f);return f===c?f:f+" ["+c+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(u){i=u}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=` -`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var u=i.shift();if(typeof u=="function"){u();continue}var f=u.func;typeof f=="number"?u.arg===void 0?Module.dynCall_v(f):Module.dynCall_vi(f,u.arg):f(u.arg===void 0?null:u.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,u,f){var c=f>0?f:lengthBytesUTF8(i)+1,g=new Array(c),t=stringToUTF8Array(i,g,0,g.length);return u&&(g.length=t),g}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var u=[],f=0;f255&&(c&=255),u.push(String.fromCharCode(c))}return u.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,u,f){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var c,g;f&&(g=u+lengthBytesUTF8(i),c=HEAP8[g]),stringToUTF8(i,u,Infinity),f&&(HEAP8[g]=c)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,u){HEAP8.set(i,u)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,u,f){for(var c=0;c>0]=i.charCodeAt(c);f||(HEAP8[u>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(u,f){var c=u>>>16,g=u&65535,t=f>>>16,C=f&65535;return g*C+(c*C+g*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var u=0;u<32;u++)if(i&1<<31-u)return u;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var u=dependenciesFulfilled;dependenciesFulfilled=null,u()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,u,f,c,g,t,C,A){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,u,f,c,g,t,C,A){return ASM_CONSTS[i](u,f,c,g,t,C,A)}function _emscripten_asm_const_iiiii(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiidddddd(i,u,f,c,g,t,C,A,x){return ASM_CONSTS[i](u,f,c,g,t,C,A,x)}function _emscripten_asm_const_iiididi(i,u,f,c,g,t,C){return ASM_CONSTS[i](u,f,c,g,t,C)}function _emscripten_asm_const_iiii(i,u,f,c){return ASM_CONSTS[i](u,f,c)}function _emscripten_asm_const_iiiid(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiiiii(i,u,f,c,g,t){return ASM_CONSTS[i](u,f,c,g,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,u){__ATEXIT__.unshift({func:i,arg:u})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,u,f,c){var g=arguments.length,t=g<3?u:c===null?c=Object.getOwnPropertyDescriptor(u,f):c,C;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,u,f,c);else for(var A=i.length-1;A>=0;A--)(C=i[A])&&(t=(g<3?C(t):g>3?C(u,f,t):C(u,f))||t);return g>3&&t&&Object.defineProperty(u,f,t),t}function _defineHidden(i){return function(u,f){Object.defineProperty(u,f,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var u=_llvm_stacksave,f=u.LLVM_SAVEDSTACKS[i];u.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(f)}function __nbind_register_pool(i,u,f,c){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=u/4,_nbind.Pool.rootPtr=f,_nbind.Pool.pagePtr=c/4,HEAP32[u/4]=16909060,HEAP8[u]==1&&(_nbind.bigEndian=!0),HEAP32[u/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var g=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});g.proto=Module,_nbind.BindClass.list.push(g);var t}function _emscripten_set_main_loop_timing(i,u){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=u,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var C=Math.max(0,Browser.mainLoop.tickStartTime+u-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,C)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(C){C.source===window&&C.data===c&&(C.stopPropagation(),f.shift()())};var g=t,f=[],c="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(A){f.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:c})):window.postMessage(c,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,u,f,c,g){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=c;var t;typeof c!="undefined"?t=function(){Module.dynCall_vi(i,c)}:t=function(){Module.dynCall_v(i)};var C=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var x=Date.now(),D=Browser.mainLoop.queue.shift();if(D.func(D.arg),Browser.mainLoop.remainingBlockers){var L=Browser.mainLoop.remainingBlockers,N=L%1==0?L-1:Math.floor(L);D.counted?Browser.mainLoop.remainingBlockers=N:(N=N+.5,Browser.mainLoop.remainingBlockers=(8*L+N)/9)}if(console.log('main loop blocker "'+D.name+'" took '+(Date.now()-x)+" ms"),Browser.mainLoop.updateStatus(),C1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(C0?_emscripten_set_main_loop_timing(0,1e3/u):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),f)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,u=Browser.mainLoop.timingValue,f=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(f,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,u),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",u=Browser.mainLoop.remainingBlockers,f=Browser.mainLoop.expectedBlockers;u?u=6;){var Le=J>>Te-6&63;Te-=6,De+=Se[Le]}return Te==2?(De+=Se[(J&3)<<4],De+=me+me):Te==4&&(De+=Se[(J&15)<<2],De+=me),De}h.src="data:audio/x-"+C.substr(-3)+";base64,"+Q(t),L(h)},h.src=$,Browser.safeSetTimeout(function(){L(h)},1e4)}else return N()},Module.preloadPlugins.push(u);function f(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var c=Module.canvas;c&&(c.requestPointerLock=c.requestPointerLock||c.mozRequestPointerLock||c.webkitRequestPointerLock||c.msRequestPointerLock||function(){},c.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},c.exitPointerLock=c.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",f,!1),document.addEventListener("mozpointerlockchange",f,!1),document.addEventListener("webkitpointerlockchange",f,!1),document.addEventListener("mspointerlockchange",f,!1),Module.elementPointerLock&&c.addEventListener("click",function(g){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),g.preventDefault())},!1))},createContext:function(i,u,f,c){if(u&&Module.ctx&&i==Module.canvas)return Module.ctx;var g,t;if(u){var C={antialias:!1,alpha:!1};if(c)for(var A in c)C[A]=c[A];t=GL.createContext(i,C),t&&(g=GL.getContext(t).GLctx)}else g=i.getContext("2d");return g?(f&&(u||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=g,u&&GL.makeContextCurrent(t),Module.useWebGL=u,Browser.moduleContextCreatedCallbacks.forEach(function(x){x()}),Browser.init()),g):null},destroyContext:function(i,u,f){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,u,f){Browser.lockPointer=i,Browser.resizeCanvas=u,Browser.vrDevice=f,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var c=Module.canvas;function g(){Browser.isFullscreen=!1;var C=c.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===C?(c.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},c.exitFullscreen=c.exitFullscreen.bind(document),Browser.lockPointer&&c.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(C.parentNode.insertBefore(c,C),C.parentNode.removeChild(C),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(c)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",g,!1),document.addEventListener("mozfullscreenchange",g,!1),document.addEventListener("webkitfullscreenchange",g,!1),document.addEventListener("MSFullscreenChange",g,!1));var t=document.createElement("div");c.parentNode.insertBefore(t,c),t.appendChild(c),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),f?t.requestFullscreen({vrDisplay:f}):t.requestFullscreen()},requestFullScreen:function(i,u,f){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(c,g,t){return Browser.requestFullscreen(c,g,t)},Browser.requestFullscreen(i,u,f)},nextRAF:0,fakeRequestAnimationFrame:function(i){var u=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=u+1e3/60;else for(;u+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var f=Math.max(Browser.nextRAF-u,0);setTimeout(i,f)},requestAnimationFrame:function(u){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(u):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(u))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(u){u()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,u){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},u)},safeSetInterval:function(i,u){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},u)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var u=0;switch(i.type){case"DOMMouseScroll":u=i.detail;break;case"mousewheel":u=i.wheelDelta;break;case"wheel":u=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return u},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var u=Module.canvas.getBoundingClientRect(),f=Module.canvas.width,c=Module.canvas.height,g=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var C=i.touch;if(C===void 0)return;var A=C.pageX-(g+u.left),x=C.pageY-(t+u.top);A=A*(f/u.width),x=x*(c/u.height);var D={x:A,y:x};if(i.type==="touchstart")Browser.lastTouches[C.identifier]=D,Browser.touches[C.identifier]=D;else if(i.type==="touchend"||i.type==="touchmove"){var L=Browser.touches[C.identifier];L||(L=D),Browser.lastTouches[C.identifier]=L,Browser.touches[C.identifier]=D}return}var N=i.pageX-(g+u.left),j=i.pageY-(t+u.top);N=N*(f/u.width),j=j*(c/u.height),Browser.mouseMovementX=N-Browser.mouseX,Browser.mouseMovementY=j-Browser.mouseY,Browser.mouseX=N,Browser.mouseY=j}},asyncLoad:function(i,u,f,c){var g=c?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),u(new Uint8Array(t)),g&&removeRunDependency(g)},function(t){if(f)f();else throw'Loading data file "'+i+'" failed.'}),g&&addRunDependency(g)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(u){u(i.width,i.height)})},setCanvasSize:function(i,u,f){var c=Module.canvas;Browser.updateCanvasDimensions(c,i,u),f||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,u,f){u&&f?(i.widthNative=u,i.heightNative=f):(u=i.widthNative,f=i.heightNative);var c=u,g=f;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(c/g>2];return u},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),u=SYSCALLS.get();return i>=0?assert(u===0):assert(u===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD();return FS.close(f),0}catch(c){return(typeof FS=="undefined"||!(c instanceof FS.ErrnoError))&&abort(c),-c.errno}}function ___syscall54(i,u){SYSCALLS.varargs=u;try{return 0}catch(f){return(typeof FS=="undefined"||!(f instanceof FS.ErrnoError))&&abort(f),-f.errno}}function _typeModule(i){var u=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function f(x,D,L,N,j,$){if(D==1){var h=N&896;(h==128||h==256||h==384)&&(x="X const")}var re;return $?re=L.replace("X",x).replace("Y",j):re=x.replace("X",L).replace("Y",j),re.replace(/([*&]) (?=[*&])/g,"$1")}function c(x,D,L,N,j){throw new Error(x+" type "+L.replace("X",D+"?")+(N?" with flag "+N:"")+" in "+j)}function g(x,D,L,N,j,$,h,re){$===void 0&&($="X"),re===void 0&&(re=1);var ce=L(x);if(ce)return ce;var Q=N(x),oe=Q.placeholderFlag,Se=u[oe];h&&Se&&($=f(h[2],h[0],$,Se[0],"?",!0));var me;oe==0&&(me="Unbound"),oe>=10&&(me="Corrupt"),re>20&&(me="Deeply nested"),me&&c(me,x,$,oe,j||"?");var De=Q.paramList[0],J=g(De,D,L,N,j,$,Se,re+1),Te,Oe={flags:Se[0],id:x,name:"",paramList:[J]},Le=[],ot="?";switch(Q.placeholderFlag){case 1:Te=J.spec;break;case 2:if((J.flags&15360)==1024&&J.spec.ptrSize==1){Oe.flags=7168;break}case 3:case 6:case 5:Te=J.spec,(J.flags&15360)!=2048;break;case 8:ot=""+Q.paramList[1],Oe.paramList.push(Q.paramList[1]);break;case 9:for(var ct=0,Ue=Q.paramList[1];ct>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=SYSCALLS.get(),C=SYSCALLS.get(),A=g;return FS.llseek(f,A,C),HEAP32[t>>2]=f.position,f.getdents&&A===0&&C===0&&(f.getdents=null),0}catch(x){return(typeof FS=="undefined"||!(x instanceof FS.ErrnoError))&&abort(x),-x.errno}}function ___syscall146(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.get(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(L,N){var j=___syscall146.buffers[L];assert(j),N===0||N===10?((L===1?Module.print:Module.printErr)(UTF8ArrayToString(j,0)),j.length=0):j.push(N)});for(var C=0;C>2],x=HEAP32[c+(C*8+4)>>2],D=0;Di.pageSize/2||u>i.pageSize-f){var c=_nbind.typeNameTbl.NBind.proto;return c.lalloc(u)}else return HEAPU32[i.usedPtr]=f+u,i.rootPtr+f},i.lreset=function(u,f){var c=HEAPU32[i.pagePtr];if(c){var g=_nbind.typeNameTbl.NBind.proto;g.lreset(u,f)}else HEAPU32[i.usedPtr]=u},i}();_nbind.Pool=Pool;function constructType(i,u){var f=i==10240?_nbind.makeTypeNameTbl[u.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],c=new f(u);return typeIdTbl[u.id]=c,_nbind.typeNameTbl[u.name]=c,c}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var u=HEAPU8[i],f=_nbind.structureList[u][1];i/=4,f<0&&(++i,f=HEAPU32[i]+1);var c=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+f));return u==9&&(c=[c[0],c.slice(1)]),{paramList:c,placeholderFlag:u}}_nbind.queryType=queryType;function getTypes(i,u){return i.map(function(f){return typeof f=="number"?_nbind.getComplexType(f,constructType,getType,queryType,u):_nbind.typeNameTbl[f]})}_nbind.getTypes=getTypes;function readTypeIdList(i,u){return Array.prototype.slice.call(HEAPU32,i/4,i/4+u)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var u=i;HEAPU8[u++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,u-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var u={};if(i)for(;;){var f=HEAPU32[i/4];if(!f)break;u[readAsciiString(f)]=!0,i+=4}return u}_nbind.readPolicyList=readPolicyList;function getDynCall(i,u){var f={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},c=i.map(function(t){return f[t.name]||"i"}).join(""),g=Module["dynCall_"+c];if(!g)throw new Error("dynCall_"+c+" not found for "+u+"("+i.map(function(t){return t.name}).join(", ")+")");return g}_nbind.getDynCall=getDynCall;function addMethod(i,u,f,c){var g=i[u];i.hasOwnProperty(u)&&g?((g.arity||g.arity===0)&&(g=_nbind.makeOverloader(g,g.arity),i[u]=g),g.addMethod(f,c)):(f.arity=c,i[u]=f)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.heap=HEAPU32,f.ptrSize=4,f}return u.prototype.needsWireRead=function(f){return!!this.wireRead||!!this.makeWireRead},u.prototype.needsWireWrite=function(f){return!!this.wireWrite||!!this.makeWireWrite},u}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(u,i);function u(f){var c=i.call(this,f)||this,g=f.flags&32?{32:HEAPF32,64:HEAPF64}:f.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return c.heap=g[f.ptrSize*8],c.ptrSize=f.ptrSize,c}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="number")return g;throw new Error("Type mismatch")}},u}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,u){if(i==null){if(u&&u.Nullable)return 0;throw new Error("Type mismatch")}if(u&&u.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var f=Module.lengthBytesUTF8(i)+1,c=_nbind.Pool.lalloc(f);return Module.stringToUTF8Array(i,HEAPU8,c,f),c}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=popCString,f.wireWrite=pushCString,f.readResources=[_nbind.resources.pool],f.writeResources=[_nbind.resources.pool],f}return u.prototype.makeWireWrite=function(f,c){return function(g){return pushCString(g,c)}},u}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=function(c){return!!c},f}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireRead=function(f){return"!!("+f+")"},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="boolean")return g;throw new Error("Type mismatch")}||f},u}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,u){var f=function(c){__extends(g,c);function g(t,C,A,x){var D=c.call(this)||this;if(!(D instanceof g))return new(Function.prototype.bind.apply(g,Array.prototype.concat.apply([null],arguments)));var L=C,N=A,j=x;if(t!==_nbind.ptrMarker){var $=D.__nbindConstructor.apply(D,arguments);L=4096|512,j=HEAPU32[$/4],N=HEAPU32[$/4+1]}var h={configurable:!0,enumerable:!1,value:null,writable:!1},re={__nbindFlags:L,__nbindPtr:N};j&&(re.__nbindShared=j,_nbind.mark(D));for(var ce=0,Q=Object.keys(re);ce>=1;var f=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,f}else{if(u)return _nbind.popShared(i,u);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?C=Buffer.from(t):C=new Buffer(t),C.copy(c)}else getBuffer(c).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,u=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,u,f,c,g,t){try{Module.dynCall_viiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_vif(i,u,f){try{Module.dynCall_vif(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vid(i,u,f){try{Module.dynCall_vid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_fiff(i,u,f,c){try{return Module.dynCall_fiff(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_vi(i,u){try{Module.dynCall_vi(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_vii(i,u,f){try{Module.dynCall_vii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_ii(i,u){try{return Module.dynCall_ii(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viddi(i,u,f,c,g){try{Module.dynCall_viddi(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,u,f,c){try{Module.dynCall_vidd(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_iiii(i,u,f,c){try{return Module.dynCall_iiii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_diii(i,u,f,c){try{return Module.dynCall_diii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_di(i,u){try{return Module.dynCall_di(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_iid(i,u,f){try{return Module.dynCall_iid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_iii(i,u,f){try{return Module.dynCall_iii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiddi(i,u,f,c,g,t){try{Module.dynCall_viiddi(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiiiii(i,u,f,c,g,t,C){try{Module.dynCall_viiiiii(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(i,u,f){try{return Module.dynCall_dii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_iiiiii(i,u,f,c,g,t){try{return Module.dynCall_iiiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiid(i,u,f,c,g){try{Module.dynCall_viiid(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,u,f,c,g,t,C){try{Module.dynCall_viififi(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(i,u,f,c){try{Module.dynCall_viii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viid(i,u,f,c){try{Module.dynCall_viid(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_idd(i,u,f){try{return Module.dynCall_idd(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiii(i,u,f,c,g){try{Module.dynCall_viiii(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,u,f){var c=new i.Int8Array(f),g=new i.Int16Array(f),t=new i.Int32Array(f),C=new i.Uint8Array(f),A=new i.Uint16Array(f),x=new i.Uint32Array(f),D=new i.Float32Array(f),L=new i.Float64Array(f),N=u.DYNAMICTOP_PTR|0,j=u.tempDoublePtr|0,$=u.ABORT|0,h=u.STACKTOP|0,re=u.STACK_MAX|0,ce=u.cttz_i8|0,Q=u.___dso_handle|0,oe=0,Se=0,me=0,De=0,J=i.NaN,Te=i.Infinity,Oe=0,Le=0,ot=0,ct=0,Ue=0,be=0,At=i.Math.floor,Ot=i.Math.abs,Nt=i.Math.sqrt,Je=i.Math.pow,V=i.Math.cos,ne=i.Math.sin,ge=i.Math.tan,Z=i.Math.acos,Ae=i.Math.asin,at=i.Math.atan,it=i.Math.atan2,Ft=i.Math.exp,jt=i.Math.log,hn=i.Math.ceil,Un=i.Math.imul,Jt=i.Math.min,Yt=i.Math.max,cr=i.Math.clz32,w=i.Math.fround,pt=u.abort,Mn=u.assert,Bn=u.enlargeMemory,Xn=u.getTotalMemory,vr=u.abortOnCannotGrowMemory,gr=u.invoke_viiiii,r0=u.invoke_vif,Ci=u.invoke_vid,yo=u.invoke_fiff,Ds=u.invoke_vi,Mu=u.invoke_vii,Gf=u.invoke_ii,iu=u.invoke_viddi,ou=u.invoke_vidd,ol=u.invoke_iiii,ul=u.invoke_diii,Es=u.invoke_di,Uo=u.invoke_iid,sl=u.invoke_iii,Ss=u.invoke_viiddi,Cs=u.invoke_viiiiii,Ti=u.invoke_dii,Fu=u.invoke_i,ll=u.invoke_iiiiii,fl=u.invoke_viiid,cl=u.invoke_viififi,al=u.invoke_viii,Ui=u.invoke_v,Mr=u.invoke_viid,Ac=u.invoke_idd,of=u.invoke_viiii,Ts=u._emscripten_asm_const_iiiii,xs=u._emscripten_asm_const_iiidddddd,dl=u._emscripten_asm_const_iiiid,qi=u.__nbind_reference_external,qo=u._emscripten_asm_const_iiiiiiii,kr=u._removeAccessorPrefix,Fr=u._typeModule,si=u.__nbind_register_pool,H0=u.__decorate,b0=u._llvm_stackrestore,Bt=u.___cxa_atexit,Lu=u.__extends,c0=u.__nbind_get_value_object,Ru=u.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,ks=u._emscripten_set_main_loop_timing,As=u.__nbind_register_primitive,uu=u.__nbind_register_type,wo=u._emscripten_memcpy_big,zo=u.__nbind_register_function,Os=u.___setErrNo,Is=u.__nbind_register_class,uf=u.__nbind_finish,_n=u._abort,Nu=u._nbind_value,Wo=u._llvm_stacksave,su=u.___syscall54,Ps=u._defineHidden,pl=u._emscripten_set_main_loop,Vf=u._emscripten_get_now,hl=u.__nbind_register_callback_signature,Bu=u._emscripten_asm_const_iiiiii,ju=u.__nbind_free_external,sf=u._emscripten_asm_const_iiii,ro=u._emscripten_asm_const_iiididi,Ms=u.___syscall6,ml=u._atexit,Uu=u.___syscall140,G0=u.___syscall146,Fs=w(0);let tt=w(0);function zi(e){e=e|0;var n=0;return n=h,h=h+e|0,h=h+15&-16,n|0}function lu(){return h|0}function Ho(e){e=e|0,h=e}function O0(e,n){e=e|0,n=n|0,h=e,re=n}function vl(e,n){e=e|0,n=n|0,oe||(oe=e,Se=n)}function gl(e){e=e|0,be=e}function fu(){return be|0}function _l(){var e=0,n=0;vn(8104,8,400)|0,vn(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));c[9088]=0,c[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Bt(17,8104,Q|0)|0}function Sn(e){e=e|0,lf(e+948|0)}function gt(e){return e=w(e),((Ar(e)|0)&2147483647)>>>0>2139095040|0}function en(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function I0(e){e=e|0;var n=0;return n=uh(1e3)|0,li(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,vn(n|0,8104,1e3)|0,c[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function li(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,zs(e,5,3197,o)),h=s}function qu(){return I0(956)|0}function Wi(e){e=e|0;var n=0;return n=Tt(1e3)|0,zu(n,e),li(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function zu(e,n){e=e|0,n=n|0;var r=0;vn(e|0,n|0,948)|0,af(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function Wu(e){e=e|0;var n=0,r=0,o=0,s=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Ls(r+948|0,e)|0,t[n>>2]=0),r=fi(e)|0,r|0){n=0;do t[(e0(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,o=t[r>>2]|0,s=e+952|0,n=t[s>>2]|0,(n|0)!=(o|0)&&(t[s>>2]=n+(~((n+-4-o|0)>>>2)<<2)),io(r),sh(e),t[2276]=(t[2276]|0)+-1}function Ls(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0;o=t[e>>2]|0,_=e+4|0,r=t[_>>2]|0,l=r;e:do if((o|0)==(r|0))s=o,d=4;else for(e=o;;){if((t[e>>2]|0)==(n|0)){s=e,d=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(d|0)==4&&((s|0)!=(r|0)?(o=s+4|0,e=l-o|0,n=e>>2,n&&(Y1(s|0,o|0,e|0)|0,r=t[_>>2]|0),e=s+(n<<2)|0,(r|0)==(e|0)||(t[_>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function fi(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function e0(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function io(e){e=e|0;var n=0,r=0,o=0,s=0;o=h,h=h+32|0,n=o,s=t[e>>2]|0,r=(t[e+4>>2]|0)-s|0,((t[e+8>>2]|0)-s|0)>>>0>r>>>0&&(s=r>>2,z(n,s,s,e+8|0),dr(e,n),Or(n)),h=o}function D0(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;k=fi(e)|0;do if(k|0){if((t[(e0(e,0)|0)+944>>2]|0)==(e|0)){if(!(Ls(e+948|0,n)|0))break;vn(n+400|0,8504,540)|0,t[n+944>>2]=0,ln(e);break}d=t[(t[e+976>>2]|0)+12>>2]|0,_=e+948|0,y=(d|0)==0,r=0,l=0;do o=t[(t[_>>2]|0)+(l<<2)>>2]|0,(o|0)==(n|0)?ln(e):(s=Wi(o)|0,t[(t[_>>2]|0)+(r<<2)>>2]=s,t[s+944>>2]=e,y||Q4[d&15](o,s,e,r),r=r+1|0),l=l+1|0;while((l|0)!=(k|0));if(r>>>0>>0){y=e+948|0,_=e+952|0,d=r,r=t[_>>2]|0;do l=(t[y>>2]|0)+(d<<2)|0,o=l+4|0,s=r-o|0,n=s>>2,n&&(Y1(l|0,o|0,s|0)|0,r=t[_>>2]|0),s=r,o=l+(n<<2)|0,(s|0)!=(o|0)&&(r=s+(~((s+-4-o|0)>>>2)<<2)|0,t[_>>2]=r),d=d+1|0;while((d|0)!=(k|0))}}while(0)}function Do(e){e=e|0;var n=0,r=0,o=0,s=0;i0(e,(fi(e)|0)==0,2491),i0(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,o=e+952|0,s=t[o>>2]|0,(s|0)!=(r|0)&&(t[o>>2]=s+(~((s+-4-r|0)>>>2)<<2)),io(n),n=e+976|0,r=t[n>>2]|0,vn(e|0,8104,1e3)|0,c[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function i0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,wn(e,5,3197,o)),h=s}function Rs(){return t[2276]|0}function a0(){var e=0;return e=uh(20)|0,Hu((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function Hu(e,n){e=e|0,n=n|0;var r=0,o=0;o=h,h=h+16|0,r=o,e||(t[r>>2]=n,wn(0,5,3197,r)),h=o}function V0(e){e=e|0,sh(e),t[2277]=(t[2277]|0)+-1}function bu(e,n){e=e|0,n=n|0;var r=0;n?(i0(e,(fi(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function Ns(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+8|0,s=o+4|0,d=o,t[s>>2]=n,i0(e,(t[n+944>>2]|0)==0,2709),i0(e,(t[e+964>>2]|0)==0,2763),bo(e),n=e+948|0,t[d>>2]=(t[n>>2]|0)+(r<<2),t[l>>2]=t[d>>2],P0(n,l,s)|0,t[(t[s>>2]|0)+944>>2]=e,ln(e),h=o}function bo(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;if(r=fi(e)|0,r|0?(t[(e0(e,0)|0)+944>>2]|0)!=(e|0):0){o=t[(t[e+976>>2]|0)+12>>2]|0,s=e+948|0,l=(o|0)==0,n=0;do d=t[(t[s>>2]|0)+(n<<2)>>2]|0,_=Wi(d)|0,t[(t[s>>2]|0)+(n<<2)>>2]=_,t[_+944>>2]=e,l||Q4[o&15](d,_,e,n),n=n+1|0;while((n|0)!=(r|0))}}function P0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0;Pe=h,h=h+64|0,P=Pe+52|0,_=Pe+48|0,q=Pe+28|0,we=Pe+24|0,le=Pe+20|0,ie=Pe,o=t[e>>2]|0,l=o,n=o+((t[n>>2]|0)-l>>2<<2)|0,o=e+4|0,s=t[o>>2]|0,d=e+8|0;do if(s>>>0<(t[d>>2]|0)>>>0){if((n|0)==(s|0)){t[n>>2]=t[r>>2],t[o>>2]=(t[o>>2]|0)+4;break}Qn(e,n,s,n+4|0),n>>>0<=r>>>0&&(r=(t[o>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{o=(s-l>>2)+1|0,s=Q0(e)|0,s>>>0>>0&&$n(e),T=t[e>>2]|0,k=(t[d>>2]|0)-T|0,l=k>>1,z(ie,k>>2>>>0>>1>>>0?l>>>0>>0?o:l:s,n-T>>2,e+8|0),T=ie+8|0,o=t[T>>2]|0,l=ie+12|0,k=t[l>>2]|0,d=k,y=o;do if((o|0)==(k|0)){if(k=ie+4|0,o=t[k>>2]|0,ke=t[ie>>2]|0,s=ke,o>>>0<=ke>>>0){o=d-s>>1,o=(o|0)==0?1:o,z(q,o,o>>>2,t[ie+16>>2]|0),t[we>>2]=t[k>>2],t[le>>2]=t[T>>2],t[_>>2]=t[we>>2],t[P>>2]=t[le>>2],s0(q,_,P),o=t[ie>>2]|0,t[ie>>2]=t[q>>2],t[q>>2]=o,o=q+4|0,ke=t[k>>2]|0,t[k>>2]=t[o>>2],t[o>>2]=ke,o=q+8|0,ke=t[T>>2]|0,t[T>>2]=t[o>>2],t[o>>2]=ke,o=q+12|0,ke=t[l>>2]|0,t[l>>2]=t[o>>2],t[o>>2]=ke,Or(q),o=t[T>>2]|0;break}l=o,d=((l-s>>2)+1|0)/-2|0,_=o+(d<<2)|0,s=y-l|0,l=s>>2,l&&(Y1(_|0,o|0,s|0)|0,o=t[k>>2]|0),ke=_+(l<<2)|0,t[T>>2]=ke,t[k>>2]=o+(d<<2),o=ke}while(0);t[o>>2]=t[r>>2],t[T>>2]=(t[T>>2]|0)+4,n=nn(e,ie,n)|0,Or(ie)}while(0);return h=Pe,n|0}function ln(e){e=e|0;var n=0;do{if(n=e+984|0,c[n>>0]|0)break;c[n>>0]=1,D[e+504>>2]=w(J),e=t[e+944>>2]|0}while((e|0)!=0)}function lf(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function nr(e){return e=e|0,t[e+944>>2]|0}function rr(e){e=e|0,i0(e,(t[e+964>>2]|0)!=0,2832),ln(e)}function Go(e){return e=e|0,(c[e+984>>0]|0)!=0|0}function Gu(e,n){e=e|0,n=n|0,fL(e,n,400)|0&&(vn(e|0,n|0,400)|0,ln(e))}function yl(e){e=e|0;var n=tt;return n=w(D[e+44>>2]),e=gt(n)|0,w(e?w(0):n)}function cu(e){e=e|0;var n=tt;return n=w(D[e+48>>2]),gt(n)|0&&(n=c[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function Bs(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Vu(e){return e=e|0,t[e+980>>2]|0}function M0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function au(e){return e=e|0,t[e+4>>2]|0}function Lr(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function F(e){return e=e|0,t[e+8>>2]|0}function R(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function U(e){return e=e|0,t[e+12>>2]|0}function H(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function fe(e){return e=e|0,t[e+16>>2]|0}function ue(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function de(e){return e=e|0,t[e+20>>2]|0}function W(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function ve(e){return e=e|0,t[e+24>>2]|0}function Fe(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Ge(e){return e=e|0,t[e+28>>2]|0}function K(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function xe(e){return e=e|0,t[e+32>>2]|0}function je(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Xe(e){return e=e|0,t[e+36>>2]|0}function rt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function st(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function xt(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function wt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+52|0,s=e+56|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function lt(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+52|0,r=e+56|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function Rt(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+52|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function yn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function sn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function ar(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+132+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function rn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Hn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function d0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+60+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function Cr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(D[e+60+(n<<3)>>2]=w(J),t[r>>2]=3,ln(e))}function He(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Qe(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Ne(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+204+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function ft(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function St(e,n){return e=e|0,n=n|0,w(D[e+276+(n<<3)>>2])}function Qt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+348|0,s=e+352|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Cn(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+348|0,r=e+352|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function bn(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(D[e+348>>2]=w(J),t[n>>2]=3,ln(e))}function p0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+348|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function h0(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+356|0,s=e+360|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function ci(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+356|0,r=e+360|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function xi(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(D[e+356>>2]=w(J),t[n>>2]=3,ln(e))}function E0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+356|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function qr(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Eo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function So(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+364|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function wl(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function js(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Dl(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+372|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function du(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Yu(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Us(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+380|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function oo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Hi(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function qs(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+388|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function F0(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function Gr(e){return e=e|0,w(D[e+396>>2])}function ir(e){return e=e|0,w(D[e+400>>2])}function L0(e){return e=e|0,w(D[e+404>>2])}function Y0(e){return e=e|0,w(D[e+408>>2])}function Co(e){return e=e|0,w(D[e+412>>2])}function $u(e){return e=e|0,w(D[e+416>>2])}function Vo(e){return e=e|0,w(D[e+420>>2])}function Rr(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+424+(n<<2)>>2])}function Jn(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+448+(n<<2)>>2])}function ai(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+472+(n<<2)>>2])}function o0(e,n){e=e|0,n=n|0;var r=0,o=tt;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(o=w(D[e>>2]),e=w(Ot(w(o-w(D[n>>2]))))>2]=0,t[o+4>>2]=0,t[o+8>>2]=0,Ru(o|0,e|0,n|0,0),wn(e,3,(c[o+11>>0]|0)<0?t[o>>2]|0:o,r),ML(o),h=r}function $0(e,n,r,o){e=w(e),n=w(n),r=r|0,o=o|0;var s=tt;e=w(e*n),s=w(V4(e,w(1)));do if(Vr(s,w(0))|0)e=w(e-s);else{if(e=w(e-s),Vr(s,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}o||(s>w(.5)?s=w(1):(o=Vr(s,w(.5))|0,s=w(o?1:0)),e=w(e+s))}while(0);return w(e/n)}function K0(e,n,r,o,s,l,d,_,y,k,T,P,q){e=e|0,n=w(n),r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,_=w(_),y=w(y),k=w(k),T=w(T),P=w(P),q=q|0;var we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt;return y>2]),le!=w(0)):0)?(Pe=w($0(n,le,0,0)),ke=w($0(o,le,0,0)),ie=w($0(l,le,0,0)),le=w($0(_,le,0,0))):(ie=l,Pe=n,le=_,ke=o),(s|0)==(e|0)?we=Vr(ie,Pe)|0:we=0,(d|0)==(r|0)?q=Vr(le,ke)|0:q=0,((we?0:(qe=w(n-T),!(ae(e,qe,y)|0)))?!(Be(e,qe,s,y)|0):0)?we=Ie(e,qe,s,l,y)|0:we=1,((q?0:(pe=w(o-P),!(ae(r,pe,k)|0)))?!(Be(r,pe,d,k)|0):0)?q=Ie(r,pe,d,_,k)|0:q=1,q=we&q),q|0}function ae(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=Vr(n,r)|0:e=0,e|0}function Be(e,n,r,o){return e=e|0,n=w(n),r=r|0,o=w(o),(e|0)==2&(r|0)==0?n>=o?e=1:e=Vr(n,o)|0:e=0,e|0}function Ie(e,n,r,o,s){return e=e|0,n=w(n),r=r|0,o=w(o),s=w(s),(e|0)==2&(r|0)==2&o>n?s<=n?e=1:e=Vr(n,s)|0:e=0,e|0}function ht(e,n,r,o,s,l,d,_,y,k,T){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0,T=T|0;var P=0,q=0,we=0,le=0,ie=tt,Pe=tt,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=tt,Ki=tt,Xi=tt,Ji=0,Ro=0;zt=h,h=h+160|0,It=zt+152|0,Ht=zt+120|0,Ln=zt+104|0,pe=zt+72|0,le=zt+56|0,vt=zt+8|0,qe=zt,_e=(t[2279]|0)+1|0,t[2279]=_e,gn=e+984|0,((c[gn>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?ke=4:(t[e+516>>2]|0)==(o|0)?Pn=0:ke=4,(ke|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,D[e+932>>2]=w(-1),D[e+936>>2]=w(-1),Pn=1);e:do if(t[e+964>>2]|0)if(ie=w(mt(e,2,d)),Pe=w(mt(e,0,d)),P=e+916|0,Xi=w(D[P>>2]),Ki=w(D[e+920>>2]),Dr=w(D[e+932>>2]),K0(s,n,l,r,t[e+924>>2]|0,Xi,t[e+928>>2]|0,Ki,Dr,w(D[e+936>>2]),ie,Pe,T)|0)ke=22;else if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,Dr=w(D[P>>2]),Ki=w(D[e+524+(q*24|0)+4>>2]),Xi=w(D[e+524+(q*24|0)+16>>2]),K0(s,n,l,r,t[e+524+(q*24|0)+8>>2]|0,Dr,t[e+524+(q*24|0)+12>>2]|0,Ki,Xi,w(D[e+524+(q*24|0)+20>>2]),ie,Pe,T)|0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}else{if(y){if(P=e+916|0,!(Vr(w(D[P>>2]),n)|0)){ke=21;break}if(!(Vr(w(D[e+920>>2]),r)|0)){ke=21;break}if((t[e+924>>2]|0)!=(s|0)){ke=21;break}P=(t[e+928>>2]|0)==(l|0)?P:0,ke=22;break}if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,((Vr(w(D[P>>2]),n)|0?Vr(w(D[e+524+(q*24|0)+4>>2]),r)|0:0)?(t[e+524+(q*24|0)+8>>2]|0)==(s|0):0)?(t[e+524+(q*24|0)+12>>2]|0)==(l|0):0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}}while(0);do if((ke|0)==21)c[11697]|0?(P=0,ke=28):(P=0,ke=31);else if((ke|0)==22){if(q=(c[11697]|0)!=0,!((P|0)!=0&(Pn^1)))if(q){ke=28;break}else{ke=31;break}le=P+16|0,t[e+908>>2]=t[le>>2],we=P+20|0,t[e+912>>2]=t[we>>2],(c[11698]|0)==0|q^1||(t[qe>>2]=Gn(_e)|0,t[qe+4>>2]=_e,wn(e,4,2972,qe),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),s=$t(s,y)|0,l=$t(l,y)|0,Ro=+w(D[le>>2]),Ji=+w(D[we>>2]),t[vt>>2]=s,t[vt+4>>2]=l,L[vt+8>>3]=+n,L[vt+16>>3]=+r,L[vt+24>>3]=Ro,L[vt+32>>3]=Ji,t[vt+40>>2]=k,wn(e,4,2989,vt))}while(0);return(ke|0)==28&&(q=Gn(_e)|0,t[le>>2]=q,t[le+4>>2]=_e,t[le+8>>2]=Pn?3047:11699,wn(e,4,3038,le),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,ke=$t(l,y)|0,t[pe>>2]=vt,t[pe+4>>2]=ke,L[pe+8>>3]=+n,L[pe+16>>3]=+r,t[pe+24>>2]=k,wn(e,4,3049,pe),ke=31),(ke|0)==31&&(X0(e,n,r,o,s,l,d,_,y,T),c[11697]|0&&(q=t[2279]|0,vt=Gn(q)|0,t[Ln>>2]=vt,t[Ln+4>>2]=q,t[Ln+8>>2]=Pn?3047:11699,wn(e,4,3083,Ln),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,Ln=$t(l,y)|0,Ji=+w(D[e+908>>2]),Ro=+w(D[e+912>>2]),t[Ht>>2]=vt,t[Ht+4>>2]=Ln,L[Ht+8>>3]=Ji,L[Ht+16>>3]=Ro,t[Ht+24>>2]=k,wn(e,4,3092,Ht)),t[e+516>>2]=o,P||(q=e+520|0,P=t[q>>2]|0,(P|0)==16&&(c[11697]|0&&wn(e,4,3124,It),t[q>>2]=0,P=0),y?P=e+916|0:(t[q>>2]=P+1,P=e+524+(P*24|0)|0),D[P>>2]=n,D[P+4>>2]=r,t[P+8>>2]=s,t[P+12>>2]=l,t[P+16>>2]=t[e+908>>2],t[P+20>>2]=t[e+912>>2],P=0)),y&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],c[e+985>>0]=1,c[gn>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],h=zt,Pn|(P|0)==0|0}function mt(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(Tr(e,n,r)),w(o+w(R0(e,n,r)))}function wn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=h,h=h+16|0,s=l,t[s>>2]=o,e?o=t[e+976>>2]|0:o=0,Ku(o,e,n,r,s),h=l}function Gn(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function $t(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+32|0,r=s+12|0,o=s,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[o>>2]=t[257],t[o+4>>2]=t[258],t[o+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?o:r)+(e<<2)>>2]|0,h=s,e|0}function X0(e,n,r,o,s,l,d,_,y,k){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0;var T=0,P=0,q=0,we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt,_e=tt,vt=0,Ln=0,Ht=0,It=tt,gn=tt,Pn=0,zt=tt,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=tt,Rf=tt,Zs=tt,el=tt,ss=tt,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=tt,tl=tt,ql=tt,zl=tt,Li=tt,Di=tt,ku=0,xr=tt,Wl=tt,Qi=tt,ls=tt,Zi=tt,fs=tt,Hl=0,bl=0,cs=tt,Ri=tt,Au=0,Gl=0,Vl=0,Yl=0,En=tt,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0,kt=tt,$l=0,Qr=0;Ou=h,h=h+16|0,Fi=Ou+12|0,nu=Ou+8|0,go=Ou+4|0,xu=Ou,i0(e,(s|0)==0|(gt(n)|0)^1,3326),i0(e,(l|0)==0|(gt(r)|0)^1,3406),Ei=so(e,o)|0,t[e+496>>2]=Ei,xn=N0(2,Ei)|0,Vt=N0(0,Ei)|0,D[e+440>>2]=w(Tr(e,xn,d)),D[e+444>>2]=w(R0(e,xn,d)),D[e+428>>2]=w(Tr(e,Vt,d)),D[e+436>>2]=w(R0(e,Vt,d)),D[e+464>>2]=w(C0(e,xn)),D[e+468>>2]=w(di(e,xn)),D[e+452>>2]=w(C0(e,Vt)),D[e+460>>2]=w(di(e,Vt)),D[e+488>>2]=w(u0(e,xn,d)),D[e+492>>2]=w(v0(e,xn,d)),D[e+476>>2]=w(u0(e,Vt,d)),D[e+484>>2]=w(v0(e,Vt,d));do if(t[e+964>>2]|0)To(e,n,r,s,l,d,_);else{if(eo=e+948|0,Ni=(t[e+952>>2]|0)-(t[eo>>2]|0)>>2,!Ni){pu(e,n,r,s,l,d,_);break}if(y?0:Sl(e,n,r,s,l,d,_)|0)break;bo(e),Tu=e+508|0,c[Tu>>0]=0,xn=N0(t[e+4>>2]|0,Ei)|0,Vt=Cl(xn,Ei)|0,br=Nr(xn)|0,Ff=t[e+8>>2]|0,Gl=e+28|0,us=(t[Gl>>2]|0)!=0,Zi=br?d:_,cs=br?_:d,Lf=w(B0(e,xn,d)),Rf=w(hu(e,xn,d)),le=w(B0(e,Vt,d)),fs=w(Fn(e,xn,d)),Ri=w(Fn(e,Vt,d)),Ht=br?s:l,Au=br?l:s,En=br?fs:Ri,qe=br?Ri:fs,ls=w(mt(e,2,d)),ke=w(mt(e,0,d)),ie=w(w(Tn(e+364|0,d))-En),Pe=w(w(Tn(e+380|0,d))-En),pe=w(w(Tn(e+372|0,_))-qe),_e=w(w(Tn(e+388|0,_))-qe),Zs=br?ie:pe,el=br?Pe:_e,ls=w(n-ls),n=w(ls-En),gt(n)|0?En=n:En=w(Ur(w(cc(n,Pe)),ie)),Wl=w(r-ke),n=w(Wl-qe),gt(n)|0?Qi=n:Qi=w(Ur(w(cc(n,_e)),pe)),ie=br?En:Qi,xr=br?Qi:En;e:do if((Ht|0)==1)for(o=0,P=0;;){if(T=e0(e,P)|0,!o)(w(Br(T))>w(0)?w(zr(T))>w(0):0)?o=T:o=0;else if(pi(T)|0){we=0;break e}if(P=P+1|0,P>>>0>=Ni>>>0){we=o;break}}else we=0;while(0);vt=we+500|0,Ln=we+504|0,o=0,T=0,n=w(0),q=0;do{if(P=t[(t[eo>>2]|0)+(q<<2)>>2]|0,(t[P+36>>2]|0)==1)lo(P),c[P+985>>0]=1,c[P+984>>0]=0;else{$r(P),y&&Yo(P,so(P,Ei)|0,ie,xr,En);do if((t[P+24>>2]|0)!=1)if((P|0)==(we|0)){t[vt>>2]=t[2278],D[Ln>>2]=w(0);break}else{wr(e,P,En,s,Qi,En,Qi,l,Ei,k);break}else T|0&&(t[T+960>>2]=P),t[P+960>>2]=0,T=P,o=(o|0)==0?P:o;while(0);Di=w(D[P+504>>2]),n=w(n+w(Di+w(mt(P,xn,En))))}q=q+1|0}while((q|0)!=(Ni|0));for(Xi=n>ie,ku=us&((Ht|0)==2&Xi)?1:Ht,Dr=(Au|0)==1,Ro=Dr&(y^1),kf=(ku|0)==1,Af=(ku|0)==2,Cu=976+(xn<<2)|0,Of=(Au|2|0)==2,Mf=Dr&(us^1),Js=1040+(Vt<<2)|0,Qs=1040+(xn<<2)|0,If=976+(Vt<<2)|0,Pf=(Au|0)!=1,Xi=us&((Ht|0)!=0&Xi),Ki=e+976|0,Dr=Dr^1,n=ie,Pn=0,Ji=0,Di=w(0),ss=w(0);;){e:do if(Pn>>>0>>0)for(Ln=t[eo>>2]|0,q=0,_e=w(0),pe=w(0),Pe=w(0),ie=w(0),P=0,T=0,we=Pn;;){if(vt=t[Ln+(we<<2)>>2]|0,(t[vt+36>>2]|0)!=1?(t[vt+940>>2]=Ji,(t[vt+24>>2]|0)!=1):0){if(ke=w(mt(vt,xn,En)),Kn=t[Cu>>2]|0,r=w(Tn(vt+380+(Kn<<3)|0,Zi)),qe=w(D[vt+504>>2]),r=w(cc(r,qe)),r=w(Ur(w(Tn(vt+364+(Kn<<3)|0,Zi)),r)),us&(q|0)!=0&w(ke+w(pe+r))>n){l=q,ke=_e,Ht=we;break e}ke=w(ke+r),r=w(pe+ke),ke=w(_e+ke),pi(vt)|0&&(Pe=w(Pe+w(Br(vt))),ie=w(ie-w(qe*w(zr(vt))))),T|0&&(t[T+960>>2]=vt),t[vt+960>>2]=0,q=q+1|0,T=vt,P=(P|0)==0?vt:P}else ke=_e,r=pe;if(we=we+1|0,we>>>0>>0)_e=ke,pe=r;else{l=q,Ht=we;break}}else l=0,ke=w(0),Pe=w(0),ie=w(0),P=0,Ht=Pn;while(0);Kn=Pe>w(0)&Pew(0)&ieel&((gt(el)|0)^1))n=el,Kn=51;else if(c[(t[Ki>>2]|0)+3>>0]|0)Kn=51;else{if(It!=w(0)?w(Br(e))!=w(0):0){Kn=53;break}n=ke,Kn=53}while(0);if((Kn|0)==51&&(Kn=0,gt(n)|0?Kn=53:(gn=w(n-ke),zt=n)),(Kn|0)==53&&(Kn=0,ke>2]|0,we=gnw(0),pe=w(gn/It),Pe=w(0),ke=w(0),n=w(0),T=P;do r=w(Tn(T+380+(q<<3)|0,Zi)),ie=w(Tn(T+364+(q<<3)|0,Zi)),ie=w(cc(r,w(Ur(ie,w(D[T+504>>2]))))),we?(r=w(ie*w(zr(T))),(r!=w(-0)?(kt=w(ie-w(qe*r)),Ul=w(kn(T,xn,kt,zt,En)),kt!=Ul):0)&&(Pe=w(Pe-w(Ul-ie)),n=w(n+r))):((vt?(tl=w(Br(T)),tl!=w(0)):0)?(kt=w(ie+w(pe*tl)),ql=w(kn(T,xn,kt,zt,En)),kt!=ql):0)&&(Pe=w(Pe-w(ql-ie)),ke=w(ke-tl)),T=t[T+960>>2]|0;while((T|0)!=0);if(n=w(_e+n),ie=w(gn+Pe),jl)n=w(0);else{qe=w(It+ke),we=t[Cu>>2]|0,vt=iew(0),qe=w(ie/qe),n=w(0);do{kt=w(Tn(P+380+(we<<3)|0,Zi)),Pe=w(Tn(P+364+(we<<3)|0,Zi)),Pe=w(cc(kt,w(Ur(Pe,w(D[P+504>>2]))))),vt?(kt=w(Pe*w(zr(P))),ie=w(-kt),kt!=w(-0)?(kt=w(pe*ie),ie=w(kn(P,xn,w(Pe+(Ln?ie:kt)),zt,En))):ie=Pe):(q?(zl=w(Br(P)),zl!=w(0)):0)?ie=w(kn(P,xn,w(Pe+w(qe*zl)),zt,En)):ie=Pe,n=w(n-w(ie-Pe)),ke=w(mt(P,xn,En)),r=w(mt(P,Vt,En)),ie=w(ie+ke),D[nu>>2]=ie,t[xu>>2]=1,Pe=w(D[P+396>>2]);e:do if(gt(Pe)|0){T=gt(xr)|0;do if(!T){if(Xi|(m0(P,Vt,xr)|0|Dr)||(T0(e,P)|0)!=4||(t[(hi(P,Vt)|0)+4>>2]|0)==3||(t[(Ai(P,Vt)|0)+4>>2]|0)==3)break;D[Fi>>2]=xr,t[go>>2]=1;break e}while(0);if(m0(P,Vt,xr)|0){T=t[P+992+(t[If>>2]<<2)>>2]|0,kt=w(r+w(Tn(T,xr))),D[Fi>>2]=kt,T=Pf&(t[T+4>>2]|0)==2,t[go>>2]=((gt(kt)|0|T)^1)&1;break}else{D[Fi>>2]=xr,t[go>>2]=T?0:2;break}}else kt=w(ie-ke),It=w(kt/Pe),kt=w(Pe*kt),t[go>>2]=1,D[Fi>>2]=w(r+(br?It:kt));while(0);Kt(P,xn,zt,En,xu,nu),Kt(P,Vt,xr,En,go,Fi);do if(m0(P,Vt,xr)|0?0:(T0(e,P)|0)==4){if((t[(hi(P,Vt)|0)+4>>2]|0)==3){T=0;break}T=(t[(Ai(P,Vt)|0)+4>>2]|0)!=3}else T=0;while(0);kt=w(D[nu>>2]),It=w(D[Fi>>2]),$l=t[xu>>2]|0,Qr=t[go>>2]|0,ht(P,br?kt:It,br?It:kt,Ei,br?$l:Qr,br?Qr:$l,En,Qi,y&(T^1),3488,k)|0,c[Tu>>0]=c[Tu>>0]|c[P+508>>0],P=t[P+960>>2]|0}while((P|0)!=0)}}else n=w(0);if(n=w(gn+n),Qr=n>0]=Qr|C[Tu>>0],Af&n>w(0)?(T=t[Cu>>2]|0,((t[e+364+(T<<3)+4>>2]|0)!=0?(Li=w(Tn(e+364+(T<<3)|0,Zi)),Li>=w(0)):0)?ie=w(Ur(w(0),w(Li-w(zt-n)))):ie=w(0)):ie=n,vt=Pn>>>0>>0,vt){we=t[eo>>2]|0,q=Pn,T=0;do P=t[we+(q<<2)>>2]|0,t[P+24>>2]|0||(T=((t[(hi(P,xn)|0)+4>>2]|0)==3&1)+T|0,T=T+((t[(Ai(P,xn)|0)+4>>2]|0)==3&1)|0),q=q+1|0;while((q|0)!=(Ht|0));T?(ke=w(0),r=w(0)):Kn=101}else Kn=101;e:do if((Kn|0)==101)switch(Kn=0,Ff|0){case 1:{T=0,ke=w(ie*w(.5)),r=w(0);break e}case 2:{T=0,ke=ie,r=w(0);break e}case 3:{if(l>>>0<=1){T=0,ke=w(0),r=w(0);break e}r=w((l+-1|0)>>>0),T=0,ke=w(0),r=w(w(Ur(ie,w(0)))/r);break e}case 5:{r=w(ie/w((l+1|0)>>>0)),T=0,ke=r;break e}case 4:{r=w(ie/w(l>>>0)),T=0,ke=w(r*w(.5));break e}default:{T=0,ke=w(0),r=w(0);break e}}while(0);if(n=w(Lf+ke),vt){Pe=w(ie/w(T|0)),q=t[eo>>2]|0,P=Pn,ie=w(0);do{T=t[q+(P<<2)>>2]|0;e:do if((t[T+36>>2]|0)!=1){switch(t[T+24>>2]|0){case 1:{if(X(T,xn)|0){if(!y)break e;kt=w(Y(T,xn,zt)),kt=w(kt+w(C0(e,xn))),kt=w(kt+w(Tr(T,xn,En))),D[T+400+(t[Qs>>2]<<2)>>2]=kt;break e}break}case 0:if(Qr=(t[(hi(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,y&&(Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(n+w(D[Qr>>2]))),Qr=(t[(Ai(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,Ro){kt=w(r+w(mt(T,xn,En))),ie=xr,n=w(n+w(kt+w(D[T+504>>2])));break e}else{n=w(n+w(r+w(ye(T,xn,En)))),ie=w(Ur(ie,w(ye(T,Vt,En))));break e}default:}y&&(kt=w(ke+w(C0(e,xn))),Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2])))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}else ie=w(0);if(r=w(Rf+n),Of?ke=w(w(kn(e,Vt,w(Ri+ie),cs,d))-Ri):ke=xr,Pe=w(w(kn(e,Vt,w(Ri+(Mf?xr:ie)),cs,d))-Ri),vt&y){P=Pn;do{q=t[(t[eo>>2]|0)+(P<<2)>>2]|0;do if((t[q+36>>2]|0)!=1){if((t[q+24>>2]|0)==1){if(X(q,Vt)|0){if(kt=w(Y(q,Vt,xr)),kt=w(kt+w(C0(e,Vt))),kt=w(kt+w(Tr(q,Vt,En))),T=t[Js>>2]|0,D[q+400+(T<<2)>>2]=kt,!(gt(kt)|0))break}else T=t[Js>>2]|0;kt=w(C0(e,Vt)),D[q+400+(T<<2)>>2]=w(kt+w(Tr(q,Vt,En)));break}T=T0(e,q)|0;do if((T|0)==4){if((t[(hi(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if(m0(q,Vt,xr)|0){n=le;break}$l=t[q+908+(t[Cu>>2]<<2)>>2]|0,t[Fi>>2]=$l,n=w(D[q+396>>2]),Qr=gt(n)|0,ie=(t[j>>2]=$l,w(D[j>>2])),Qr?n=Pe:(gn=w(mt(q,Vt,En)),kt=w(ie/n),n=w(n*ie),n=w(gn+(br?kt:n))),D[nu>>2]=n,D[Fi>>2]=w(w(mt(q,xn,En))+ie),t[go>>2]=1,t[xu>>2]=1,Kt(q,xn,zt,En,go,Fi),Kt(q,Vt,xr,En,xu,nu),n=w(D[Fi>>2]),gn=w(D[nu>>2]),kt=br?n:gn,n=br?gn:n,Qr=((gt(kt)|0)^1)&1,ht(q,kt,n,Ei,Qr,((gt(n)|0)^1)&1,En,Qi,1,3493,k)|0,n=le}else Kn=139;while(0);e:do if((Kn|0)==139){Kn=0,n=w(ke-w(ye(q,Vt,En)));do if((t[(hi(q,Vt)|0)+4>>2]|0)==3){if((t[(Ai(q,Vt)|0)+4>>2]|0)!=3)break;n=w(le+w(Ur(w(0),w(n*w(.5)))));break e}while(0);if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){n=le;break}if((t[(hi(q,Vt)|0)+4>>2]|0)==3){n=w(le+w(Ur(w(0),n)));break}switch(T|0){case 1:{n=le;break e}case 2:{n=w(le+w(n*w(.5)));break e}default:{n=w(le+n);break e}}}while(0);kt=w(Di+n),Qr=q+400+(t[Js>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2]))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}if(Di=w(Di+Pe),ss=w(Ur(ss,r)),l=Ji+1|0,Ht>>>0>=Ni>>>0)break;n=zt,Pn=Ht,Ji=l}do if(y){if(T=l>>>0>1,T?0:!(he(e)|0))break;if(!(gt(xr)|0)){n=w(xr-Di);e:do switch(t[e+12>>2]|0){case 3:{le=w(le+n),pe=w(0);break}case 2:{le=w(le+w(n*w(.5))),pe=w(0);break}case 4:{xr>Di?pe=w(n/w(l>>>0)):pe=w(0);break}case 7:if(xr>Di){le=w(le+w(n/w(l<<1>>>0))),pe=w(n/w(l>>>0)),pe=T?pe:w(0);break e}else{le=w(le+w(n*w(.5))),pe=w(0);break e}case 6:{pe=w(n/w(Ji>>>0)),pe=xr>Di&T?pe:w(0);break}default:pe=w(0)}while(0);if(l|0)for(vt=1040+(Vt<<2)|0,Ln=976+(Vt<<2)|0,we=0,P=0;;){e:do if(P>>>0>>0)for(ie=w(0),Pe=w(0),n=w(0),q=P;;){T=t[(t[eo>>2]|0)+(q<<2)>>2]|0;do if((t[T+36>>2]|0)!=1?(t[T+24>>2]|0)==0:0){if((t[T+940>>2]|0)!=(we|0))break e;if(We(T,Vt)|0&&(kt=w(D[T+908+(t[Ln>>2]<<2)>>2]),n=w(Ur(n,w(kt+w(mt(T,Vt,En)))))),(T0(e,T)|0)!=5)break;Li=w(et(T)),Li=w(Li+w(Tr(T,0,En))),kt=w(D[T+912>>2]),kt=w(w(kt+w(mt(T,0,En)))-Li),Li=w(Ur(Pe,Li)),kt=w(Ur(ie,kt)),ie=kt,Pe=Li,n=w(Ur(n,w(Li+kt)))}while(0);if(T=q+1|0,T>>>0>>0)q=T;else{q=T;break}}else Pe=w(0),n=w(0),q=P;while(0);if(qe=w(pe+n),r=le,le=w(le+qe),P>>>0>>0){ke=w(r+Pe),T=P;do{P=t[(t[eo>>2]|0)+(T<<2)>>2]|0;e:do if((t[P+36>>2]|0)!=1?(t[P+24>>2]|0)==0:0)switch(T0(e,P)|0){case 1:{kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 3:{kt=w(w(le-w(R0(P,Vt,En)))-w(D[P+908+(t[Ln>>2]<<2)>>2])),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 2:{kt=w(r+w(w(qe-w(D[P+908+(t[Ln>>2]<<2)>>2]))*w(.5))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 4:{if(kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt,m0(P,Vt,xr)|0||(br?(ie=w(D[P+908>>2]),n=w(ie+w(mt(P,xn,En))),Pe=qe):(Pe=w(D[P+912>>2]),Pe=w(Pe+w(mt(P,Vt,En))),n=qe,ie=w(D[P+908>>2])),Vr(n,ie)|0?Vr(Pe,w(D[P+912>>2]))|0:0))break e;ht(P,n,Pe,Ei,1,1,En,Qi,1,3501,k)|0;break e}case 5:{D[P+404>>2]=w(w(ke-w(et(P)))+w(Y(P,0,xr)));break e}default:break e}while(0);T=T+1|0}while((T|0)!=(q|0))}if(we=we+1|0,(we|0)==(l|0))break;P=q}}}while(0);if(D[e+908>>2]=w(kn(e,2,ls,d,d)),D[e+912>>2]=w(kn(e,0,Wl,_,d)),((ku|0)!=0?(Hl=t[e+32>>2]|0,bl=(ku|0)==2,!(bl&(Hl|0)!=2)):0)?bl&(Hl|0)==2&&(n=w(fs+zt),n=w(Ur(w(cc(n,w(Dt(e,xn,ss,Zi)))),fs)),Kn=198):(n=w(kn(e,xn,ss,Zi,d)),Kn=198),(Kn|0)==198&&(D[e+908+(t[976+(xn<<2)>>2]<<2)>>2]=n),((Au|0)!=0?(Vl=t[e+32>>2]|0,Yl=(Au|0)==2,!(Yl&(Vl|0)!=2)):0)?Yl&(Vl|0)==2&&(n=w(Ri+xr),n=w(Ur(w(cc(n,w(Dt(e,Vt,w(Ri+Di),cs)))),Ri)),Kn=204):(n=w(kn(e,Vt,w(Ri+Di),cs,d)),Kn=204),(Kn|0)==204&&(D[e+908+(t[976+(Vt<<2)>>2]<<2)>>2]=n),y){if((t[Gl>>2]|0)==2){P=976+(Vt<<2)|0,q=1040+(Vt<<2)|0,T=0;do we=e0(e,T)|0,t[we+24>>2]|0||($l=t[P>>2]|0,kt=w(D[e+908+($l<<2)>>2]),Qr=we+400+(t[q>>2]<<2)|0,kt=w(kt-w(D[Qr>>2])),D[Qr>>2]=w(kt-w(D[we+908+($l<<2)>>2]))),T=T+1|0;while((T|0)!=(Ni|0))}if(o|0){T=br?ku:s;do bt(e,o,En,T,Qi,Ei,k),o=t[o+960>>2]|0;while((o|0)!=0)}if(T=(xn|2|0)==3,P=(Vt|2|0)==3,T|P){o=0;do q=t[(t[eo>>2]|0)+(o<<2)>>2]|0,(t[q+36>>2]|0)!=1&&(T&&Zt(e,q,xn),P&&Zt(e,q,Vt)),o=o+1|0;while((o|0)!=(Ni|0))}}}while(0);h=Ou}function ki(e,n){e=e|0,n=w(n);var r=0;li(e,n>=w(0),3147),r=n==w(0),D[e+4>>2]=r?w(0):n}function Yr(e,n,r,o){e=e|0,n=w(n),r=w(r),o=o|0;var s=tt,l=tt,d=0,_=0,y=0;t[2278]=(t[2278]|0)+1,$r(e),m0(e,2,n)|0?(s=w(Tn(t[e+992>>2]|0,n)),y=1,s=w(s+w(mt(e,2,n)))):(s=w(Tn(e+380|0,n)),s>=w(0)?y=2:(y=((gt(n)|0)^1)&1,s=n)),m0(e,0,r)|0?(l=w(Tn(t[e+996>>2]|0,r)),_=1,l=w(l+w(mt(e,0,n)))):(l=w(Tn(e+388|0,r)),l>=w(0)?_=2:(_=((gt(r)|0)^1)&1,l=r)),d=e+976|0,(ht(e,s,l,o,y,_,n,r,1,3189,t[d>>2]|0)|0?(Yo(e,t[e+496>>2]|0,n,r,n),bi(e,w(D[(t[d>>2]|0)+4>>2]),w(0),w(0)),c[11696]|0):0)&&ff(e,7)}function $r(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;_=h,h=h+32|0,d=_+24|0,l=_+16|0,o=_+8|0,s=_,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(y=n,k=t[y+4>>2]|0,T=o,t[T>>2]=t[y>>2],t[T+4>>2]=k,T=e+364+(r<<3)|0,k=t[T+4>>2]|0,y=s,t[y>>2]=t[T>>2],t[y+4>>2]=k,t[l>>2]=t[o>>2],t[l+4>>2]=t[o+4>>2],t[d>>2]=t[s>>2],t[d+4>>2]=t[s+4>>2],o0(l,d)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);h=_}function m0(e,n,r){e=e|0,n=n|0,r=w(r);var o=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(D[e>>2])>2])>2]|0){case 2:{n=w(w(w(D[e>>2])*n)/w(100));break}case 1:{n=w(D[e>>2]);break}default:n=w(J)}return w(n)}function Yo(e,n,r,o,s){e=e|0,n=n|0,r=w(r),o=w(o),s=w(s);var l=0,d=tt;n=t[e+944>>2]|0?n:1,l=N0(t[e+4>>2]|0,n)|0,n=Cl(l,n)|0,r=w(Wr(e,l,r)),o=w(Wr(e,n,o)),d=w(r+w(Tr(e,l,s))),D[e+400+(t[1040+(l<<2)>>2]<<2)>>2]=d,r=w(r+w(R0(e,l,s))),D[e+400+(t[1e3+(l<<2)>>2]<<2)>>2]=r,r=w(o+w(Tr(e,n,s))),D[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,s=w(o+w(R0(e,n,s))),D[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=s}function bi(e,n,r,o){e=e|0,n=w(n),r=w(r),o=w(o);var s=0,l=0,d=tt,_=tt,y=0,k=0,T=tt,P=0,q=tt,we=tt,le=tt,ie=tt;if(n!=w(0)&&(s=e+400|0,ie=w(D[s>>2]),l=e+404|0,le=w(D[l>>2]),P=e+416|0,we=w(D[P>>2]),k=e+420|0,d=w(D[k>>2]),q=w(ie+r),T=w(le+o),o=w(q+we),_=w(T+d),y=(t[e+988>>2]|0)==1,D[s>>2]=w($0(ie,n,0,y)),D[l>>2]=w($0(le,n,0,y)),r=w(V4(w(we*n),w(1))),Vr(r,w(0))|0?l=0:l=(Vr(r,w(1))|0)^1,r=w(V4(w(d*n),w(1))),Vr(r,w(0))|0?s=0:s=(Vr(r,w(1))|0)^1,ie=w($0(o,n,y&l,y&(l^1))),D[P>>2]=w(ie-w($0(q,n,0,y))),ie=w($0(_,n,y&s,y&(s^1))),D[k>>2]=w(ie-w($0(T,n,0,y))),l=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,l|0)){s=0;do bi(e0(e,s)|0,n,q,T),s=s+1|0;while((s|0)!=(l|0))}}function or(e,n,r,o,s){switch(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,r|0){case 5:case 0:{e=q8(t[489]|0,o,s)|0;break}default:e=AL(o,s)|0}return e|0}function zs(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;s=h,h=h+16|0,l=s,t[l>>2]=o,Ku(e,0,n,r,l),h=s}function Ku(e,n,r,o,s){if(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,e=e|0?e:956,sD[t[e+8>>2]&1](e,n,r,o,s)|0,(r|0)==5)_n();else return}function J0(e,n,r){e=e|0,n=n|0,r=r|0,c[e+n>>0]=r&1}function af(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(S0(e,o),El(e,t[n>>2]|0,t[r>>2]|0,o))}function S0(e,n){e=e|0,n=n|0;var r=0;if((Q0(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function El(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function Q0(e){return e=e|0,1073741823}function Tr(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=en(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function R0(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=en(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function Nr(e){return e=e|0,(e|1|0)==3|0}function uo(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(Tn(e,n)),w(n)}function so(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function N0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function C0(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(D[e+308>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function di(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(D[e+316>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function u0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+240>>2]|0)!=0:0)?(o=w(Tn(e+236|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function v0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+248>>2]|0)!=0:0)?(o=w(Tn(e+244|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function To(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt,P=tt,q=tt,we=0,le=0,ie=0;ie=h,h=h+16|0,we=ie,le=e+964|0,i0(e,(t[le>>2]|0)!=0,3519),_=w(Fn(e,2,n)),y=w(Fn(e,0,n)),k=w(mt(e,2,n)),T=w(mt(e,0,n)),gt(n)|0?P=n:P=w(Ur(w(0),w(w(n-k)-_))),gt(r)|0?q=r:q=w(Ur(w(0),w(w(r-T)-y))),(o|0)==1&(s|0)==1?(D[e+908>>2]=w(kn(e,2,w(n-k),l,l)),n=w(kn(e,0,w(r-T),d,l))):(lD[t[le>>2]&1](we,e,P,o,q,s),P=w(_+w(D[we>>2])),q=w(n-k),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?P:q,l,l)),q=w(y+w(D[we+4>>2])),n=w(r-T),n=w(kn(e,0,(s|2|0)==2?q:n,d,l))),D[e+912>>2]=n,h=ie}function pu(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt;k=w(Fn(e,2,l)),_=w(Fn(e,0,l)),T=w(mt(e,2,l)),y=w(mt(e,0,l)),n=w(n-T),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?k:n,l,l)),r=w(r-y),D[e+912>>2]=w(kn(e,0,(s|2|0)==2?_:r,d,l))}function Sl(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=0,y=tt,k=tt;return _=(o|0)==2,((n<=w(0)&_?0:!(r<=w(0)&(s|0)==2))?!((o|0)==1&(s|0)==1):0)?e=0:(y=w(mt(e,0,l)),k=w(mt(e,2,l)),_=n>2]=w(kn(e,2,_?w(0):n,l,l)),n=w(r-y),_=r>2]=w(kn(e,0,_?w(0):n,d,l)),e=1),e|0}function Cl(e,n){return e=e|0,n=n|0,qt(e)|0?e=N0(2,n)|0:e=0,e|0}function B0(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(u0(e,n,r)),w(r+w(C0(e,n)))}function hu(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(v0(e,n,r)),w(r+w(di(e,n)))}function Fn(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(B0(e,n,r)),w(o+w(hu(e,n,r)))}function pi(e){return e=e|0,t[e+24>>2]|0?e=0:w(Br(e))!=w(0)?e=1:e=w(zr(e))!=w(0),e|0}function Br(e){e=e|0;var n=tt;if(t[e+944>>2]|0){if(n=w(D[e+44>>2]),gt(n)|0)return n=w(D[e+40>>2]),e=n>w(0)&((gt(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function zr(e){e=e|0;var n=tt,r=0,o=tt;do if(t[e+944>>2]|0){if(n=w(D[e+48>>2]),gt(n)|0){if(r=c[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(o=w(D[e+40>>2]),o>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function lo(e){e=e|0;var n=0,r=0;if(pa(e+400|0,0,540)|0,c[e+985>>0]=1,bo(e),r=fi(e)|0,r|0){n=e+948|0,e=0;do lo(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function wr(e,n,r,o,s,l,d,_,y,k){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=w(l),d=w(d),_=_|0,y=y|0,k=k|0;var T=0,P=tt,q=0,we=0,le=tt,ie=tt,Pe=0,ke=tt,qe=0,pe=tt,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0;Dr=h,h=h+16|0,Ln=Dr+12|0,Ht=Dr+8|0,It=Dr+4|0,gn=Dr,zt=N0(t[e+4>>2]|0,y)|0,_e=Nr(zt)|0,P=w(Tn(Ut(n)|0,_e?l:d)),vt=m0(n,2,l)|0,Pn=m0(n,0,d)|0;do if(gt(P)|0?0:!(gt(_e?r:s)|0)){if(T=n+504|0,!(gt(w(D[T>>2]))|0)&&(!(fn(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;D[T>>2]=w(Ur(P,w(Fn(n,zt,l))))}else q=7;while(0);do if((q|0)==7){if(qe=_e^1,!(qe|vt^1)){d=w(Tn(t[n+992>>2]|0,l)),D[n+504>>2]=w(Ur(d,w(Fn(n,2,l))));break}if(!(_e|Pn^1)){d=w(Tn(t[n+996>>2]|0,d)),D[n+504>>2]=w(Ur(d,w(Fn(n,0,l))));break}D[Ln>>2]=w(J),D[Ht>>2]=w(J),t[It>>2]=0,t[gn>>2]=0,ke=w(mt(n,2,l)),pe=w(mt(n,0,l)),vt?(le=w(ke+w(Tn(t[n+992>>2]|0,l))),D[Ln>>2]=le,t[It>>2]=1,we=1):(we=0,le=w(J)),Pn?(P=w(pe+w(Tn(t[n+996>>2]|0,d))),D[Ht>>2]=P,t[gn>>2]=1,T=1):(T=0,P=w(J)),q=t[e+32>>2]|0,_e&(q|0)==2?q=2:(gt(le)|0?!(gt(r)|0):0)&&(D[Ln>>2]=r,t[It>>2]=2,we=2,le=r),(((q|0)==2&qe?0:gt(P)|0)?!(gt(s)|0):0)&&(D[Ht>>2]=s,t[gn>>2]=2,T=2,P=s),ie=w(D[n+396>>2]),Pe=gt(ie)|0;do if(Pe)q=we;else{if((we|0)==1&qe){D[Ht>>2]=w(w(le-ke)/ie),t[gn>>2]=1,T=1,q=1;break}_e&(T|0)==1?(D[Ln>>2]=w(ie*w(P-pe)),t[It>>2]=1,T=1,q=1):q=we}while(0);Ki=gt(r)|0,we=(T0(e,n)|0)!=4,(_e|vt|((o|0)!=1|Ki)|(we|(q|0)==1)?0:(D[Ln>>2]=r,t[It>>2]=1,!Pe))&&(D[Ht>>2]=w(w(r-ke)/ie),t[gn>>2]=1,T=1),(Pn|qe|((_|0)!=1|(gt(s)|0))|(we|(T|0)==1)?0:(D[Ht>>2]=s,t[gn>>2]=1,!Pe))&&(D[Ln>>2]=w(ie*w(s-pe)),t[It>>2]=1),Kt(n,2,l,l,It,Ln),Kt(n,0,d,l,gn,Ht),r=w(D[Ln>>2]),s=w(D[Ht>>2]),ht(n,r,s,y,t[It>>2]|0,t[gn>>2]|0,l,d,0,3565,k)|0,d=w(D[n+908+(t[976+(zt<<2)>>2]<<2)>>2]),D[n+504>>2]=w(Ur(d,w(Fn(n,zt,l))))}while(0);t[n+500>>2]=t[2278],h=Dr}function kn(e,n,r,o,s){return e=e|0,n=n|0,r=w(r),o=w(o),s=w(s),o=w(Dt(e,n,r,o)),w(Ur(o,w(Fn(e,n,s))))}function T0(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?qt(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function hi(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function Ai(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function Kt(e,n,r,o,s,l){switch(e=e|0,n=n|0,r=w(r),o=w(o),s=s|0,l=l|0,r=w(Tn(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(mt(e,n,o))),t[s>>2]|0){case 2:case 1:{s=gt(r)|0,o=w(D[l>>2]),D[l>>2]=s|o>2]=2,D[l>>2]=r);break}default:}}function X(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function Y(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,4,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1040+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function ye(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),o=w(o+w(Tr(e,n,r))),w(o+w(R0(e,n,r)))}function he(e){e=e|0;var n=0,r=0,o=0;e:do if(qt(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=fi(e)|0,!r)n=0;else for(n=0;;){if(o=e0(e,n)|0,(t[o+24>>2]|0)==0?(t[o+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function We(e,n){e=e|0,n=n|0;var r=tt;return r=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((gt(r)|0)^1)|0}function et(e){e=e|0;var n=tt,r=0,o=0,s=0,l=0,d=0,_=0,y=tt;if(r=t[e+968>>2]|0,r)y=w(D[e+908>>2]),n=w(D[e+912>>2]),n=w(rD[r&0](e,y,n)),i0(e,(gt(n)|0)^1,3573);else{l=fi(e)|0;do if(l|0){for(r=0,s=0;;){if(o=e0(e,s)|0,t[o+940>>2]|0){d=8;break}if((t[o+24>>2]|0)!=1)if(_=(T0(e,o)|0)==5,_){r=o;break}else r=(r|0)==0?o:r;if(s=s+1|0,s>>>0>=l>>>0){d=8;break}}if((d|0)==8&&!r)break;return n=w(et(r)),w(n+w(D[r+404>>2]))}while(0);n=w(D[e+912>>2])}return w(n)}function Dt(e,n,r,o){e=e|0,n=n|0,r=w(r),o=w(o);var s=tt,l=0;return qt(n)|0?(n=1,l=3):Nr(n)|0?(n=0,l=3):(o=w(J),s=w(J)),(l|0)==3&&(s=w(Tn(e+364+(n<<3)|0,o)),o=w(Tn(e+380+(n<<3)|0,o))),l=o=w(0)&((gt(o)|0)^1)),r=l?o:r,l=s>=w(0)&((gt(s)|0)^1)&r>2]|0,l)|0,le=Cl(Pe,l)|0,ie=Nr(Pe)|0,P=w(mt(n,2,r)),q=w(mt(n,0,r)),m0(n,2,r)|0?_=w(P+w(Tn(t[n+992>>2]|0,r))):(X(n,2)|0?_t(n,2)|0:0)?(_=w(D[e+908>>2]),y=w(C0(e,2)),y=w(_-w(y+w(di(e,2)))),_=w(Y(n,2,r)),_=w(kn(n,2,w(y-w(_+w(_r(n,2,r)))),r,r))):_=w(J),m0(n,0,s)|0?y=w(q+w(Tn(t[n+996>>2]|0,s))):(X(n,0)|0?_t(n,0)|0:0)?(y=w(D[e+912>>2]),qe=w(C0(e,0)),qe=w(y-w(qe+w(di(e,0)))),y=w(Y(n,0,s)),y=w(kn(n,0,w(qe-w(y+w(_r(n,0,s)))),s,r))):y=w(J),k=gt(_)|0,T=gt(y)|0;do if(k^T?(we=w(D[n+396>>2]),!(gt(we)|0)):0)if(k){_=w(P+w(w(y-q)*we));break}else{qe=w(q+w(w(_-P)/we)),y=T?qe:y;break}while(0);T=gt(_)|0,k=gt(y)|0,T|k&&(pe=(T^1)&1,o=r>w(0)&((o|0)!=0&T),_=ie?_:o?r:_,ht(n,_,y,l,ie?pe:o?2:pe,T&(k^1)&1,_,y,0,3623,d)|0,_=w(D[n+908>>2]),_=w(_+w(mt(n,2,r))),y=w(D[n+912>>2]),y=w(y+w(mt(n,0,r)))),ht(n,_,y,l,1,1,_,y,1,3635,d)|0,(_t(n,Pe)|0?!(X(n,Pe)|0):0)?(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,Pe))),qe=w(qe-w(R0(n,Pe,r))),qe=w(qe-w(_r(n,Pe,ie?r:s))),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe):ke=21;do if((ke|0)==21){if(X(n,Pe)|0?0:(t[e+8>>2]|0)==1){pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe;break}(X(n,Pe)|0?0:(t[e+8>>2]|0)==2)&&(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe)}while(0);(_t(n,le)|0?!(X(n,le)|0):0)?(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,le))),qe=w(qe-w(R0(n,le,r))),qe=w(qe-w(_r(n,le,ie?s:r))),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe):ke=30;do if((ke|0)==30?!(X(n,le)|0):0){if((T0(e,n)|0)==2){pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe;break}pe=(T0(e,n)|0)==3,pe^(t[e+28>>2]|0)==2&&(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe)}while(0)}function Zt(e,n,r){e=e|0,n=n|0,r=r|0;var o=tt,s=0;s=t[976+(r<<2)>>2]|0,o=w(D[n+908+(s<<2)>>2]),o=w(w(D[e+908+(s<<2)>>2])-o),o=w(o-w(D[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),D[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=o}function qt(e){return e=e|0,(e|1|0)==1|0}function Ut(e){e=e|0;var n=tt;switch(t[e+56>>2]|0){case 0:case 3:{n=w(D[e+40>>2]),n>w(0)&((gt(n)|0)^1)?e=c[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function fn(e,n){return e=e|0,n=n|0,(c[e+n>>0]|0)!=0|0}function _t(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function _r(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,5,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1e3+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function Wr(e,n,r){return e=e|0,n=n|0,r=w(r),X(e,n)|0?r=w(Y(e,n,r)):r=w(-w(_r(e,n,r))),w(r)}function Ar(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function z(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function dr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Or(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function Qn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;if(d=e+4|0,_=t[d>>2]|0,s=_-o|0,l=s>>2,e=n+(l<<2)|0,e>>>0>>0){o=_;do t[o>>2]=t[e>>2],e=e+4|0,o=(t[d>>2]|0)+4|0,t[d>>2]=o;while(e>>>0>>0)}l|0&&Y1(_+(0-l<<2)|0,n|0,s|0)|0}function nn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return _=n+4|0,y=t[_>>2]|0,s=t[e>>2]|0,d=r,l=d-s|0,o=y+(0-(l>>2)<<2)|0,t[_>>2]=o,(l|0)>0&&vn(o|0,s|0,l|0)|0,s=e+4|0,l=n+8|0,o=(t[s>>2]|0)-d|0,(o|0)>0&&(vn(t[l>>2]|0,r|0,o|0)|0,t[l>>2]=(t[l>>2]|0)+(o>>>2<<2)),d=t[e>>2]|0,t[e>>2]=t[_>>2],t[_>>2]=d,d=t[s>>2]|0,t[s>>2]=t[l>>2],t[l>>2]=d,d=e+8|0,r=n+12|0,e=t[d>>2]|0,t[d>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[_>>2],y|0}function s0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(d=t[n>>2]|0,l=t[r>>2]|0,(d|0)!=(l|0)){s=e+8|0,r=((l+-4-d|0)>>>2)+1|0,e=d,o=t[s>>2]|0;do t[o>>2]=t[e>>2],o=(t[s>>2]|0)+4|0,t[s>>2]=o,e=e+4|0;while((e|0)!=(l|0));t[n>>2]=d+(r<<2)}}function t0(){_l()}function g0(){var e=0;return e=Tt(4)|0,Kr(e),e|0}function Kr(e){e=e|0,t[e>>2]=a0()|0}function _0(e){e=e|0,e|0&&(Gi(e),Ve(e))}function Gi(e){e=e|0,V0(t[e>>2]|0)}function fo(e,n,r){e=e|0,n=n|0,r=r|0,J0(t[e>>2]|0,n,r)}function x0(e,n){e=e|0,n=w(n),ki(t[e>>2]|0,n)}function Xu(e,n){return e=e|0,n=n|0,fn(t[e>>2]|0,n)|0}function Z0(){var e=0;return e=Tt(8)|0,df(e,0),e|0}function df(e,n){e=e|0,n=n|0,n?n=I0(t[n>>2]|0)|0:n=qu()|0,t[e>>2]=n,t[e+4>>2]=0,Bs(n,e)}function Ba(e){e=e|0;var n=0;return n=Tt(8)|0,df(n,e),n|0}function Oc(e){e=e|0,e|0&&(mu(e),Ve(e))}function mu(e){e=e|0;var n=0;Wu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(Ju(e),Ve(e))}function Ju(e){e=e|0,ei(e)}function ei(e){e=e|0,e=t[e>>2]|0,e|0&&ju(e|0)}function Yf(e){return e=e|0,Vu(e)|0}function pf(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),Do(t[e>>2]|0)}function ja(e,n){e=e|0,n=n|0,Gu(t[e>>2]|0,t[n>>2]|0)}function Ua(e,n){e=e|0,n=n|0,W(t[e>>2]|0,n)}function Ic(e,n,r){e=e|0,n=n|0,r=+r,yn(t[e>>2]|0,n,w(r))}function vu(e,n,r){e=e|0,n=n|0,r=+r,sn(t[e>>2]|0,n,w(r))}function $f(e,n){e=e|0,n=n|0,R(t[e>>2]|0,n)}function gu(e,n){e=e|0,n=n|0,H(t[e>>2]|0,n)}function co(e,n){e=e|0,n=n|0,ue(t[e>>2]|0,n)}function qa(e,n){e=e|0,n=n|0,M0(t[e>>2]|0,n)}function Ws(e,n){e=e|0,n=n|0,Fe(t[e>>2]|0,n)}function za(e,n){e=e|0,n=n|0,Lr(t[e>>2]|0,n)}function Pc(e,n,r){e=e|0,n=n|0,r=+r,rn(t[e>>2]|0,n,w(r))}function Qu(e,n,r){e=e|0,n=n|0,r=+r,Hn(t[e>>2]|0,n,w(r))}function Mc(e,n){e=e|0,n=n|0,Cr(t[e>>2]|0,n)}function Fc(e,n){e=e|0,n=n|0,K(t[e>>2]|0,n)}function Lc(e,n){e=e|0,n=n|0,je(t[e>>2]|0,n)}function Kf(e,n){e=e|0,n=+n,rt(t[e>>2]|0,w(n))}function Tl(e,n){e=e|0,n=+n,wt(t[e>>2]|0,w(n))}function xl(e,n){e=e|0,n=+n,lt(t[e>>2]|0,w(n))}function hf(e,n){e=e|0,n=+n,st(t[e>>2]|0,w(n))}function xo(e,n){e=e|0,n=+n,xt(t[e>>2]|0,w(n))}function mf(e,n){e=e|0,n=+n,Qt(t[e>>2]|0,w(n))}function Wa(e,n){e=e|0,n=+n,Cn(t[e>>2]|0,w(n))}function ti(e){e=e|0,bn(t[e>>2]|0)}function Hs(e,n){e=e|0,n=+n,h0(t[e>>2]|0,w(n))}function mi(e,n){e=e|0,n=+n,ci(t[e>>2]|0,w(n))}function vi(e){e=e|0,xi(t[e>>2]|0)}function Xf(e,n){e=e|0,n=+n,qr(t[e>>2]|0,w(n))}function Rc(e,n){e=e|0,n=+n,Eo(t[e>>2]|0,w(n))}function Jf(e,n){e=e|0,n=+n,wl(t[e>>2]|0,w(n))}function ao(e,n){e=e|0,n=+n,js(t[e>>2]|0,w(n))}function $o(e,n){e=e|0,n=+n,du(t[e>>2]|0,w(n))}function kl(e,n){e=e|0,n=+n,Yu(t[e>>2]|0,w(n))}function Nc(e,n){e=e|0,n=+n,oo(t[e>>2]|0,w(n))}function Al(e,n){e=e|0,n=+n,Hi(t[e>>2]|0,w(n))}function vf(e,n){e=e|0,n=+n,F0(t[e>>2]|0,w(n))}function Qf(e,n,r){e=e|0,n=n|0,r=+r,ft(t[e>>2]|0,n,w(r))}function k0(e,n,r){e=e|0,n=n|0,r=+r,He(t[e>>2]|0,n,w(r))}function v(e,n,r){e=e|0,n=n|0,r=+r,Qe(t[e>>2]|0,n,w(r))}function m(e){return e=e|0,ve(t[e>>2]|0)|0}function S(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,ar(s,t[n>>2]|0,r),O(e,s),h=o}function O(e,n){e=e|0,n=n|0,M(e,t[n+4>>2]|0,+w(D[n>>2]))}function M(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,L[e+8>>3]=r}function b(e){return e=e|0,U(t[e>>2]|0)|0}function ee(e){return e=e|0,fe(t[e>>2]|0)|0}function Ye(e){return e=e|0,de(t[e>>2]|0)|0}function Ze(e){return e=e|0,au(t[e>>2]|0)|0}function ut(e){return e=e|0,Ge(t[e>>2]|0)|0}function In(e){return e=e|0,F(t[e>>2]|0)|0}function A0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,d0(s,t[n>>2]|0,r),O(e,s),h=o}function jr(e){return e=e|0,xe(t[e>>2]|0)|0}function gi(e){return e=e|0,Xe(t[e>>2]|0)|0}function po(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Rt(o,t[n>>2]|0),O(e,o),h=r}function _i(e){return e=e|0,+ +w(yl(t[e>>2]|0))}function Re(e){return e=e|0,+ +w(cu(t[e>>2]|0))}function Ce(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,p0(o,t[n>>2]|0),O(e,o),h=r}function ze(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,E0(o,t[n>>2]|0),O(e,o),h=r}function Et(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,So(o,t[n>>2]|0),O(e,o),h=r}function on(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Dl(o,t[n>>2]|0),O(e,o),h=r}function sr(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Us(o,t[n>>2]|0),O(e,o),h=r}function mn(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,qs(o,t[n>>2]|0),O(e,o),h=r}function pr(e){return e=e|0,+ +w(Gr(t[e>>2]|0))}function Hr(e,n){return e=e|0,n=n|0,+ +w(St(t[e>>2]|0,n))}function Vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Ne(s,t[n>>2]|0,r),O(e,s),h=o}function ni(e,n,r){e=e|0,n=n|0,r=r|0,Ns(t[e>>2]|0,t[n>>2]|0,r)}function Zf(e,n){e=e|0,n=n|0,D0(t[e>>2]|0,t[n>>2]|0)}function Pm(e){return e=e|0,fi(t[e>>2]|0)|0}function Ha(e){return e=e|0,e=nr(t[e>>2]|0)|0,e?e=Yf(e)|0:e=0,e|0}function vd(e,n){return e=e|0,n=n|0,e=e0(t[e>>2]|0,n)|0,e?e=Yf(e)|0:e=0,e|0}function gd(e,n){e=e|0,n=n|0;var r=0,o=0;o=Tt(4)|0,ba(o,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=o,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,1)}function ba(e,n){e=e|0,n=n|0,Oo(e,n)}function Bc(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Mm(_,Vu(n)|0,+r,o,+s,l),D[e>>2]=w(+L[_>>3]),D[e+4>>2]=w(+L[_+8>>3]),h=d}function Mm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0,_=0,y=0,k=0,T=0;d=h,h=h+32|0,T=d+8|0,k=d+20|0,y=d,_=d+16|0,L[T>>3]=r,t[k>>2]=o,L[y>>3]=s,t[_>>2]=l,_d(e,t[n+4>>2]|0,T,k,y,_),h=d}function _d(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Zo(_),n=Oi(n)|0,Fm(e,n,+L[r>>3],t[o>>2]|0,+L[s>>3],t[l>>2]|0),eu(_),h=d}function Oi(e){return e=e|0,t[e>>2]|0}function Fm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0;d=ko(yd()|0)|0,r=+Ko(r),o=jc(o)|0,s=+Ko(s),Ga(e,ro(0,d|0,n|0,+r,o|0,+s,jc(l)|0)|0)}function yd(){var e=0;return c[7608]|0||(Ed(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function ko(e){return e=e|0,t[e+8>>2]|0}function Ko(e){return e=+e,+ +Ol(e)}function jc(e){return e=e|0,Dd(e)|0}function Ga(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=n,o&1?(Lm(r,0),c0(o|0,r|0)|0,Va(e,r),Wn(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),h=s}function Lm(e,n){e=e|0,n=n|0,wd(e,n),t[e+8>>2]=0,c[e+24>>0]=0}function Va(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Wn(e){e=e|0,c[e+24>>0]=0}function wd(e,n){e=e|0,n=n|0,t[e>>2]=n}function Dd(e){return e=e|0,e|0}function Ol(e){return e=+e,+e}function Ed(e){e=e|0,Ao(e,Rm()|0,4)}function Rm(){return 1064}function Ao(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=hl(n|0,r+1|0)|0}function Oo(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,qi(n|0)}function Nm(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,0)}function Uc(e){e=e|0,rr(t[e>>2]|0)}function Ya(e){return e=e|0,Go(t[e>>2]|0)|0}function Sd(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,Yr(t[e>>2]|0,w(n),w(r),o)}function Cd(e){return e=e|0,+ +w(ir(t[e>>2]|0))}function ho(e){return e=e|0,+ +w(Y0(t[e>>2]|0))}function bs(e){return e=e|0,+ +w(L0(t[e>>2]|0))}function $a(e){return e=e|0,+ +w(Co(t[e>>2]|0))}function Td(e){return e=e|0,+ +w($u(t[e>>2]|0))}function qc(e){return e=e|0,+ +w(Vo(t[e>>2]|0))}function xd(e,n){e=e|0,n=n|0,L[e>>3]=+w(ir(t[n>>2]|0)),L[e+8>>3]=+w(Y0(t[n>>2]|0)),L[e+16>>3]=+w(L0(t[n>>2]|0)),L[e+24>>3]=+w(Co(t[n>>2]|0)),L[e+32>>3]=+w($u(t[n>>2]|0)),L[e+40>>3]=+w(Vo(t[n>>2]|0))}function Ka(e,n){return e=e|0,n=n|0,+ +w(Rr(t[e>>2]|0,n))}function kd(e,n){return e=e|0,n=n|0,+ +w(Jn(t[e>>2]|0,n))}function Xa(e,n){return e=e|0,n=n|0,+ +w(ai(t[e>>2]|0,n))}function Ja(){return Rs()|0}function Gs(){Bm(),Vs(),Ad(),Od(),Qa(),jm()}function Bm(){hO(11713,4938,1)}function Vs(){FA(10448)}function Ad(){hA(10408)}function Od(){Bk(10324)}function Qa(){Gx(10096)}function jm(){Um(9132)}function Um(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=0,Rf=0,Zs=0,el=0,ss=0,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=0,tl=0,ql=0,zl=0,Li=0,Di=0,ku=0,xr=0,Wl=0,Qi=0,ls=0,Zi=0,fs=0,Hl=0,bl=0,cs=0,Ri=0,Au=0,Gl=0,Vl=0,Yl=0,En=0,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0;n=h,h=h+672|0,r=n+656|0,Ou=n+648|0,Vt=n+640|0,xn=n+632|0,Ni=n+624|0,eo=n+616|0,Ei=n+608|0,br=n+600|0,En=n+592|0,Yl=n+584|0,Vl=n+576|0,Gl=n+568|0,Au=n+560|0,Ri=n+552|0,cs=n+544|0,bl=n+536|0,Hl=n+528|0,fs=n+520|0,Zi=n+512|0,ls=n+504|0,Qi=n+496|0,Wl=n+488|0,xr=n+480|0,ku=n+472|0,Di=n+464|0,Li=n+456|0,zl=n+448|0,ql=n+440|0,tl=n+432|0,Ul=n+424|0,jl=n+416|0,xu=n+408|0,go=n+400|0,nu=n+392|0,Fi=n+384|0,ss=n+376|0,el=n+368|0,Zs=n+360|0,Rf=n+352|0,Lf=n+344|0,us=n+336|0,Ff=n+328|0,Tu=n+320|0,Kn=n+312|0,Mf=n+304|0,Pf=n+296|0,If=n+288|0,Qs=n+280|0,Js=n+272|0,Of=n+264|0,Cu=n+256|0,Af=n+248|0,kf=n+240|0,Ro=n+232|0,Ji=n+224|0,Xi=n+216|0,Ki=n+208|0,Dr=n+200|0,zt=n+192|0,Pn=n+184|0,gn=n+176|0,It=n+168|0,Ht=n+160|0,Ln=n+152|0,vt=n+144|0,_e=n+136|0,pe=n+128|0,qe=n+120|0,ke=n+112|0,Pe=n+104|0,ie=n+96|0,le=n+88|0,we=n+80|0,q=n+72|0,P=n+64|0,T=n+56|0,k=n+48|0,y=n+40|0,_=n+32|0,d=n+24|0,l=n+16|0,s=n+8|0,o=n,qm(e,3646),Id(e,3651,2)|0,Pd(e,3665,2)|0,zm(e,3682,18)|0,t[Ou>>2]=19,t[Ou+4>>2]=0,t[r>>2]=t[Ou>>2],t[r+4>>2]=t[Ou+4>>2],gf(e,3690,r)|0,t[Vt>>2]=1,t[Vt+4>>2]=0,t[r>>2]=t[Vt>>2],t[r+4>>2]=t[Vt+4>>2],Md(e,3696,r)|0,t[xn>>2]=2,t[xn+4>>2]=0,t[r>>2]=t[xn>>2],t[r+4>>2]=t[xn+4>>2],Xr(e,3706,r)|0,t[Ni>>2]=1,t[Ni+4>>2]=0,t[r>>2]=t[Ni>>2],t[r+4>>2]=t[Ni+4>>2],yi(e,3722,r)|0,t[eo>>2]=2,t[eo+4>>2]=0,t[r>>2]=t[eo>>2],t[r+4>>2]=t[eo+4>>2],yi(e,3734,r)|0,t[Ei>>2]=3,t[Ei+4>>2]=0,t[r>>2]=t[Ei>>2],t[r+4>>2]=t[Ei+4>>2],Xr(e,3753,r)|0,t[br>>2]=4,t[br+4>>2]=0,t[r>>2]=t[br>>2],t[r+4>>2]=t[br+4>>2],Xr(e,3769,r)|0,t[En>>2]=5,t[En+4>>2]=0,t[r>>2]=t[En>>2],t[r+4>>2]=t[En+4>>2],Xr(e,3783,r)|0,t[Yl>>2]=6,t[Yl+4>>2]=0,t[r>>2]=t[Yl>>2],t[r+4>>2]=t[Yl+4>>2],Xr(e,3796,r)|0,t[Vl>>2]=7,t[Vl+4>>2]=0,t[r>>2]=t[Vl>>2],t[r+4>>2]=t[Vl+4>>2],Xr(e,3813,r)|0,t[Gl>>2]=8,t[Gl+4>>2]=0,t[r>>2]=t[Gl>>2],t[r+4>>2]=t[Gl+4>>2],Xr(e,3825,r)|0,t[Au>>2]=3,t[Au+4>>2]=0,t[r>>2]=t[Au>>2],t[r+4>>2]=t[Au+4>>2],yi(e,3843,r)|0,t[Ri>>2]=4,t[Ri+4>>2]=0,t[r>>2]=t[Ri>>2],t[r+4>>2]=t[Ri+4>>2],yi(e,3853,r)|0,t[cs>>2]=9,t[cs+4>>2]=0,t[r>>2]=t[cs>>2],t[r+4>>2]=t[cs+4>>2],Xr(e,3870,r)|0,t[bl>>2]=10,t[bl+4>>2]=0,t[r>>2]=t[bl>>2],t[r+4>>2]=t[bl+4>>2],Xr(e,3884,r)|0,t[Hl>>2]=11,t[Hl+4>>2]=0,t[r>>2]=t[Hl>>2],t[r+4>>2]=t[Hl+4>>2],Xr(e,3896,r)|0,t[fs>>2]=1,t[fs+4>>2]=0,t[r>>2]=t[fs>>2],t[r+4>>2]=t[fs+4>>2],j0(e,3907,r)|0,t[Zi>>2]=2,t[Zi+4>>2]=0,t[r>>2]=t[Zi>>2],t[r+4>>2]=t[Zi+4>>2],j0(e,3915,r)|0,t[ls>>2]=3,t[ls+4>>2]=0,t[r>>2]=t[ls>>2],t[r+4>>2]=t[ls+4>>2],j0(e,3928,r)|0,t[Qi>>2]=4,t[Qi+4>>2]=0,t[r>>2]=t[Qi>>2],t[r+4>>2]=t[Qi+4>>2],j0(e,3948,r)|0,t[Wl>>2]=5,t[Wl+4>>2]=0,t[r>>2]=t[Wl>>2],t[r+4>>2]=t[Wl+4>>2],j0(e,3960,r)|0,t[xr>>2]=6,t[xr+4>>2]=0,t[r>>2]=t[xr>>2],t[r+4>>2]=t[xr+4>>2],j0(e,3974,r)|0,t[ku>>2]=7,t[ku+4>>2]=0,t[r>>2]=t[ku>>2],t[r+4>>2]=t[ku+4>>2],j0(e,3983,r)|0,t[Di>>2]=20,t[Di+4>>2]=0,t[r>>2]=t[Di>>2],t[r+4>>2]=t[Di+4>>2],gf(e,3999,r)|0,t[Li>>2]=8,t[Li+4>>2]=0,t[r>>2]=t[Li>>2],t[r+4>>2]=t[Li+4>>2],j0(e,4012,r)|0,t[zl>>2]=9,t[zl+4>>2]=0,t[r>>2]=t[zl>>2],t[r+4>>2]=t[zl+4>>2],j0(e,4022,r)|0,t[ql>>2]=21,t[ql+4>>2]=0,t[r>>2]=t[ql>>2],t[r+4>>2]=t[ql+4>>2],gf(e,4039,r)|0,t[tl>>2]=10,t[tl+4>>2]=0,t[r>>2]=t[tl>>2],t[r+4>>2]=t[tl+4>>2],j0(e,4053,r)|0,t[Ul>>2]=11,t[Ul+4>>2]=0,t[r>>2]=t[Ul>>2],t[r+4>>2]=t[Ul+4>>2],j0(e,4065,r)|0,t[jl>>2]=12,t[jl+4>>2]=0,t[r>>2]=t[jl>>2],t[r+4>>2]=t[jl+4>>2],j0(e,4084,r)|0,t[xu>>2]=13,t[xu+4>>2]=0,t[r>>2]=t[xu>>2],t[r+4>>2]=t[xu+4>>2],j0(e,4097,r)|0,t[go>>2]=14,t[go+4>>2]=0,t[r>>2]=t[go>>2],t[r+4>>2]=t[go+4>>2],j0(e,4117,r)|0,t[nu>>2]=15,t[nu+4>>2]=0,t[r>>2]=t[nu>>2],t[r+4>>2]=t[nu+4>>2],j0(e,4129,r)|0,t[Fi>>2]=16,t[Fi+4>>2]=0,t[r>>2]=t[Fi>>2],t[r+4>>2]=t[Fi+4>>2],j0(e,4148,r)|0,t[ss>>2]=17,t[ss+4>>2]=0,t[r>>2]=t[ss>>2],t[r+4>>2]=t[ss+4>>2],j0(e,4161,r)|0,t[el>>2]=18,t[el+4>>2]=0,t[r>>2]=t[el>>2],t[r+4>>2]=t[el+4>>2],j0(e,4181,r)|0,t[Zs>>2]=5,t[Zs+4>>2]=0,t[r>>2]=t[Zs>>2],t[r+4>>2]=t[Zs+4>>2],yi(e,4196,r)|0,t[Rf>>2]=6,t[Rf+4>>2]=0,t[r>>2]=t[Rf>>2],t[r+4>>2]=t[Rf+4>>2],yi(e,4206,r)|0,t[Lf>>2]=7,t[Lf+4>>2]=0,t[r>>2]=t[Lf>>2],t[r+4>>2]=t[Lf+4>>2],yi(e,4217,r)|0,t[us>>2]=3,t[us+4>>2]=0,t[r>>2]=t[us>>2],t[r+4>>2]=t[us+4>>2],Zu(e,4235,r)|0,t[Ff>>2]=1,t[Ff+4>>2]=0,t[r>>2]=t[Ff>>2],t[r+4>>2]=t[Ff+4>>2],_f(e,4251,r)|0,t[Tu>>2]=4,t[Tu+4>>2]=0,t[r>>2]=t[Tu>>2],t[r+4>>2]=t[Tu+4>>2],Zu(e,4263,r)|0,t[Kn>>2]=5,t[Kn+4>>2]=0,t[r>>2]=t[Kn>>2],t[r+4>>2]=t[Kn+4>>2],Zu(e,4279,r)|0,t[Mf>>2]=6,t[Mf+4>>2]=0,t[r>>2]=t[Mf>>2],t[r+4>>2]=t[Mf+4>>2],Zu(e,4293,r)|0,t[Pf>>2]=7,t[Pf+4>>2]=0,t[r>>2]=t[Pf>>2],t[r+4>>2]=t[Pf+4>>2],Zu(e,4306,r)|0,t[If>>2]=8,t[If+4>>2]=0,t[r>>2]=t[If>>2],t[r+4>>2]=t[If+4>>2],Zu(e,4323,r)|0,t[Qs>>2]=9,t[Qs+4>>2]=0,t[r>>2]=t[Qs>>2],t[r+4>>2]=t[Qs+4>>2],Zu(e,4335,r)|0,t[Js>>2]=2,t[Js+4>>2]=0,t[r>>2]=t[Js>>2],t[r+4>>2]=t[Js+4>>2],_f(e,4353,r)|0,t[Of>>2]=12,t[Of+4>>2]=0,t[r>>2]=t[Of>>2],t[r+4>>2]=t[Of+4>>2],Io(e,4363,r)|0,t[Cu>>2]=1,t[Cu+4>>2]=0,t[r>>2]=t[Cu>>2],t[r+4>>2]=t[Cu+4>>2],_u(e,4376,r)|0,t[Af>>2]=2,t[Af+4>>2]=0,t[r>>2]=t[Af>>2],t[r+4>>2]=t[Af+4>>2],_u(e,4388,r)|0,t[kf>>2]=13,t[kf+4>>2]=0,t[r>>2]=t[kf>>2],t[r+4>>2]=t[kf+4>>2],Io(e,4402,r)|0,t[Ro>>2]=14,t[Ro+4>>2]=0,t[r>>2]=t[Ro>>2],t[r+4>>2]=t[Ro+4>>2],Io(e,4411,r)|0,t[Ji>>2]=15,t[Ji+4>>2]=0,t[r>>2]=t[Ji>>2],t[r+4>>2]=t[Ji+4>>2],Io(e,4421,r)|0,t[Xi>>2]=16,t[Xi+4>>2]=0,t[r>>2]=t[Xi>>2],t[r+4>>2]=t[Xi+4>>2],Io(e,4433,r)|0,t[Ki>>2]=17,t[Ki+4>>2]=0,t[r>>2]=t[Ki>>2],t[r+4>>2]=t[Ki+4>>2],Io(e,4446,r)|0,t[Dr>>2]=18,t[Dr+4>>2]=0,t[r>>2]=t[Dr>>2],t[r+4>>2]=t[Dr+4>>2],Io(e,4458,r)|0,t[zt>>2]=3,t[zt+4>>2]=0,t[r>>2]=t[zt>>2],t[r+4>>2]=t[zt+4>>2],_u(e,4471,r)|0,t[Pn>>2]=1,t[Pn+4>>2]=0,t[r>>2]=t[Pn>>2],t[r+4>>2]=t[Pn+4>>2],ec(e,4486,r)|0,t[gn>>2]=10,t[gn+4>>2]=0,t[r>>2]=t[gn>>2],t[r+4>>2]=t[gn+4>>2],Zu(e,4496,r)|0,t[It>>2]=11,t[It+4>>2]=0,t[r>>2]=t[It>>2],t[r+4>>2]=t[It+4>>2],Zu(e,4508,r)|0,t[Ht>>2]=3,t[Ht+4>>2]=0,t[r>>2]=t[Ht>>2],t[r+4>>2]=t[Ht+4>>2],_f(e,4519,r)|0,t[Ln>>2]=4,t[Ln+4>>2]=0,t[r>>2]=t[Ln>>2],t[r+4>>2]=t[Ln+4>>2],Wm(e,4530,r)|0,t[vt>>2]=19,t[vt+4>>2]=0,t[r>>2]=t[vt>>2],t[r+4>>2]=t[vt+4>>2],Fd(e,4542,r)|0,t[_e>>2]=12,t[_e+4>>2]=0,t[r>>2]=t[_e>>2],t[r+4>>2]=t[_e+4>>2],yf(e,4554,r)|0,t[pe>>2]=13,t[pe+4>>2]=0,t[r>>2]=t[pe>>2],t[r+4>>2]=t[pe+4>>2],tc(e,4568,r)|0,t[qe>>2]=2,t[qe+4>>2]=0,t[r>>2]=t[qe>>2],t[r+4>>2]=t[qe+4>>2],Hm(e,4578,r)|0,t[ke>>2]=20,t[ke+4>>2]=0,t[r>>2]=t[ke>>2],t[r+4>>2]=t[ke+4>>2],Ld(e,4587,r)|0,t[Pe>>2]=22,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],gf(e,4602,r)|0,t[ie>>2]=23,t[ie+4>>2]=0,t[r>>2]=t[ie>>2],t[r+4>>2]=t[ie+4>>2],gf(e,4619,r)|0,t[le>>2]=14,t[le+4>>2]=0,t[r>>2]=t[le>>2],t[r+4>>2]=t[le+4>>2],Rd(e,4629,r)|0,t[we>>2]=1,t[we+4>>2]=0,t[r>>2]=t[we>>2],t[r+4>>2]=t[we+4>>2],zc(e,4637,r)|0,t[q>>2]=4,t[q+4>>2]=0,t[r>>2]=t[q>>2],t[r+4>>2]=t[q+4>>2],_u(e,4653,r)|0,t[P>>2]=5,t[P+4>>2]=0,t[r>>2]=t[P>>2],t[r+4>>2]=t[P+4>>2],_u(e,4669,r)|0,t[T>>2]=6,t[T+4>>2]=0,t[r>>2]=t[T>>2],t[r+4>>2]=t[T+4>>2],_u(e,4686,r)|0,t[k>>2]=7,t[k+4>>2]=0,t[r>>2]=t[k>>2],t[r+4>>2]=t[k+4>>2],_u(e,4701,r)|0,t[y>>2]=8,t[y+4>>2]=0,t[r>>2]=t[y>>2],t[r+4>>2]=t[y+4>>2],_u(e,4719,r)|0,t[_>>2]=9,t[_+4>>2]=0,t[r>>2]=t[_>>2],t[r+4>>2]=t[_+4>>2],_u(e,4736,r)|0,t[d>>2]=21,t[d+4>>2]=0,t[r>>2]=t[d>>2],t[r+4>>2]=t[d+4>>2],Nd(e,4754,r)|0,t[l>>2]=2,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],ec(e,4772,r)|0,t[s>>2]=3,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],ec(e,4790,r)|0,t[o>>2]=4,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],ec(e,4808,r)|0,h=n}function qm(e,n){e=e|0,n=n|0;var r=0;r=Nx()|0,t[e>>2]=r,Bx(r,n),Cf(t[e>>2]|0)}function Id(e,n,r){return e=e|0,n=n|0,r=r|0,Ex(e,Zn(n)|0,r,0),e|0}function Pd(e,n,r){return e=e|0,n=n|0,r=r|0,ux(e,Zn(n)|0,r,0),e|0}function zm(e,n,r){return e=e|0,n=n|0,r=r|0,V9(e,Zn(n)|0,r,0),e|0}function gf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],I9(e,n,s),h=o,e|0}function Md(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],vo(e,n,s),h=o,e|0}function Xr(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],a(e,n,s),h=o,e|0}function yi(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],n4(e,n,s),h=o,e|0}function j0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],b_(e,n,s),h=o,e|0}function Zu(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L_(e,n,s),h=o,e|0}function _f(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hp(e,n,s),h=o,e|0}function Io(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],e_(e,n,s),h=o,e|0}function _u(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ip(e,n,s),h=o,e|0}function ec(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ng(e,n,s),h=o,e|0}function Wm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],l0(e,n,s),h=o,e|0}function Fd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],hg(e,n,s),h=o,e|0}function yf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sg(e,n,s),h=o,e|0}function tc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Kv(e,n,s),h=o,e|0}function Hm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y1(e,n,s),h=o,e|0}function Ld(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],wv(e,n,s),h=o,e|0}function Rd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],fv(e,n,s),h=o,e|0}function zc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Gd(e,n,s),h=o,e|0}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Wc(e,n,s),h=o,e|0}function Wc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hc(e,r,s,1),h=o}function Zn(e){return e=e|0,e|0}function Hc(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Za()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Bd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,bc(l,o)|0,o),h=s}function Za(){var e=0,n=0;if(c[7616]|0||(yu(9136),Bt(24,9136,Q|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));yu(9136)}return 9136}function Bd(e){return e=e|0,0}function bc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Za()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],n1(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jd(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ur(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;d=h,h=h+32|0,q=d+24|0,P=d+20|0,y=d+16|0,T=d+12|0,k=d+8|0,_=d+4|0,we=d,t[P>>2]=n,t[y>>2]=r,t[T>>2]=o,t[k>>2]=s,t[_>>2]=l,l=e+28|0,t[we>>2]=t[l>>2],t[q>>2]=t[we>>2],e1(e+24|0,q,P,T,k,y,_)|0,t[l>>2]=t[t[l>>2]>>2],h=d}function e1(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,e=bm(n)|0,n=Tt(24)|0,t1(n+4|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0,t[d>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function bm(e){return e=e|0,t[e>>2]|0}function t1(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Lt(e,n){return e=e|0,n=n|0,n|e|0}function n1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Gm(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ud(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],n1(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Vm(e,_),Ym(_),h=k;return}}function Gm(e){return e=e|0,357913941}function Ud(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Vm(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ym(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function yu(e){e=e|0,Gc(e)}function r1(e){e=e|0,i1(e+24|0)}function Dn(e){return e=e|0,t[e>>2]|0}function i1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Gc(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,cn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function An(){return 9228}function cn(){return 1140}function Vc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Il(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=$m(n,o)|0,h=r,n|0}function Nn(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Il(e){return e=e|0,(t[(Za()|0)+24>>2]|0)+(e*12|0)|0}function $m(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+48|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=o1(o)|0,h=s,o|0}function o1(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(u1()|0)|0,o?(s1(n,o),l1(r,n),qd(e,r),e=f1(n)|0):e=zd(e)|0,h=s,e|0}function u1(){var e=0;return c[7632]|0||(nc(9184),Bt(25,9184,Q|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function U0(e){return e=e|0,t[e+36>>2]|0}function s1(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function l1(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function qd(e,n){e=e|0,n=n|0,Ii(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function f1(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function zd(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;y=h,h=h+16|0,r=y+4|0,o=y,s=Qo(8)|0,l=s,d=Tt(48)|0,_=d,n=_+48|0;do t[_>>2]=t[e>>2],_=_+4|0,e=e+4|0;while((_|0)<(n|0));return n=l+4|0,t[n>>2]=d,_=Tt(8)|0,d=t[n>>2]|0,t[o>>2]=0,t[r>>2]=t[o>>2],Wd(_,d,r),t[s>>2]=_,h=y,l|0}function Wd(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function Km(e){e=e|0,da(e),Ve(e)}function Xm(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function es(e){e=e|0,Ve(e)}function Ii(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,l=c1(t[e>>2]|0,n,r,o,s,l,d)|0,d=e+4|0,t[(t[d>>2]|0)+8>>2]=l,t[(t[d>>2]|0)+8>>2]|0}function c1(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0;var _=0,y=0;return _=h,h=h+16|0,y=_,Zo(y),e=Oi(e)|0,d=Jm(e,+L[n>>3],+L[r>>3],+L[o>>3],+L[s>>3],+L[l>>3],+L[d>>3])|0,eu(y),h=_,d|0}function Jm(e,n,r,o,s,l,d){e=e|0,n=+n,r=+r,o=+o,s=+s,l=+l,d=+d;var _=0;return _=ko(a1()|0)|0,n=+Ko(n),r=+Ko(r),o=+Ko(o),s=+Ko(s),l=+Ko(l),xs(0,_|0,e|0,+n,+r,+o,+s,+l,+ +Ko(d))|0}function a1(){var e=0;return c[7624]|0||(Qm(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function Qm(e){e=e|0,Ao(e,Zm()|0,6)}function Zm(){return 1112}function nc(e){e=e|0,Ys(e)}function Hd(e){e=e|0,d1(e+24|0),bd(e+16|0)}function d1(e){e=e|0,tv(e)}function bd(e){e=e|0,ev(e)}function ev(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function tv(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function Ys(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,c[e+40>>0]=0,c[e+41>>0]=0}function Gd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Vd(e,r,s,0),h=o}function Vd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=p1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=h1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Yd(l,o)|0,o),h=s}function p1(){var e=0,n=0;if(c[7640]|0||(Xo(9232),Bt(26,9232,Q|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Xo(9232)}return 9232}function h1(e){return e=e|0,0}function Yd(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=p1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],wf(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(m1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function wf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=$d(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Kd(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],wf(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yc(e,_),Xd(_),h=k;return}}function $d(e){return e=e|0,357913941}function Kd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Xd(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Xo(e){e=e|0,Jd(e)}function Pl(e){e=e|0,nv(e+24|0)}function nv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Jd(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,rv()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rv(){return 1144}function iv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,d=l+8|0,_=l,y=ov(e)|0,e=t[y+4>>2]|0,t[_>>2]=t[y>>2],t[_+4>>2]=e,t[d>>2]=t[_>>2],t[d+4>>2]=t[_+4>>2],uv(n,d,r,o,s),h=l}function ov(e){return e=e|0,(t[(p1()|0)+24>>2]|0)+(e*12|0)|0}function uv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0,k=0;k=h,h=h+16|0,d=k+2|0,_=k+1|0,y=k,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),wu(d,r),r=+Du(d,r),wu(_,o),o=+Du(_,o),ts(y,s),y=ns(y,s)|0,iD[l&1](e,r,o,y),h=k}function wu(e,n){e=e|0,n=+n}function Du(e,n){return e=e|0,n=+n,+ +lv(n)}function ts(e,n){e=e|0,n=n|0}function ns(e,n){return e=e|0,n=n|0,sv(n)|0}function sv(e){return e=e|0,e|0}function lv(e){return e=+e,+e}function fv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qd(e,r,s,1),h=o}function Qd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=$c()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Zd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cv(l,o)|0,o),h=s}function $c(){var e=0,n=0;if(c[7648]|0||(np(9268),Bt(27,9268,Q|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));np(9268)}return 9268}function Zd(e){return e=e|0,0}function cv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=$c()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(av(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function av(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=tp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,dv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,pv(e,_),hv(_),h=k;return}}function tp(e){return e=e|0,357913941}function dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function pv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function hv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function np(e){e=e|0,Po(e)}function mv(e){e=e|0,vv(e+24|0)}function vv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Po(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,gv()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gv(){return 1160}function _v(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=yv(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=rp(n,o)|0,h=r,n|0}function yv(e){return e=e|0,(t[($c()|0)+24>>2]|0)+(e*12|0)|0}function rp(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ip(dc[r&31](e)|0)|0}function ip(e){return e=e|0,e&1|0}function wv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Dv(e,r,s,0),h=o}function Dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=v1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=g1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Ev(l,o)|0,o),h=s}function v1(){var e=0,n=0;if(c[7656]|0||(up(9304),Bt(28,9304,Q|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));up(9304)}return 9304}function g1(e){return e=e|0,0}function Ev(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=v1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],op(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Sv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Sv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Cv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Tv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],op(l,o,r),t[y>>2]=(t[y>>2]|0)+12,xv(e,_),kv(_),h=k;return}}function Cv(e){return e=e|0,357913941}function Tv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function xv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function up(e){e=e|0,Iv(e)}function Av(e){e=e|0,Ov(e+24|0)}function Ov(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Iv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Pv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Pv(){return 1164}function Mv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Fv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Lv(n,s,r),h=o}function Fv(e){return e=e|0,(t[(v1()|0)+24>>2]|0)+(e*12|0)|0}function Lv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),$s(s,r),r=Ks(s,r)|0,Bl[o&31](e,r),Xs(s),h=l}function $s(e,n){e=e|0,n=n|0,Rv(e,n)}function Ks(e,n){return e=e|0,n=n|0,e|0}function Xs(e){e=e|0,Ju(e)}function Rv(e,n){e=e|0,n=n|0,_1(e,n)}function _1(e,n){e=e|0,n=n|0,t[e>>2]=n}function y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sp(e,r,s,0),h=o}function sp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=w1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Nv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Bv(l,o)|0,o),h=s}function w1(){var e=0,n=0;if(c[7664]|0||(cp(9340),Bt(29,9340,Q|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cp(9340)}return 9340}function Nv(e){return e=e|0,0}function Bv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=w1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Uv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,qv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,zv(e,_),fp(_),h=k;return}}function Uv(e){return e=e|0,357913941}function qv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function zv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function fp(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function cp(e){e=e|0,Hv(e)}function Kc(e){e=e|0,Wv(e+24|0)}function Wv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Hv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,bv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function bv(){return 1180}function Gv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Vv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=Yv(n,s,r)|0,h=o,r|0}function Vv(e){return e=e|0,(t[(w1()|0)+24>>2]|0)+(e*12|0)|0}function Yv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),Ml(s,r),s=Fl(s,r)|0,s=Xc(J4[o&15](e,s)|0)|0,h=l,s|0}function Ml(e,n){e=e|0,n=n|0}function Fl(e,n){return e=e|0,n=n|0,$v(n)|0}function Xc(e){return e=e|0,e|0}function $v(e){return e=e|0,e|0}function Kv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Xv(e,r,s,0),h=o}function Xv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=D1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Jv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Qv(l,o)|0,o),h=s}function D1(){var e=0,n=0;if(c[7672]|0||(hp(9376),Bt(30,9376,Q|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));hp(9376)}return 9376}function Jv(e){return e=e|0,0}function Qv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=D1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ap(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(dp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ap(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function dp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=pp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Zv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ap(l,o,r),t[y>>2]=(t[y>>2]|0)+12,eg(e,_),tg(_),h=k;return}}function pp(e){return e=e|0,357913941}function Zv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function eg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function tg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function hp(e){e=e|0,rg(e)}function Jc(e){e=e|0,ng(e+24|0)}function ng(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function rg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function mp(){return 1196}function ig(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=og(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=ug(n,o)|0,h=r,n|0}function og(e){return e=e|0,(t[(D1()|0)+24>>2]|0)+(e*12|0)|0}function ug(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Xc(dc[r&31](e)|0)|0}function sg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],lg(e,r,s,1),h=o}function lg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=fg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cg(l,o)|0,o),h=s}function E1(){var e=0,n=0;if(c[7680]|0||(C1(9412),Bt(31,9412,Q|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));C1(9412)}return 9412}function fg(e){return e=e|0,0}function cg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],rc(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ag(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function rc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function ag(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=vp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,gp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],rc(l,o,r),t[y>>2]=(t[y>>2]|0)+12,S1(e,_),_p(_),h=k;return}}function vp(e){return e=e|0,357913941}function gp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function S1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function _p(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function C1(e){e=e|0,dg(e)}function yp(e){e=e|0,wp(e+24|0)}function wp(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function dg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Dp(){return 1200}function pg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Qc(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=Zc(n,o)|0,h=r,n|0}function Qc(e){return e=e|0,(t[(E1()|0)+24>>2]|0)+(e*12|0)|0}function Zc(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ea(dc[r&31](e)|0)|0}function ea(e){return e=e|0,e|0}function hg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],T1(e,r,s,0),h=o}function T1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=ta()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=mg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,vg(l,o)|0,o),h=s}function ta(){var e=0,n=0;if(c[7688]|0||(Sp(9448),Bt(32,9448,Q|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Sp(9448)}return 9448}function mg(e){return e=e|0,0}function vg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=ta()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(gg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function gg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=_g(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,yg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,wg(e,_),Dg(_),h=k;return}}function _g(e){return e=e|0,357913941}function yg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function wg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Dg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Sp(e){e=e|0,Cg(e)}function Eg(e){e=e|0,Sg(e+24|0)}function Sg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Cg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Mo(){return 1204}function Tg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=xg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ll(n,s,r),h=o}function xg(e){return e=e|0,(t[(ta()|0)+24>>2]|0)+(e*12|0)|0}function Ll(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),On(s,r),s=x1(s,r)|0,Bl[o&31](e,s),h=l}function On(e,n){e=e|0,n=n|0}function x1(e,n){return e=e|0,n=n|0,Vi(n)|0}function Vi(e){return e=e|0,e|0}function l0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],kg(e,r,s,0),h=o}function kg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Eu()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Ag(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Og(l,o)|0,o),h=s}function Eu(){var e=0,n=0;if(c[7696]|0||(A1(9484),Bt(33,9484,Q|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A1(9484)}return 9484}function Ag(e){return e=e|0,0}function Og(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Eu()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Cp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ig(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Cp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Ig(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Pg(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,k1(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Cp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Mg(e,_),rs(_),h=k;return}}function Pg(e){return e=e|0,357913941}function k1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Mg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function rs(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function A1(e){e=e|0,n0(e)}function na(e){e=e|0,Jr(e+24|0)}function Jr(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function n0(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Tp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Tp(){return 1212}function Fg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Lg(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],Rg(n,l,r,o),h=s}function Lg(e){return e=e|0,(t[(Eu()|0)+24>>2]|0)+(e*12|0)|0}function Rg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),On(l,r),l=x1(l,r)|0,Ml(d,o),d=Fl(d,o)|0,X1[s&15](e,l,d),h=_}function Ng(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Bg(e,r,s,1),h=o}function Bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=O1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=xp(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,ic(l,o)|0,o),h=s}function O1(){var e=0,n=0;if(c[7704]|0||(Ap(9520),Bt(34,9520,Q|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ap(9520)}return 9520}function xp(e){return e=e|0,0}function ic(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=O1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ra(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ra(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=kp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,ia(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ra(l,o,r),t[y>>2]=(t[y>>2]|0)+12,mo(e,_),Df(_),h=k;return}}function kp(e){return e=e|0,357913941}function ia(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function mo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Df(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ap(e){e=e|0,zg(e)}function Ug(e){e=e|0,qg(e+24|0)}function qg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function zg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Wg()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Wg(){return 1224}function Op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;return s=h,h=h+16|0,l=s+8|0,d=s,_=is(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],o=+jn(n,l,r),h=s,+o}function is(e){return e=e|0,(t[(O1()|0)+24>>2]|0)+(e*12|0)|0}function jn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,d=+Ol(+uD[o&7](e,s)),h=l,+d}function Ip(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Fo(e,r,s,1),h=o}function Fo(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oa()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Hg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,yr(l,o)|0,o),h=s}function oa(){var e=0,n=0;if(c[7712]|0||(Fp(9556),Bt(35,9556,Q|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fp(9556)}return 9556}function Hg(e){return e=e|0,0}function yr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oa()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Pp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Mp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Pp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Mp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=ua(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,bg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Pp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Gg(e,_),Vg(_),h=k;return}}function ua(e){return e=e|0,357913941}function bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Gg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Vg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Fp(e){e=e|0,Kg(e)}function Yg(e){e=e|0,$g(e+24|0)}function $g(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Kg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Xg()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Xg(){return 1232}function Jg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Qg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=+Zg(n,s),h=o,+r}function Qg(e){return e=e|0,(t[(oa()|0)+24>>2]|0)+(e*12|0)|0}function Zg(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +Ol(+oD[r&15](e))}function e_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t_(e,r,s,1),h=o}function t_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oc()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=n_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,I1(l,o)|0,o),h=s}function oc(){var e=0,n=0;if(c[7720]|0||(Rp(9592),Bt(36,9592,Q|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rp(9592)}return 9592}function n_(e){return e=e|0,0}function I1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oc()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(r_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function r_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=i_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,q0(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yi(e,_),o_(_),h=k;return}}function i_(e){return e=e|0,357913941}function q0(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yi(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function o_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Rp(e){e=e|0,s_(e)}function u_(e){e=e|0,Np(e+24|0)}function Np(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function s_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,l_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function l_(){return 1276}function f_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Bp(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=c_(n,o)|0,h=r,n|0}function Bp(e){return e=e|0,(t[(oc()|0)+24>>2]|0)+(e*12|0)|0}function c_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+16|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=jp(o)|0,h=s,o|0}function jp(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(Up()|0)|0,o?(s1(n,o),l1(r,n),qp(e,r),e=f1(n)|0):e=zp(e)|0,h=s,e|0}function Up(){var e=0;return c[7736]|0||(Wp(9640),Bt(25,9640,Q|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function qp(e,n){e=e|0,n=n|0,Ef(n,e,e+8|0)|0}function zp(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(16)|0,t[_>>2]=t[e>>2],t[_+4>>2]=t[e+4>>2],t[_+8>>2]=t[e+8>>2],t[_+12>>2]=t[e+12>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(e,l,s),t[o>>2]=e,h=r,n|0}function P1(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function a_(e){e=e|0,da(e),Ve(e)}function d_(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function p_(e){e=e|0,Ve(e)}function Ef(e,n,r){return e=e|0,n=n|0,r=r|0,n=h_(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function h_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return o=h,h=h+16|0,s=o,Zo(s),e=Oi(e)|0,r=m_(e,t[n>>2]|0,+L[r>>3])|0,eu(s),h=o,r|0}function m_(e,n,r){e=e|0,n=n|0,r=+r;var o=0;return o=ko(v_()|0)|0,n=jc(n)|0,dl(0,o|0,e|0,n|0,+ +Ko(r))|0}function v_(){var e=0;return c[7728]|0||(g_(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function g_(e){e=e|0,Ao(e,__()|0,2)}function __(){return 1264}function Wp(e){e=e|0,Ys(e)}function Hp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y_(e,r,s,1),h=o}function y_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=M1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=w_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,D_(l,o)|0,o),h=s}function M1(){var e=0,n=0;if(c[7744]|0||(Gp(9684),Bt(37,9684,Q|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gp(9684)}return 9684}function w_(e){return e=e|0,0}function D_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=M1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],bp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(E_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function bp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function E_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=S_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,C_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],bp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,T_(e,_),x_(_),h=k;return}}function S_(e){return e=e|0,357913941}function C_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function T_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function x_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Gp(e){e=e|0,O_(e)}function k_(e){e=e|0,A_(e+24|0)}function A_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function O_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,I_()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function I_(){return 1280}function P_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=M_(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=F_(n,s,r)|0,h=o,r|0}function M_(e){return e=e|0,(t[(M1()|0)+24>>2]|0)+(e*12|0)|0}function F_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return d=h,h=h+32|0,s=d,l=d+16|0,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(l,r),l=ns(l,r)|0,X1[o&15](s,e,l),l=jp(s)|0,h=d,l|0}function L_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],R_(e,r,s,1),h=o}function R_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=F1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=N_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B_(l,o)|0,o),h=s}function F1(){var e=0,n=0;if(c[7752]|0||(Kp(9720),Bt(38,9720,Q|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kp(9720)}return 9720}function N_(e){return e=e|0,0}function B_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=F1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Vp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(j_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Vp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function j_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=L1(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Yp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Vp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$p(e,_),U_(_),h=k;return}}function L1(e){return e=e|0,357913941}function Yp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $p(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function U_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Kp(e){e=e|0,z_(e)}function q_(e){e=e|0,R1(e+24|0)}function R1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,W_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W_(){return 1288}function H_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=$i(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=N1(n,o)|0,h=r,n|0}function $i(e){return e=e|0,(t[(F1()|0)+24>>2]|0)+(e*12|0)|0}function N1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Dd(dc[r&31](e)|0)|0}function b_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],G_(e,r,s,0),h=o}function G_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=B1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=V_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,j1(l,o)|0,o),h=s}function B1(){var e=0,n=0;if(c[7760]|0||(q1(9756),Bt(39,9756,Q|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));q1(9756)}return 9756}function V_(e){return e=e|0,0}function j1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=B1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Xp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(U1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Xp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function U1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Y_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,$_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Xp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,K_(e,_),X_(_),h=k;return}}function Y_(e){return e=e|0,357913941}function $_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function K_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function X_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function q1(e){e=e|0,Z_(e)}function J_(e){e=e|0,Q_(e+24|0)}function Q_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,z1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function z1(){return 1292}function W1(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=e4(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t4(n,s,r),h=o}function e4(e){return e=e|0,(t[(B1()|0)+24>>2]|0)+(e*12|0)|0}function t4(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),wu(s,r),r=+Du(s,r),nD[o&31](e,r),h=l}function n4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r4(e,r,s,0),h=o}function r4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=H1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=i4(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,o4(l,o)|0,o),h=s}function H1(){var e=0,n=0;if(c[7768]|0||(Qp(9792),Bt(40,9792,Q|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Qp(9792)}return 9792}function i4(e){return e=e|0,0}function o4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=H1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Jp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(u4(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Jp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function u4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=s4(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,l4(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Jp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,f4(e,_),c4(_),h=k;return}}function s4(e){return e=e|0,357913941}function l4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function f4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function c4(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Qp(e){e=e|0,p4(e)}function a4(e){e=e|0,d4(e+24|0)}function d4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function p4(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,h4()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function h4(){return 1300}function m4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=v4(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],g4(n,l,r,o),h=s}function v4(e){return e=e|0,(t[(H1()|0)+24>>2]|0)+(e*12|0)|0}function g4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,wu(d,o),o=+Du(d,o),cD[s&15](e,l,o),h=_}function a(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],p(e,r,s,0),h=o}function p(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=I(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B(l,o)|0,o),h=s}function E(){var e=0,n=0;if(c[7776]|0||(nt(9828),Bt(41,9828,Q|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));nt(9828)}return 9828}function I(e){return e=e|0,0}function B(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],G(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(te(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function G(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function te(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=se(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ee(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],G(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$e(e,_),Ke(_),h=k;return}}function se(e){return e=e|0,357913941}function Ee(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $e(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ke(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function nt(e){e=e|0,an(e)}function Ct(e){e=e|0,Gt(e+24|0)}function Gt(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function an(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,qn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qn(){return 1312}function dn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Yn(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],er(n,s,r),h=o}function Yn(e){return e=e|0,(t[(E()|0)+24>>2]|0)+(e*12|0)|0}function er(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,Bl[o&31](e,s),h=l}function vo(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Pi(e,r,s,0),h=o}function Pi(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Mi()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=f0(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Jo(l,o)|0,o),h=s}function Mi(){var e=0,n=0;if(c[7784]|0||(kw(9864),Bt(42,9864,Q|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));kw(9864)}return 9864}function f0(e){return e=e|0,0}function Jo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Mi()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Su(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Zp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Su(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Zp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=v9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,g9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Su(l,o,r),t[y>>2]=(t[y>>2]|0)+12,_9(e,_),y9(_),h=k;return}}function v9(e){return e=e|0,357913941}function g9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function _9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function y9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function kw(e){e=e|0,E9(e)}function w9(e){e=e|0,D9(e+24|0)}function D9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function E9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,S9()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function S9(){return 1320}function C9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=T9(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],x9(n,s,r),h=o}function T9(e){return e=e|0,(t[(Mi()|0)+24>>2]|0)+(e*12|0)|0}function x9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),k9(s,r),s=A9(s,r)|0,Bl[o&31](e,s),h=l}function k9(e,n){e=e|0,n=n|0}function A9(e,n){return e=e|0,n=n|0,O9(n)|0}function O9(e){return e=e|0,e|0}function I9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],P9(e,r,s,0),h=o}function P9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=_4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=M9(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,F9(l,o)|0,o),h=s}function _4(){var e=0,n=0;if(c[7792]|0||(Ow(9900),Bt(43,9900,Q|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ow(9900)}return 9900}function M9(e){return e=e|0,0}function F9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=_4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Aw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(L9(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Aw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function L9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=R9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,N9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Aw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,B9(e,_),j9(_),h=k;return}}function R9(e){return e=e|0,357913941}function N9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function B9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function j9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ow(e){e=e|0,z9(e)}function U9(e){e=e|0,q9(e+24|0)}function q9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,22,n,W9()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W9(){return 1344}function H9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;r=h,h=h+16|0,o=r+8|0,s=r,l=b9(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],G9(n,o),h=r}function b9(e){return e=e|0,(t[(_4()|0)+24>>2]|0)+(e*12|0)|0}function G9(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Nl[r&127](e)}function V9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=y4()|0,e=Y9(r)|0,ur(l,n,s,e,$9(r,o)|0,o)}function y4(){var e=0,n=0;if(c[7800]|0||(Pw(9936),Bt(44,9936,Q|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Pw(9936)}return 9936}function Y9(e){return e=e|0,e|0}function $9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=y4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Iw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(K9(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Iw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function K9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=X9(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,J9(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Iw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Q9(e,s),Z9(s),h=_;return}}function X9(e){return e=e|0,536870911}function J9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Q9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Z9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Pw(e){e=e|0,nx(e)}function ex(e){e=e|0,tx(e+24|0)}function tx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function nx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,23,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rx(e,n){e=e|0,n=n|0,ox(t[(ix(e)|0)>>2]|0,n)}function ix(e){return e=e|0,(t[(y4()|0)+24>>2]|0)+(e<<3)|0}function ox(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,On(o,n),n=x1(o,n)|0,Nl[e&127](n),h=r}function ux(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=w4()|0,e=sx(r)|0,ur(l,n,s,e,lx(r,o)|0,o)}function w4(){var e=0,n=0;if(c[7808]|0||(Fw(9972),Bt(45,9972,Q|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fw(9972)}return 9972}function sx(e){return e=e|0,e|0}function lx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=w4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Mw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Mw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=cx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,ax(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Mw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,dx(e,s),px(s),h=_;return}}function cx(e){return e=e|0,536870911}function ax(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function dx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function px(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Fw(e){e=e|0,vx(e)}function hx(e){e=e|0,mx(e+24|0)}function mx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function vx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,9,n,gx()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gx(){return 1348}function _x(e,n){return e=e|0,n=n|0,wx(t[(yx(e)|0)>>2]|0,n)|0}function yx(e){return e=e|0,(t[(w4()|0)+24>>2]|0)+(e<<3)|0}function wx(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,n=Xc(dc[e&31](n)|0)|0,h=r,n|0}function Lw(e,n){e=e|0,n=n|0}function Rw(e,n){return e=e|0,n=n|0,Dx(n)|0}function Dx(e){return e=e|0,e|0}function Ex(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=D4()|0,e=Sx(r)|0,ur(l,n,s,e,Cx(r,o)|0,o)}function D4(){var e=0,n=0;if(c[7816]|0||(Bw(10008),Bt(46,10008,Q|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Bw(10008)}return 10008}function Sx(e){return e=e|0,e|0}function Cx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=D4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Nw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Tx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Nw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Tx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=xx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,kx(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Nw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Ax(e,s),Ox(s),h=_;return}}function xx(e){return e=e|0,536870911}function kx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Ax(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ox(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Bw(e){e=e|0,Mx(e)}function Ix(e){e=e|0,Px(e+24|0)}function Px(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Mx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,15,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Fx(e){return e=e|0,Rx(t[(Lx(e)|0)>>2]|0)|0}function Lx(e){return e=e|0,(t[(D4()|0)+24>>2]|0)+(e<<3)|0}function Rx(e){return e=e|0,Xc(ph[e&7]()|0)|0}function Nx(){var e=0;return c[7832]|0||(bx(10052),Bt(25,10052,Q|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function Bx(e,n){e=e|0,n=n|0,t[e>>2]=jx()|0,t[e+4>>2]=Ux()|0,t[e+12>>2]=n,t[e+8>>2]=qx()|0,t[e+32>>2]=2}function jx(){return 11709}function Ux(){return 1188}function qx(){return eh()|0}function zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Wx(r),Ve(r)):n|0&&(mu(n),Ve(n))}function Sf(e,n){return e=e|0,n=n|0,n&e|0}function Wx(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function eh(){var e=0;return c[7824]|0||(t[2511]=Hx()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function Hx(){return 0}function bx(e){e=e|0,Ys(e)}function Gx(e){e=e|0;var n=0,r=0,o=0,s=0,l=0;n=h,h=h+32|0,r=n+24|0,l=n+16|0,s=n+8|0,o=n,Vx(e,4827),Yx(e,4834,3)|0,$x(e,3682,47)|0,t[l>>2]=9,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],Kx(e,4841,r)|0,t[s>>2]=1,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Xx(e,4871,r)|0,t[o>>2]=10,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],Jx(e,4891,r)|0,h=n}function Vx(e,n){e=e|0,n=n|0;var r=0;r=Ok()|0,t[e>>2]=r,Ik(r,n),Cf(t[e>>2]|0)}function Yx(e,n,r){return e=e|0,n=n|0,r=r|0,pk(e,Zn(n)|0,r,0),e|0}function $x(e,n,r){return e=e|0,n=n|0,r=r|0,Q7(e,Zn(n)|0,r,0),e|0}function Kx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],F7(e,n,s),h=o,e|0}function Xx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],h7(e,n,s),h=o,e|0}function Jx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qx(e,n,s),h=o,e|0}function Qx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Zx(e,r,s,1),h=o}function Zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=e7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,t7(l,o)|0,o),h=s}function E4(){var e=0,n=0;if(c[7840]|0||(Uw(10100),Bt(48,10100,Q|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uw(10100)}return 10100}function e7(e){return e=e|0,0}function t7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],jw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(n7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function jw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function n7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=r7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,i7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],jw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,o7(e,_),u7(_),h=k;return}}function r7(e){return e=e|0,357913941}function i7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function o7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function u7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Uw(e){e=e|0,f7(e)}function s7(e){e=e|0,l7(e+24|0)}function l7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function f7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,c7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function c7(){return 1364}function a7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=d7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=p7(n,s,r)|0,h=o,r|0}function d7(e){return e=e|0,(t[(E4()|0)+24>>2]|0)+(e*12|0)|0}function p7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,s=ip(J4[o&15](e,s)|0)|0,h=l,s|0}function h7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],m7(e,r,s,0),h=o}function m7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=S4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=v7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,g7(l,o)|0,o),h=s}function S4(){var e=0,n=0;if(c[7848]|0||(zw(10136),Bt(49,10136,Q|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));zw(10136)}return 10136}function v7(e){return e=e|0,0}function g7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=S4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],qw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(_7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function qw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function _7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=y7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,w7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],qw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,D7(e,_),E7(_),h=k;return}}function y7(e){return e=e|0,357913941}function w7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function D7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function E7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function zw(e){e=e|0,T7(e)}function S7(e){e=e|0,C7(e+24|0)}function C7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function T7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,9,n,x7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function x7(){return 1372}function k7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=A7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],O7(n,s,r),h=o}function A7(e){return e=e|0,(t[(S4()|0)+24>>2]|0)+(e*12|0)|0}function O7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=tt;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),I7(s,r),d=w(P7(s,r)),tD[o&1](e,d),h=l}function I7(e,n){e=e|0,n=+n}function P7(e,n){return e=e|0,n=+n,w(M7(n))}function M7(e){return e=+e,w(e)}function F7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L7(e,r,s,0),h=o}function L7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=C4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=R7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,N7(l,o)|0,o),h=s}function C4(){var e=0,n=0;if(c[7856]|0||(Hw(10172),Bt(50,10172,Q|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hw(10172)}return 10172}function R7(e){return e=e|0,0}function N7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=C4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ww(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(B7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ww(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function B7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=j7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,U7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ww(l,o,r),t[y>>2]=(t[y>>2]|0)+12,q7(e,_),z7(_),h=k;return}}function j7(e){return e=e|0,357913941}function U7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function q7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function z7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Hw(e){e=e|0,b7(e)}function W7(e){e=e|0,H7(e+24|0)}function H7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function b7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,G7()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function G7(){return 1380}function V7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Y7(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],$7(n,l,r,o),h=s}function Y7(e){return e=e|0,(t[(C4()|0)+24>>2]|0)+(e*12|0)|0}function $7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,K7(d,o),d=X7(d,o)|0,X1[s&15](e,l,d),h=_}function K7(e,n){e=e|0,n=n|0}function X7(e,n){return e=e|0,n=n|0,J7(n)|0}function J7(e){return e=e|0,(e|0)!=0|0}function Q7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=T4()|0,e=Z7(r)|0,ur(l,n,s,e,ek(r,o)|0,o)}function T4(){var e=0,n=0;if(c[7864]|0||(Gw(10208),Bt(51,10208,Q|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gw(10208)}return 10208}function Z7(e){return e=e|0,e|0}function ek(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=T4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(bw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function bw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rk(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,bw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,ik(e,s),ok(s),h=_;return}}function nk(e){return e=e|0,536870911}function rk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function ik(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function ok(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Gw(e){e=e|0,lk(e)}function uk(e){e=e|0,sk(e+24|0)}function sk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,24,n,fk()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fk(){return 1392}function ck(e,n){e=e|0,n=n|0,dk(t[(ak(e)|0)>>2]|0,n)}function ak(e){return e=e|0,(t[(T4()|0)+24>>2]|0)+(e<<3)|0}function dk(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,Nl[e&127](n),h=r}function pk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=x4()|0,e=hk(r)|0,ur(l,n,s,e,mk(r,o)|0,o)}function x4(){var e=0,n=0;if(c[7872]|0||(Yw(10244),Bt(52,10244,Q|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Yw(10244)}return 10244}function hk(e){return e=e|0,e|0}function mk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=x4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Vw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(vk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Vw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function vk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=gk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,_k(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Vw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,yk(e,s),wk(s),h=_;return}}function gk(e){return e=e|0,536870911}function _k(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function yk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function wk(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Yw(e){e=e|0,Sk(e)}function Dk(e){e=e|0,Ek(e+24|0)}function Ek(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Sk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,16,n,Ck()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ck(){return 1400}function Tk(e){return e=e|0,kk(t[(xk(e)|0)>>2]|0)|0}function xk(e){return e=e|0,(t[(x4()|0)+24>>2]|0)+(e<<3)|0}function kk(e){return e=e|0,Ak(ph[e&7]()|0)|0}function Ak(e){return e=e|0,e|0}function Ok(){var e=0;return c[7880]|0||(Nk(10280),Bt(25,10280,Q|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function Ik(e,n){e=e|0,n=n|0,t[e>>2]=Pk()|0,t[e+4>>2]=Mk()|0,t[e+12>>2]=n,t[e+8>>2]=Fk()|0,t[e+32>>2]=4}function Pk(){return 11711}function Mk(){return 1356}function Fk(){return eh()|0}function Lk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Rk(r),Ve(r)):n|0&&(Gi(n),Ve(n))}function Rk(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function Nk(e){e=e|0,Ys(e)}function Bk(e){e=e|0,jk(e,4920),Uk(e)|0,qk(e)|0}function jk(e,n){e=e|0,n=n|0;var r=0;r=Up()|0,t[e>>2]=r,sA(r,n),Cf(t[e>>2]|0)}function Uk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,Jk()|0),e|0}function qk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,zk()|0),e|0}function zk(){var e=0;return c[7888]|0||($w(10328),Bt(53,10328,Q|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),Dn(10328)|0||$w(10328),10328}function uc(e,n){e=e|0,n=n|0,ur(e,0,n,0,0,0)}function $w(e){e=e|0,bk(e),sc(e,10)}function Wk(e){e=e|0,Hk(e+24|0)}function Hk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function bk(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,$k()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Gk(e,n,r){e=e|0,n=n|0,r=+r,Vk(e,n,r)}function sc(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function Vk(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,l=o+8|0,_=o+13|0,s=o,d=o+12|0,ts(_,n),t[l>>2]=ns(_,n)|0,wu(d,r),L[s>>3]=+Du(d,r),Yk(e,l,s),h=o}function Yk(e,n,r){e=e|0,n=n|0,r=r|0,M(e+8|0,t[n>>2]|0,+L[r>>3]),c[e+24>>0]=1}function $k(){return 1404}function Kk(e,n){return e=e|0,n=+n,Xk(e,n)|0}function Xk(e,n){e=e|0,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,l=o+4|0,d=o+8|0,_=o,s=Qo(8)|0,r=s,y=Tt(16)|0,ts(l,e),e=ns(l,e)|0,wu(d,n),M(y,e,+Du(d,n)),d=r+4|0,t[d>>2]=y,e=Tt(8)|0,d=t[d>>2]|0,t[_>>2]=0,t[l>>2]=t[_>>2],P1(e,d,l),t[s>>2]=e,h=o,r|0}function Jk(){var e=0;return c[7896]|0||(Kw(10364),Bt(54,10364,Q|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),Dn(10364)|0||Kw(10364),10364}function Kw(e){e=e|0,eA(e),sc(e,55)}function Qk(e){e=e|0,Zk(e+24|0)}function Zk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function eA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,4,n,iA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function tA(e){e=e|0,nA(e)}function nA(e){e=e|0,rA(e)}function rA(e){e=e|0,Xw(e+8|0),c[e+24>>0]=1}function Xw(e){e=e|0,t[e>>2]=0,L[e+8>>3]=0}function iA(){return 1424}function oA(){return uA()|0}function uA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,Xw(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(o,l,s),t[r>>2]=o,h=n,e|0}function sA(e,n){e=e|0,n=n|0,t[e>>2]=lA()|0,t[e+4>>2]=fA()|0,t[e+12>>2]=n,t[e+8>>2]=cA()|0,t[e+32>>2]=5}function lA(){return 11710}function fA(){return 1416}function cA(){return th()|0}function aA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dA(r),Ve(r)):n|0&&Ve(n)}function dA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function th(){var e=0;return c[7904]|0||(t[2600]=pA()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function pA(){return t[357]|0}function hA(e){e=e|0,mA(e,4926),vA(e)|0}function mA(e,n){e=e|0,n=n|0;var r=0;r=u1()|0,t[e>>2]=r,kA(r,n),Cf(t[e>>2]|0)}function vA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,gA()|0),e|0}function gA(){var e=0;return c[7912]|0||(Jw(10412),Bt(56,10412,Q|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),Dn(10412)|0||Jw(10412),10412}function Jw(e){e=e|0,wA(e),sc(e,57)}function _A(e){e=e|0,yA(e+24|0)}function yA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function wA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,5,n,CA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function DA(e){e=e|0,EA(e)}function EA(e){e=e|0,SA(e)}function SA(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));c[e+56>>0]=1}function CA(){return 1432}function TA(){return xA()|0}function xA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0;d=h,h=h+16|0,e=d+4|0,n=d,r=Qo(8)|0,o=r,s=Tt(48)|0,l=s,_=l+48|0;do t[l>>2]=0,l=l+4|0;while((l|0)<(_|0));return l=o+4|0,t[l>>2]=s,_=Tt(8)|0,l=t[l>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Wd(_,l,e),t[r>>2]=_,h=d,o|0}function kA(e,n){e=e|0,n=n|0,t[e>>2]=AA()|0,t[e+4>>2]=OA()|0,t[e+12>>2]=n,t[e+8>>2]=IA()|0,t[e+32>>2]=6}function AA(){return 11704}function OA(){return 1436}function IA(){return th()|0}function PA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(MA(r),Ve(r)):n|0&&Ve(n)}function MA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function FA(e){e=e|0,LA(e,4933),RA(e)|0,NA(e)|0}function LA(e,n){e=e|0,n=n|0;var r=0;r=uO()|0,t[e>>2]=r,sO(r,n),Cf(t[e>>2]|0)}function RA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,XA()|0),e|0}function NA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,BA()|0),e|0}function BA(){var e=0;return c[7920]|0||(Qw(10452),Bt(58,10452,Q|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),Dn(10452)|0||Qw(10452),10452}function Qw(e){e=e|0,qA(e),sc(e,1)}function jA(e){e=e|0,UA(e+24|0)}function UA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function qA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,bA()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zA(e,n,r){e=e|0,n=+n,r=+r,WA(e,n,r)}function WA(e,n,r){e=e|0,n=+n,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,l=o+8|0,_=o+17|0,s=o,d=o+16|0,wu(_,n),L[l>>3]=+Du(_,n),wu(d,r),L[s>>3]=+Du(d,r),HA(e,l,s),h=o}function HA(e,n,r){e=e|0,n=n|0,r=r|0,Zw(e+8|0,+L[n>>3],+L[r>>3]),c[e+24>>0]=1}function Zw(e,n,r){e=e|0,n=+n,r=+r,L[e>>3]=n,L[e+8>>3]=r}function bA(){return 1472}function GA(e,n){return e=+e,n=+n,VA(e,n)|0}function VA(e,n){e=+e,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,d=o+4|0,_=o+8|0,y=o,s=Qo(8)|0,r=s,l=Tt(16)|0,wu(d,e),e=+Du(d,e),wu(_,n),Zw(l,e,+Du(_,n)),_=r+4|0,t[_>>2]=l,l=Tt(8)|0,_=t[_>>2]|0,t[y>>2]=0,t[d>>2]=t[y>>2],e8(l,_,d),t[s>>2]=l,h=o,r|0}function e8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function YA(e){e=e|0,da(e),Ve(e)}function $A(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function KA(e){e=e|0,Ve(e)}function XA(){var e=0;return c[7928]|0||(t8(10488),Bt(59,10488,Q|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),Dn(10488)|0||t8(10488),10488}function t8(e){e=e|0,ZA(e),sc(e,60)}function JA(e){e=e|0,QA(e+24|0)}function QA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function ZA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,6,n,rO()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function eO(e){e=e|0,tO(e)}function tO(e){e=e|0,nO(e)}function nO(e){e=e|0,n8(e+8|0),c[e+24>>0]=1}function n8(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function rO(){return 1492}function iO(){return oO()|0}function oO(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,n8(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],e8(o,l,s),t[r>>2]=o,h=n,e|0}function uO(){var e=0;return c[7936]|0||(pO(10524),Bt(25,10524,Q|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function sO(e,n){e=e|0,n=n|0,t[e>>2]=lO()|0,t[e+4>>2]=fO()|0,t[e+12>>2]=n,t[e+8>>2]=cO()|0,t[e+32>>2]=7}function lO(){return 11700}function fO(){return 1484}function cO(){return th()|0}function aO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dO(r),Ve(r)):n|0&&Ve(n)}function dO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function pO(e){e=e|0,Ys(e)}function hO(e,n,r){e=e|0,n=n|0,r=r|0,e=Zn(n)|0,n=mO(r)|0,r=vO(r,0)|0,VO(e,n,r,k4()|0,0)}function mO(e){return e=e|0,e|0}function vO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=k4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(i8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(SO(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k4(){var e=0,n=0;if(c[7944]|0||(r8(10568),Bt(61,10568,Q|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));r8(10568)}return 10568}function r8(e){e=e|0,yO(e)}function gO(e){e=e|0,_O(e+24|0)}function _O(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yO(e){e=e|0;var n=0;n=An()|0,Nn(e,1,17,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wO(e){return e=e|0,EO(t[(DO(e)|0)>>2]|0)|0}function DO(e){return e=e|0,(t[(k4()|0)+24>>2]|0)+(e<<3)|0}function EO(e){return e=e|0,ea(ph[e&7]()|0)|0}function i8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function SO(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=CO(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,TO(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,i8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,xO(e,s),kO(s),h=_;return}}function CO(e){return e=e|0,536870911}function TO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function xO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kO(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function AO(){OO()}function OO(){IO(10604)}function IO(e){e=e|0,PO(e,4955)}function PO(e,n){e=e|0,n=n|0;var r=0;r=MO()|0,t[e>>2]=r,FO(r,n),Cf(t[e>>2]|0)}function MO(){var e=0;return c[7952]|0||(WO(10612),Bt(25,10612,Q|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function FO(e,n){e=e|0,n=n|0,t[e>>2]=BO()|0,t[e+4>>2]=jO()|0,t[e+12>>2]=n,t[e+8>>2]=UO()|0,t[e+32>>2]=8}function Cf(e){e=e|0;var n=0,r=0;n=h,h=h+16|0,r=n,sa()|0,t[r>>2]=e,LO(10608,r),h=n}function sa(){return c[11714]|0||(t[2652]=0,Bt(62,10608,Q|0)|0,c[11714]=1),10608}function LO(e,n){e=e|0,n=n|0;var r=0;r=Tt(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function RO(e){e=e|0,NO(e)}function NO(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function BO(){return 11715}function jO(){return 1496}function UO(){return eh()|0}function qO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(zO(r),Ve(r)):n|0&&Ve(n)}function zO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function WO(e){e=e|0,Ys(e)}function HO(e,n){e=e|0,n=n|0;var r=0,o=0;sa()|0,r=t[2652]|0;e:do if(r|0){for(;o=t[r+4>>2]|0,!(o|0?(U8(A4(o)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;bO(o,n)}while(0)}function A4(e){return e=e|0,t[e+12>>2]|0}function bO(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(Ju(r),Ve(r)),r=Tt(4)|0,ba(r,n),t[e>>2]=r}function O4(){return c[11716]|0||(t[2664]=0,Bt(63,10656,Q|0)|0,c[11716]=1),10656}function o8(){var e=0;return c[11717]|0?e=t[2665]|0:(GO(),t[2665]=1504,c[11717]=1,e=1504),e|0}function GO(){c[11740]|0||(c[11718]=Lt(Lt(8,0)|0,0)|0,c[11719]=Lt(Lt(0,0)|0,0)|0,c[11720]=Lt(Lt(0,16)|0,0)|0,c[11721]=Lt(Lt(8,0)|0,0)|0,c[11722]=Lt(Lt(0,0)|0,0)|0,c[11723]=Lt(Lt(8,0)|0,0)|0,c[11724]=Lt(Lt(0,0)|0,0)|0,c[11725]=Lt(Lt(8,0)|0,0)|0,c[11726]=Lt(Lt(0,0)|0,0)|0,c[11727]=Lt(Lt(8,0)|0,0)|0,c[11728]=Lt(Lt(0,0)|0,0)|0,c[11729]=Lt(Lt(0,0)|0,32)|0,c[11730]=Lt(Lt(0,0)|0,32)|0,c[11740]=1)}function u8(){return 1572}function VO(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0;l=h,h=h+32|0,T=l+16|0,k=l+12|0,y=l+8|0,_=l+4|0,d=l,t[T>>2]=e,t[k>>2]=n,t[y>>2]=r,t[_>>2]=o,t[d>>2]=s,O4()|0,YO(10656,T,k,y,_,d),h=l}function YO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0;d=Tt(24)|0,t1(d+4|0,t[n>>2]|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0),t[d>>2]=t[e>>2],t[e>>2]=d}function s8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0;if(qe=h,h=h+32|0,le=qe+20|0,ie=qe+8|0,Pe=qe+4|0,ke=qe,n=t[n>>2]|0,n|0){we=le+4|0,y=le+8|0,k=ie+4|0,T=ie+8|0,P=ie+8|0,q=le+8|0;do{if(d=n+4|0,_=I4(d)|0,_|0){if(s=b1(_)|0,t[le>>2]=0,t[we>>2]=0,t[y>>2]=0,o=(G1(_)|0)+1|0,$O(le,o),o|0)for(;o=o+-1|0,os(ie,t[s>>2]|0),l=t[we>>2]|0,l>>>0<(t[q>>2]|0)>>>0?(t[l>>2]=t[ie>>2],t[we>>2]=(t[we>>2]|0)+4):P4(le,ie),o;)s=s+4|0;o=V1(_)|0,t[ie>>2]=0,t[k>>2]=0,t[T>>2]=0;e:do if(t[o>>2]|0)for(s=0,l=0;;){if((s|0)==(l|0)?KO(ie,o):(t[s>>2]=t[o>>2],t[k>>2]=(t[k>>2]|0)+4),o=o+4|0,!(t[o>>2]|0))break e;s=t[k>>2]|0,l=t[P>>2]|0}while(0);t[Pe>>2]=nh(d)|0,t[ke>>2]=Dn(_)|0,XO(r,e,Pe,ke,le,ie),M4(ie),Rl(le)}n=t[n>>2]|0}while((n|0)!=0)}h=qe}function I4(e){return e=e|0,t[e+12>>2]|0}function b1(e){return e=e|0,t[e+12>>2]|0}function G1(e){return e=e|0,t[e+16>>2]|0}function $O(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=t[e>>2]|0,(t[e+8>>2]|0)-o>>2>>>0>>0&&(m8(r,n,(t[e+4>>2]|0)-o>>2,e+8|0),v8(e,r),g8(r)),h=s}function P4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=h8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,m8(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,v8(e,r),g8(r),h=d;return}}function V1(e){return e=e|0,t[e+8>>2]|0}function KO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=p8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,mI(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,vI(e,r),gI(r),h=d;return}}function nh(e){return e=e|0,t[e>>2]|0}function XO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JO(e,n,r,o,s,l)}function M4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function Rl(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function JO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+48|0,T=d+40|0,_=d+32|0,P=d+24|0,y=d+12|0,k=d,Zo(_),e=Oi(e)|0,t[P>>2]=t[n>>2],r=t[r>>2]|0,o=t[o>>2]|0,F4(y,s),QO(k,l),t[T>>2]=t[P>>2],ZO(e,T,r,o,y,k),M4(k),Rl(y),eu(_),h=d}function F4(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(pI(e,o),hI(e,t[n>>2]|0,t[r>>2]|0,o))}function QO(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(aI(e,o),dI(e,t[n>>2]|0,t[r>>2]|0,o))}function ZO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,T=d+28|0,P=d+24|0,_=d+12|0,y=d,k=ko(eI()|0)|0,t[P>>2]=t[n>>2],t[T>>2]=t[P>>2],n=lc(T)|0,r=l8(r)|0,o=L4(o)|0,t[_>>2]=t[s>>2],T=s+4|0,t[_+4>>2]=t[T>>2],P=s+8|0,t[_+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[s>>2]=0,s=R4(_)|0,t[y>>2]=t[l>>2],T=l+4|0,t[y+4>>2]=t[T>>2],P=l+8|0,t[y+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[l>>2]=0,qo(0,k|0,e|0,n|0,r|0,o|0,s|0,tI(y)|0)|0,M4(y),Rl(_),h=d}function eI(){var e=0;return c[7968]|0||(fI(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function lc(e){return e=e|0,c8(e)|0}function l8(e){return e=e|0,f8(e)|0}function L4(e){return e=e|0,ea(e)|0}function R4(e){return e=e|0,rI(e)|0}function tI(e){return e=e|0,nI(e)|0}function nI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=f8(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function f8(e){return e=e|0,e|0}function rI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=c8((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function c8(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(a8()|0)|0,o?(s1(n,o),l1(r,n),UF(e,r),e=f1(n)|0):e=iI(e)|0,h=s,e|0}function a8(){var e=0;return c[7960]|0||(lI(10664),Bt(25,10664,Q|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function iI(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,t[_>>2]=t[e>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function d8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function oI(e){e=e|0,da(e),Ve(e)}function uI(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function sI(e){e=e|0,Ve(e)}function lI(e){e=e|0,Ys(e)}function fI(e){e=e|0,Ao(e,cI()|0,5)}function cI(){return 1676}function aI(e,n){e=e|0,n=n|0;var r=0;if((p8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function dI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function p8(e){return e=e|0,1073741823}function pI(e,n){e=e|0,n=n|0;var r=0;if((h8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function hI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function h8(e){return e=e|0,1073741823}function mI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function vI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function gI(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function m8(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function v8(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function g8(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function _I(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(ie=h,h=h+32|0,T=ie+20|0,P=ie+12|0,k=ie+16|0,q=ie+4|0,we=ie,le=ie+8|0,_=o8()|0,l=t[_>>2]|0,d=t[l>>2]|0,d|0)for(y=t[_+8>>2]|0,_=t[_+4>>2]|0;os(T,d),yI(e,T,_,y),l=l+4|0,d=t[l>>2]|0,d;)y=y+1|0,_=_+1|0;if(l=u8()|0,d=t[l>>2]|0,d|0)do os(T,d),t[P>>2]=t[l+4>>2],wI(n,T,P),l=l+8|0,d=t[l>>2]|0;while((d|0)!=0);if(l=t[(sa()|0)>>2]|0,l|0)do n=t[l+4>>2]|0,os(T,t[(la(n)|0)>>2]|0),t[P>>2]=A4(n)|0,DI(r,T,P),l=t[l>>2]|0;while((l|0)!=0);if(os(k,0),l=O4()|0,t[T>>2]=t[k>>2],s8(T,l,s),l=t[(sa()|0)>>2]|0,l|0){e=T+4|0,n=T+8|0,r=T+8|0;do{if(y=t[l+4>>2]|0,os(P,t[(la(y)|0)>>2]|0),EI(q,_8(y)|0),d=t[q>>2]|0,d|0){t[T>>2]=0,t[e>>2]=0,t[n>>2]=0;do os(we,t[(la(t[d+4>>2]|0)|0)>>2]|0),_=t[e>>2]|0,_>>>0<(t[r>>2]|0)>>>0?(t[_>>2]=t[we>>2],t[e>>2]=(t[e>>2]|0)+4):P4(T,we),d=t[d>>2]|0;while((d|0)!=0);SI(o,P,T),Rl(T)}t[le>>2]=t[P>>2],k=y8(y)|0,t[T>>2]=t[le>>2],s8(T,k,s),bd(q),l=t[l>>2]|0}while((l|0)!=0)}h=ie}function yI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,RI(e,n,r,o)}function wI(e,n,r){e=e|0,n=n|0,r=r|0,LI(e,n,r)}function la(e){return e=e|0,e|0}function DI(e,n,r){e=e|0,n=n|0,r=r|0,II(e,n,r)}function _8(e){return e=e|0,e+16|0}function EI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(l=h,h=h+16|0,s=l+8|0,r=l,t[e>>2]=0,o=t[n>>2]|0,t[s>>2]=o,t[r>>2]=e,r=OI(r)|0,o|0){if(o=Tt(12)|0,d=(w8(s)|0)+4|0,e=t[d+4>>2]|0,n=o+4|0,t[n>>2]=t[d>>2],t[n+4>>2]=e,n=t[t[s>>2]>>2]|0,t[s>>2]=n,!n)e=o;else for(n=o;e=Tt(12)|0,y=(w8(s)|0)+4|0,_=t[y+4>>2]|0,d=e+4|0,t[d>>2]=t[y>>2],t[d+4>>2]=_,t[n>>2]=e,d=t[t[s>>2]>>2]|0,t[s>>2]=d,d;)n=e;t[e>>2]=t[r>>2],t[r>>2]=o}h=l}function SI(e,n,r){e=e|0,n=n|0,r=r|0,CI(e,n,r)}function y8(e){return e=e|0,e+24|0}function CI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+24|0,s=o+16|0,_=o+12|0,l=o,Zo(s),e=Oi(e)|0,t[_>>2]=t[n>>2],F4(l,r),t[d>>2]=t[_>>2],TI(e,d,l),Rl(l),eu(s),h=o}function TI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+16|0,_=o+12|0,s=o,l=ko(xI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,t[s>>2]=t[r>>2],d=r+4|0,t[s+4>>2]=t[d>>2],_=r+8|0,t[s+8>>2]=t[_>>2],t[_>>2]=0,t[d>>2]=0,t[r>>2]=0,Ts(0,l|0,e|0,n|0,R4(s)|0)|0,Rl(s),h=o}function xI(){var e=0;return c[7976]|0||(kI(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function kI(e){e=e|0,Ao(e,AI()|0,2)}function AI(){return 1732}function OI(e){return e=e|0,t[e>>2]|0}function w8(e){return e=e|0,t[e>>2]|0}function II(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function D8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+4|0,d=o,s=ko(PI()|0)|0,t[d>>2]=t[n>>2],t[l>>2]=t[d>>2],n=lc(l)|0,Ts(0,s|0,e|0,n|0,l8(r)|0)|0,h=o}function PI(){var e=0;return c[7984]|0||(MI(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function MI(e){e=e|0,Ao(e,FI()|0,2)}function FI(){return 1744}function LI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function RI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),e=Oi(e)|0,t[_>>2]=t[n>>2],r=c[r>>0]|0,o=c[o>>0]|0,t[d>>2]=t[_>>2],NI(e,d,r,o),eu(l),h=s}function NI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,d=s+4|0,_=s,l=ko(BI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,r=fa(r)|0,Bu(0,l|0,e|0,n|0,r|0,fa(o)|0)|0,h=s}function BI(){var e=0;return c[7992]|0||(UI(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function fa(e){return e=e|0,jI(e)|0}function jI(e){return e=e|0,e&255|0}function UI(e){e=e|0,Ao(e,qI()|0,3)}function qI(){return 1756}function zI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;switch(q=h,h=h+32|0,_=q+8|0,y=q+4|0,k=q+20|0,T=q,_1(e,0),o=jF(n)|0,t[_>>2]=0,P=_+4|0,t[P>>2]=0,t[_+8>>2]=0,o<<24>>24){case 0:{c[k>>0]=0,WI(y,r,k),rh(e,y)|0,ei(y);break}case 8:{P=z4(n)|0,c[k>>0]=8,os(T,t[P+4>>2]|0),HI(y,r,k,T,P+8|0),rh(e,y)|0,ei(y);break}case 9:{if(l=z4(n)|0,n=t[l+4>>2]|0,n|0)for(d=_+8|0,s=l+12|0;n=n+-1|0,os(y,t[s>>2]|0),o=t[P>>2]|0,o>>>0<(t[d>>2]|0)>>>0?(t[o>>2]=t[y>>2],t[P>>2]=(t[P>>2]|0)+4):P4(_,y),n;)s=s+4|0;c[k>>0]=9,os(T,t[l+8>>2]|0),bI(y,r,k,T,_),rh(e,y)|0,ei(y);break}default:P=z4(n)|0,c[k>>0]=o,os(T,t[P+4>>2]|0),GI(y,r,k,T),rh(e,y)|0,ei(y)}Rl(_),h=q}function WI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Zo(s),n=Oi(n)|0,iP(e,n,c[r>>0]|0),eu(s),h=o}function rh(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&ju(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function HI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+32|0,_=l+16|0,d=l+8|0,y=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[y>>2]=t[o>>2],s=t[s>>2]|0,t[_>>2]=t[y>>2],eP(e,n,r,_,s),eu(d),h=l}function bI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+24|0,d=l+16|0,k=l+12|0,_=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[k>>2]=t[o>>2],F4(_,s),t[y>>2]=t[k>>2],XI(e,n,r,y,_),Rl(_),eu(d),h=l}function GI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),n=Oi(n)|0,r=c[r>>0]|0,t[_>>2]=t[o>>2],t[d>>2]=t[_>>2],VI(e,n,r,d),eu(l),h=s}function VI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+4|0,_=s,d=ko(YI()|0)|0,r=fa(r)|0,t[_>>2]=t[o>>2],t[l>>2]=t[_>>2],ih(e,Ts(0,d|0,n|0,r|0,lc(l)|0)|0),h=s}function YI(){var e=0;return c[8e3]|0||($I(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function ih(e,n){e=e|0,n=n|0,_1(e,n)}function $I(e){e=e|0,Ao(e,KI()|0,2)}function KI(){return 1772}function XI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+16|0,k=l+12|0,d=l,_=ko(JI()|0)|0,r=fa(r)|0,t[k>>2]=t[o>>2],t[y>>2]=t[k>>2],o=lc(y)|0,t[d>>2]=t[s>>2],y=s+4|0,t[d+4>>2]=t[y>>2],k=s+8|0,t[d+8>>2]=t[k>>2],t[k>>2]=0,t[y>>2]=0,t[s>>2]=0,ih(e,Bu(0,_|0,n|0,r|0,o|0,R4(d)|0)|0),Rl(d),h=l}function JI(){var e=0;return c[8008]|0||(QI(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function QI(e){e=e|0,Ao(e,ZI()|0,3)}function ZI(){return 1784}function eP(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,_=l+4|0,y=l,d=ko(tP()|0)|0,r=fa(r)|0,t[y>>2]=t[o>>2],t[_>>2]=t[y>>2],o=lc(_)|0,ih(e,Bu(0,d|0,n|0,r|0,o|0,L4(s)|0)|0),h=l}function tP(){var e=0;return c[8016]|0||(nP(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function nP(e){e=e|0,Ao(e,rP()|0,3)}function rP(){return 1800}function iP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=ko(oP()|0)|0,ih(e,sf(0,o|0,n|0,fa(r)|0)|0)}function oP(){var e=0;return c[8024]|0||(uP(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function uP(e){e=e|0,Ao(e,sP()|0,1)}function sP(){return 1816}function lP(){fP(),cP(),aP()}function fP(){t[2702]=K8(65536)|0}function cP(){PP(10856)}function aP(){dP(10816)}function dP(e){e=e|0,pP(e,5044),hP(e)|0}function pP(e,n){e=e|0,n=n|0;var r=0;r=a8()|0,t[e>>2]=r,TP(r,n),Cf(t[e>>2]|0)}function hP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,mP()|0),e|0}function mP(){var e=0;return c[8032]|0||(E8(10820),Bt(64,10820,Q|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),Dn(10820)|0||E8(10820),10820}function E8(e){e=e|0,_P(e),sc(e,25)}function vP(e){e=e|0,gP(e+24|0)}function gP(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function _P(e){e=e|0;var n=0;n=An()|0,Nn(e,5,18,n,EP()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yP(e,n){e=e|0,n=n|0,wP(e,n)}function wP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;r=h,h=h+16|0,o=r,s=r+4|0,Ml(s,n),t[o>>2]=Fl(s,n)|0,DP(e,o),h=r}function DP(e,n){e=e|0,n=n|0,S8(e+4|0,t[n>>2]|0),c[e+8>>0]=1}function S8(e,n){e=e|0,n=n|0,t[e>>2]=n}function EP(){return 1824}function SP(e){return e=e|0,CP(e)|0}function CP(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,Ml(s,e),S8(_,Fl(s,e)|0),l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function Qo(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=K8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function TP(e,n){e=e|0,n=n|0,t[e>>2]=xP()|0,t[e+4>>2]=kP()|0,t[e+12>>2]=n,t[e+8>>2]=AP()|0,t[e+32>>2]=9}function xP(){return 11744}function kP(){return 1832}function AP(){return th()|0}function OP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(IP(r),Ve(r)):n|0&&Ve(n)}function IP(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function PP(e){e=e|0,MP(e,5052),FP(e)|0,LP(e,5058,26)|0,RP(e,5069,1)|0,NP(e,5077,10)|0,BP(e,5087,19)|0,jP(e,5094,27)|0}function MP(e,n){e=e|0,n=n|0;var r=0;r=IF()|0,t[e>>2]=r,PF(r,n),Cf(t[e>>2]|0)}function FP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,vF()|0),e|0}function LP(e,n,r){return e=e|0,n=n|0,r=r|0,QM(e,Zn(n)|0,r,0),e|0}function RP(e,n,r){return e=e|0,n=n|0,r=r|0,BM(e,Zn(n)|0,r,0),e|0}function NP(e,n,r){return e=e|0,n=n|0,r=r|0,mM(e,Zn(n)|0,r,0),e|0}function BP(e,n,r){return e=e|0,n=n|0,r=r|0,eM(e,Zn(n)|0,r,0),e|0}function C8(e,n){e=e|0,n=n|0;var r=0,o=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(o=t[r>>2]|0,t[2703]=o,!r)r=o;else break}Ve(r)}t[2701]=e}function jP(e,n,r){return e=e|0,n=n|0,r=r|0,UP(e,Zn(n)|0,r,0),e|0}function UP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=N4()|0,e=qP(r)|0,ur(l,n,s,e,zP(r,o)|0,o)}function N4(){var e=0,n=0;if(c[8040]|0||(x8(10860),Bt(65,10860,Q|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));x8(10860)}return 10860}function qP(e){return e=e|0,e|0}function zP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=N4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(T8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(WP(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function T8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function WP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=HP(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,bP(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,T8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,GP(e,s),VP(s),h=_;return}}function HP(e){return e=e|0,536870911}function bP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function GP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function VP(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function x8(e){e=e|0,KP(e)}function YP(e){e=e|0,$P(e+24|0)}function $P(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function KP(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,XP()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function XP(){return 1840}function JP(e,n,r){e=e|0,n=n|0,r=r|0,ZP(t[(QP(e)|0)>>2]|0,n,r)}function QP(e){return e=e|0,(t[(N4()|0)+24>>2]|0)+(e<<3)|0}function ZP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+1|0,s=o,Ml(l,n),n=Fl(l,n)|0,Ml(s,r),r=Fl(s,r)|0,Bl[e&31](n,r),h=o}function eM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=B4()|0,e=tM(r)|0,ur(l,n,s,e,nM(r,o)|0,o)}function B4(){var e=0,n=0;if(c[8048]|0||(A8(10896),Bt(66,10896,Q|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A8(10896)}return 10896}function tM(e){return e=e|0,e|0}function nM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=B4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(k8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(rM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function rM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=iM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,oM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,k8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,uM(e,s),sM(s),h=_;return}}function iM(e){return e=e|0,536870911}function oM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function uM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function sM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function A8(e){e=e|0,cM(e)}function lM(e){e=e|0,fM(e+24|0)}function fM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function cM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,aM()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function aM(){return 1852}function dM(e,n){return e=e|0,n=n|0,hM(t[(pM(e)|0)>>2]|0,n)|0}function pM(e){return e=e|0,(t[(B4()|0)+24>>2]|0)+(e<<3)|0}function hM(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Ml(o,n),n=Fl(o,n)|0,n=ea(dc[e&31](n)|0)|0,h=r,n|0}function mM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=j4()|0,e=vM(r)|0,ur(l,n,s,e,gM(r,o)|0,o)}function j4(){var e=0,n=0;if(c[8056]|0||(I8(10932),Bt(67,10932,Q|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));I8(10932)}return 10932}function vM(e){return e=e|0,e|0}function gM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=j4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(O8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(_M(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function O8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function _M(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=yM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,wM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,O8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,DM(e,s),EM(s),h=_;return}}function yM(e){return e=e|0,536870911}function wM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function DM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function EM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function I8(e){e=e|0,TM(e)}function SM(e){e=e|0,CM(e+24|0)}function CM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function TM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,7,n,xM()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function xM(){return 1860}function kM(e,n,r){return e=e|0,n=n|0,r=r|0,OM(t[(AM(e)|0)>>2]|0,n,r)|0}function AM(e){return e=e|0,(t[(j4()|0)+24>>2]|0)+(e<<3)|0}function OM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+32|0,d=o+12|0,l=o+8|0,_=o,y=o+16|0,s=o+4|0,IM(y,n),PM(_,y,n),$s(s,r),r=Ks(s,r)|0,t[d>>2]=t[_>>2],X1[e&15](l,d,r),r=MM(l)|0,ei(l),Xs(s),h=o,r|0}function IM(e,n){e=e|0,n=n|0}function PM(e,n,r){e=e|0,n=n|0,r=r|0,FM(e,r)}function MM(e){return e=e|0,Oi(e)|0}function FM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+16|0,r=s,o=n,o&1?(LM(r,0),c0(o|0,r|0)|0,RM(e,r),NM(r)):t[e>>2]=t[n>>2],h=s}function LM(e,n){e=e|0,n=n|0,wd(e,n),t[e+4>>2]=0,c[e+8>>0]=0}function RM(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function NM(e){e=e|0,c[e+8>>0]=0}function BM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=U4()|0,e=jM(r)|0,ur(l,n,s,e,UM(r,o)|0,o)}function U4(){var e=0,n=0;if(c[8064]|0||(M8(10968),Bt(68,10968,Q|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));M8(10968)}return 10968}function jM(e){return e=e|0,e|0}function UM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=U4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(P8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(qM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function P8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function qM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=zM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,WM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,P8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,HM(e,s),bM(s),h=_;return}}function zM(e){return e=e|0,536870911}function WM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function HM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function bM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function M8(e){e=e|0,YM(e)}function GM(e){e=e|0,VM(e+24|0)}function VM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function YM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,1,n,$M()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function $M(){return 1872}function KM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JM(t[(XM(e)|0)>>2]|0,n,r,o,s,l)}function XM(e){return e=e|0,(t[(U4()|0)+24>>2]|0)+(e<<3)|0}function JM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,_=d+16|0,y=d+12|0,k=d+8|0,T=d+4|0,P=d,$s(_,n),n=Ks(_,n)|0,$s(y,r),r=Ks(y,r)|0,$s(k,o),o=Ks(k,o)|0,$s(T,s),s=Ks(T,s)|0,$s(P,l),l=Ks(P,l)|0,eD[e&1](n,r,o,s,l),Xs(P),Xs(T),Xs(k),Xs(y),Xs(_),h=d}function QM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=q4()|0,e=ZM(r)|0,ur(l,n,s,e,eF(r,o)|0,o)}function q4(){var e=0,n=0;if(c[8072]|0||(L8(11004),Bt(69,11004,Q|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(Dn(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));L8(11004)}return 11004}function ZM(e){return e=e|0,e|0}function eF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=q4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(F8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tF(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function F8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nF(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rF(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,F8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,iF(e,s),oF(s),h=_;return}}function nF(e){return e=e|0,536870911}function rF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function iF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function oF(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function L8(e){e=e|0,lF(e)}function uF(e){e=e|0,sF(e+24|0)}function sF(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lF(e){e=e|0;var n=0;n=An()|0,Nn(e,1,12,n,fF()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fF(){return 1896}function cF(e,n,r){e=e|0,n=n|0,r=r|0,dF(t[(aF(e)|0)>>2]|0,n,r)}function aF(e){return e=e|0,(t[(q4()|0)+24>>2]|0)+(e<<3)|0}function dF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+4|0,s=o,pF(l,n),n=hF(l,n)|0,$s(s,r),r=Ks(s,r)|0,Bl[e&31](n,r),Xs(s),h=o}function pF(e,n){e=e|0,n=n|0}function hF(e,n){return e=e|0,n=n|0,mF(n)|0}function mF(e){return e=e|0,e|0}function vF(){var e=0;return c[8080]|0||(R8(11040),Bt(70,11040,Q|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),Dn(11040)|0||R8(11040),11040}function R8(e){e=e|0,yF(e),sc(e,71)}function gF(e){e=e|0,_F(e+24|0)}function _F(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yF(e){e=e|0;var n=0;n=An()|0,Nn(e,5,7,n,SF()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wF(e){e=e|0,DF(e)}function DF(e){e=e|0,EF(e)}function EF(e){e=e|0,c[e+8>>0]=1}function SF(){return 1936}function CF(){return TF()|0}function TF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,l=e+4|0,t[l>>2]=Tt(1)|0,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],xF(o,l,s),t[r>>2]=o,h=n,e|0}function xF(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function kF(e){e=e|0,da(e),Ve(e)}function AF(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function OF(e){e=e|0,Ve(e)}function IF(){var e=0;return c[8088]|0||(BF(11076),Bt(25,11076,Q|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function PF(e,n){e=e|0,n=n|0,t[e>>2]=MF()|0,t[e+4>>2]=FF()|0,t[e+12>>2]=n,t[e+8>>2]=LF()|0,t[e+32>>2]=10}function MF(){return 11745}function FF(){return 1940}function LF(){return eh()|0}function RF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(NF(r),Ve(r)):n|0&&Ve(n)}function NF(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function BF(e){e=e|0,Ys(e)}function os(e,n){e=e|0,n=n|0,t[e>>2]=n}function z4(e){return e=e|0,t[e>>2]|0}function jF(e){return e=e|0,c[t[e>>2]>>0]|0}function UF(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,t[o>>2]=t[e>>2],qF(n,o)|0,h=r}function qF(e,n){e=e|0,n=n|0;var r=0;return r=zF(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function zF(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Zo(o),e=Oi(e)|0,n=WF(e,t[n>>2]|0)|0,eu(o),h=r,n|0}function Zo(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function WF(e,n){e=e|0,n=n|0;var r=0;return r=ko(HF()|0)|0,sf(0,r|0,e|0,L4(n)|0)|0}function eu(e){e=e|0,C8(t[e>>2]|0,t[e+4>>2]|0)}function HF(){var e=0;return c[8096]|0||(bF(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function bF(e){e=e|0,Ao(e,GF()|0,1)}function GF(){return 1948}function VF(){YF()}function YF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(le=h,h=h+16|0,T=le+4|0,P=le,si(65536,10804,t[2702]|0,10812),r=o8()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(o=t[r+8>>2]|0,r=t[r+4>>2]|0;As(e|0,C[r>>0]|0|0,c[o>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)o=o+1|0,r=r+1|0;if(e=u8()|0,n=t[e>>2]|0,n|0)do uu(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);uu($F()|0,5167),k=sa()|0,e=t[k>>2]|0;e:do if(e|0){do KF(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[k>>2]|0,e|0){y=k;do{for(;s=e,e=t[e>>2]|0,s=t[s+4>>2]|0,!!(XF(s)|0);)if(t[P>>2]=y,t[T>>2]=t[P>>2],JF(k,T)|0,!e)break e;if(QF(s),y=t[y>>2]|0,n=N8(s)|0,l=Wo()|0,d=h,h=h+((1*(n<<2)|0)+15&-16)|0,_=h,h=h+((1*(n<<2)|0)+15&-16)|0,n=t[(_8(s)|0)>>2]|0,n|0)for(r=d,o=_;t[r>>2]=t[(la(t[n+4>>2]|0)|0)>>2],t[o>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,o=o+4|0;ie=la(s)|0,n=ZF(s)|0,r=N8(s)|0,o=eL(s)|0,Is(ie|0,n|0,d|0,_|0,r|0,o|0,A4(s)|0),b0(l|0)}while((e|0)!=0)}}while(0);if(e=t[(O4()|0)>>2]|0,e|0)do ie=e+4|0,k=I4(ie)|0,s=V1(k)|0,l=b1(k)|0,d=(G1(k)|0)+1|0,_=oh(k)|0,y=B8(ie)|0,k=Dn(k)|0,T=nh(ie)|0,P=W4(ie)|0,zo(0,s|0,l|0,d|0,_|0,y|0,k|0,T|0,P|0,H4(ie)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(sa()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(q=t[(la(n)|0)>>2]|0,we=t[(y8(n)|0)>>2]|0,we|0):0){r=we;do{n=r+4|0,o=I4(n)|0;n:do if(o|0)switch(Dn(o)|0){case 0:break t;case 4:case 3:case 2:{_=V1(o)|0,y=b1(o)|0,k=(G1(o)|0)+1|0,T=oh(o)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,_|0,y|0,k|0,T|0,0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 1:{d=V1(o)|0,_=b1(o)|0,y=(G1(o)|0)+1|0,k=oh(o)|0,T=B8(n)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,d|0,_|0,y|0,k|0,T|0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 5:{k=V1(o)|0,T=b1(o)|0,P=(G1(o)|0)+1|0,ie=oh(o)|0,zo(q|0,k|0,T|0,P|0,ie|0,tL(o)|0,Dn(o)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}_n()}while(0);uf(),h=le}function $F(){return 11703}function KF(e){e=e|0,c[e+40>>0]=0}function XF(e){return e=e|0,(c[e+40>>0]|0)!=0|0}function JF(e,n){return e=e|0,n=n|0,n=nL(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],Ve(e),t[n>>2]|0}function QF(e){e=e|0,c[e+40>>0]=1}function N8(e){return e=e|0,t[e+20>>2]|0}function ZF(e){return e=e|0,t[e+8>>2]|0}function eL(e){return e=e|0,t[e+32>>2]|0}function oh(e){return e=e|0,t[e+4>>2]|0}function B8(e){return e=e|0,t[e+4>>2]|0}function W4(e){return e=e|0,t[e+8>>2]|0}function H4(e){return e=e|0,t[e+16>>2]|0}function tL(e){return e=e|0,t[e+20>>2]|0}function nL(e){return e=e|0,t[e>>2]|0}function uh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0;vt=h,h=h+16|0,q=vt;do if(e>>>0<245){if(k=e>>>0<11?16:e+11&-8,e=k>>>3,P=t[2783]|0,r=P>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,o=t[r>>2]|0,s=o+8|0,l=t[s>>2]|0,(e|0)==(l|0)?t[2783]=P&~(1<>2]=e,t[r>>2]=l),_e=n<<3,t[o+4>>2]=_e|3,_e=o+_e+4|0,t[_e>>2]=t[_e>>2]|1,_e=s,h=vt,_e|0;if(T=t[2785]|0,k>>>0>T>>>0){if(r|0)return n=2<>>12&16,n=n>>>d,r=n>>>5&8,n=n>>>r,s=n>>>2&4,n=n>>>s,e=n>>>1&2,n=n>>>e,o=n>>>1&1,o=(r|d|s|e|o)+(n>>>o)|0,n=11172+(o<<1<<2)|0,e=n+8|0,s=t[e>>2]|0,d=s+8|0,r=t[d>>2]|0,(n|0)==(r|0)?(e=P&~(1<>2]=n,t[e>>2]=r,e=P),l=(o<<3)-k|0,t[s+4>>2]=k|3,o=s+k|0,t[o+4>>2]=l|1,t[o+l>>2]=l,T|0&&(s=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r),t[2785]=l,t[2788]=o,_e=d,h=vt,_e|0;if(_=t[2784]|0,_){if(r=(_&0-_)+-1|0,d=r>>>12&16,r=r>>>d,l=r>>>5&8,r=r>>>l,y=r>>>2&4,r=r>>>y,o=r>>>1&2,r=r>>>o,e=r>>>1&1,e=t[11436+((l|d|y|o|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-k|0,o=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!o)y=e,l=r;else{do d=(t[o+4>>2]&-8)-k|0,y=d>>>0>>0,r=y?d:r,e=y?o:e,o=t[o+16+(((t[o+16>>2]|0)==0&1)<<2)>>2]|0;while((o|0)!=0);y=e,l=r}if(d=y+k|0,y>>>0>>0){s=t[y+24>>2]|0,n=t[y+12>>2]|0;do if((n|0)==(y|0)){if(e=y+20|0,n=t[e>>2]|0,!n&&(e=y+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0,r=n}else r=t[y+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(s|0){if(n=t[y+28>>2]|0,e=11436+(n<<2)|0,(y|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=_&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,n=t[y+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[y+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return l>>>0<16?(_e=l+k|0,t[y+4>>2]=_e|3,_e=y+_e+4|0,t[_e>>2]=t[_e>>2]|1):(t[y+4>>2]=k|3,t[d+4>>2]=l|1,t[d+l>>2]=l,T|0&&(o=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=P|n,n=r,e=r+8|0),t[e>>2]=o,t[n+12>>2]=o,t[o+8>>2]=n,t[o+12>>2]=r),t[2785]=l,t[2788]=d),_e=y+8|0,h=vt,_e|0}else P=k}else P=k}else P=k}else if(e>>>0<=4294967231)if(e=e+11|0,k=e&-8,y=t[2784]|0,y){o=0-k|0,e=e>>>8,e?k>>>0>16777215?_=31:(P=(e+1048320|0)>>>16&8,pe=e<>>16&4,pe=pe<>>16&2,_=14-(T|P|_)+(pe<<_>>>15)|0,_=k>>>(_+7|0)&1|_<<1):_=0,r=t[11436+(_<<2)>>2]|0;e:do if(!r)r=0,e=0,pe=57;else for(e=0,d=k<<((_|0)==31?0:25-(_>>>1)|0),l=0;;){if(s=(t[r+4>>2]&-8)-k|0,s>>>0>>0)if(s)e=r,o=s;else{e=r,o=0,s=r,pe=61;break e}if(s=t[r+20>>2]|0,r=t[r+16+(d>>>31<<2)>>2]|0,l=(s|0)==0|(s|0)==(r|0)?l:s,s=(r|0)==0,s){r=l,pe=57;break}else d=d<<((s^1)&1)}while(0);if((pe|0)==57){if((r|0)==0&(e|0)==0){if(e=2<<_,e=y&(e|0-e),!e){P=k;break}P=(e&0-e)+-1|0,d=P>>>12&16,P=P>>>d,l=P>>>5&8,P=P>>>l,_=P>>>2&4,P=P>>>_,T=P>>>1&2,P=P>>>T,r=P>>>1&1,e=0,r=t[11436+((l|d|_|T|r)+(P>>>r)<<2)>>2]|0}r?(s=r,pe=61):(_=e,d=o)}if((pe|0)==61)for(;;)if(pe=0,r=(t[s+4>>2]&-8)-k|0,P=r>>>0>>0,r=P?r:o,e=P?s:e,s=t[s+16+(((t[s+16>>2]|0)==0&1)<<2)>>2]|0,s)o=r,pe=61;else{_=e,d=r;break}if((_|0)!=0?d>>>0<((t[2785]|0)-k|0)>>>0:0){if(l=_+k|0,_>>>0>=l>>>0)return _e=0,h=vt,_e|0;s=t[_+24>>2]|0,n=t[_+12>>2]|0;do if((n|0)==(_|0)){if(e=_+20|0,n=t[e>>2]|0,!n&&(e=_+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0}else _e=t[_+8>>2]|0,t[_e+12>>2]=n,t[n+8>>2]=_e;while(0);do if(s){if(e=t[_+28>>2]|0,r=11436+(e<<2)|0,(_|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){o=y&~(1<>2]|0)!=(_|0)&1)<<2)>>2]=n,!n){o=y;break}t[n+24>>2]=s,e=t[_+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[_+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),o=y}else o=y;while(0);do if(d>>>0>=16){if(t[_+4>>2]=k|3,t[l+4>>2]=d|1,t[l+d>>2]=d,n=d>>>3,d>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r;break}if(n=d>>>8,n?d>>>0>16777215?n=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=d>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[l+28>>2]=n,e=l+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}for(e=d<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(d|0)){pe=97;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=96;break}}if((pe|0)==96){t[o>>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}else if((pe|0)==97){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=l,t[pe>>2]=l,t[l+8>>2]=_e,t[l+12>>2]=r,t[l+24>>2]=0;break}}else _e=d+k|0,t[_+4>>2]=_e|3,_e=_+_e+4|0,t[_e>>2]=t[_e>>2]|1;while(0);return _e=_+8|0,h=vt,_e|0}else P=k}else P=k;else P=-1;while(0);if(r=t[2785]|0,r>>>0>=P>>>0)return n=r-P|0,e=t[2788]|0,n>>>0>15?(_e=e+P|0,t[2788]=_e,t[2785]=n,t[_e+4>>2]=n|1,t[_e+n>>2]=n,t[e+4>>2]=P|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,_e=e+r+4|0,t[_e>>2]=t[_e>>2]|1),_e=e+8|0,h=vt,_e|0;if(d=t[2786]|0,d>>>0>P>>>0)return qe=d-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=q&-16^1431655768,t[q>>2]=e,t[2901]=e,e=4096),_=P+48|0,y=P+47|0,l=e+y|0,s=0-e|0,k=l&s,k>>>0<=P>>>0||(e=t[2893]|0,e|0?(T=t[2891]|0,q=T+k|0,q>>>0<=T>>>0|q>>>0>e>>>0):0))return _e=0,h=vt,_e|0;e:do if(t[2894]&4)n=0,pe=133;else{r=t[2789]|0;t:do if(r){for(o=11580;e=t[o>>2]|0,!(e>>>0<=r>>>0?(ie=o+4|0,(e+(t[ie>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[o+8>>2]|0,e)o=e;else{pe=118;break t}if(n=l-d&s,n>>>0<2147483647)if(e=xf(n|0)|0,(e|0)==((t[o>>2]|0)+(t[ie>>2]|0)|0)){if((e|0)!=(-1|0)){d=n,l=e,pe=135;break e}}else o=e,pe=126;else n=0}else pe=118;while(0);do if((pe|0)==118)if(r=xf(0)|0,(r|0)!=(-1|0)?(n=r,we=t[2902]|0,le=we+-1|0,n=((le&n|0)==0?0:(le+n&0-we)-n|0)+k|0,we=t[2891]|0,le=n+we|0,n>>>0>P>>>0&n>>>0<2147483647):0){if(ie=t[2893]|0,ie|0?le>>>0<=we>>>0|le>>>0>ie>>>0:0){n=0;break}if(e=xf(n|0)|0,(e|0)==(r|0)){d=n,l=r,pe=135;break e}else o=e,pe=126}else n=0;while(0);do if((pe|0)==126){if(r=0-n|0,!(_>>>0>n>>>0&(n>>>0<2147483647&(o|0)!=(-1|0))))if((o|0)==(-1|0)){n=0;break}else{d=n,l=o,pe=135;break e}if(e=t[2903]|0,e=y-n+e&0-e,e>>>0>=2147483647){d=n,l=o,pe=135;break e}if((xf(e|0)|0)==(-1|0)){xf(r|0)|0,n=0;break}else{d=e+n|0,l=o,pe=135;break e}}while(0);t[2894]=t[2894]|4,pe=133}while(0);if((((pe|0)==133?k>>>0<2147483647:0)?(qe=xf(k|0)|0,ie=xf(0)|0,Pe=ie-qe|0,ke=Pe>>>0>(P+40|0)>>>0,!((qe|0)==(-1|0)|ke^1|qe>>>0>>0&((qe|0)!=(-1|0)&(ie|0)!=(-1|0))^1)):0)&&(d=ke?Pe:n,l=qe,pe=135),(pe|0)==135){n=(t[2891]|0)+d|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),y=t[2789]|0;do if(y){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,o=t[r>>2]|0,(l|0)==(e+o|0)){pe=145;break}if(s=t[n+8>>2]|0,s)n=s;else break}if(((pe|0)==145?(t[n+12>>2]&8|0)==0:0)?y>>>0>>0&y>>>0>=e>>>0:0){t[r>>2]=o+d,_e=y+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=y+_e|0,_e=(t[2786]|0)+(d-_e)|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905];break}for(l>>>0<(t[2787]|0)>>>0&&(t[2787]=l),r=l+d|0,n=11580;;){if((t[n>>2]|0)==(r|0)){pe=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((pe|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=l,T=n+4|0,t[T>>2]=(t[T>>2]|0)+d,T=l+8|0,T=l+((T&7|0)==0?0:0-T&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,k=T+P|0,_=n-T-P|0,t[T+4>>2]=P|3;do if((n|0)!=(y|0)){if((n|0)==(t[2788]|0)){_e=(t[2785]|0)+_|0,t[2785]=_e,t[2788]=k,t[k+4>>2]=_e|1,t[k+_e>>2]=_e;break}if(e=t[n+4>>2]|0,(e&3|0)==1){d=e&-8,o=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{l=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(o=n+16|0,r=o+4|0,e=t[r>>2]|0,!e)if(e=t[o>>2]|0,e)r=o;else{e=0;break}for(;;){if(o=e+20|0,s=t[o>>2]|0,s|0){e=s,r=o;continue}if(o=e+16|0,s=t[o>>2]|0,s)e=s,r=o;else break}t[r>>2]=0}else _e=t[n+8>>2]|0,t[_e+12>>2]=e,t[e+8>>2]=_e;while(0);if(!l)break;r=t[n+28>>2]|0,o=11436+(r<<2)|0;do if((n|0)!=(t[o>>2]|0)){if(t[l+16+(((t[l+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[o>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=l,r=n+16|0,o=t[r>>2]|0,o|0&&(t[e+16>>2]=o,t[o+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+d|0,s=d+_|0}else s=_;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[k+4>>2]=s|1,t[k+s>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=k,t[n+12>>2]=k,t[k+8>>2]=n,t[k+12>>2]=r;break}n=s>>>8;do if(!n)n=0;else{if(s>>>0>16777215){n=31;break}pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=s>>>(n+7|0)&1|n<<1}while(0);if(o=11436+(n<<2)|0,t[k+28>>2]=n,e=k+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=k,t[k+24>>2]=o,t[k+12>>2]=k,t[k+8>>2]=k;break}for(e=s<<((n|0)==31?0:25-(n>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){pe=194;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=193;break}}if((pe|0)==193){t[o>>2]=k,t[k+24>>2]=r,t[k+12>>2]=k,t[k+8>>2]=k;break}else if((pe|0)==194){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=k,t[pe>>2]=k,t[k+8>>2]=_e,t[k+12>>2]=r,t[k+24>>2]=0;break}}else _e=(t[2786]|0)+_|0,t[2786]=_e,t[2789]=k,t[k+4>>2]=_e|1;while(0);return _e=T+8|0,h=vt,_e|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=y>>>0?(_e=e+(t[n+4>>2]|0)|0,_e>>>0>y>>>0):0);)n=t[n+8>>2]|0;s=_e+-47|0,e=s+8|0,e=s+((e&7|0)==0?0:0-e&7)|0,s=y+16|0,e=e>>>0>>0?y:e,n=e+8|0,r=l+8|0,r=(r&7|0)==0?0:0-r&7,pe=l+r|0,r=d+-40-r|0,t[2789]=pe,t[2786]=r,t[pe+4>>2]=r|1,t[pe+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=l,t[2896]=d,t[2898]=0,t[2897]=n,n=e+24|0;do pe=n,n=n+4|0,t[n>>2]=7;while((pe+8|0)>>>0<_e>>>0);if((e|0)!=(y|0)){if(l=e-y|0,t[r>>2]=t[r>>2]&-2,t[y+4>>2]=l|1,t[e>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=y,t[n+12>>2]=y,t[y+8>>2]=n,t[y+12>>2]=r;break}if(n=l>>>8,n?l>>>0>16777215?r=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,r=14-(qe|pe|r)+(_e<>>15)|0,r=l>>>(r+7|0)&1|r<<1):r=0,o=11436+(r<<2)|0,t[y+28>>2]=r,t[y+20>>2]=0,t[s>>2]=0,n=t[2784]|0,e=1<>2]=y,t[y+24>>2]=o,t[y+12>>2]=y,t[y+8>>2]=y;break}for(e=l<<((r|0)==31?0:25-(r>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){pe=216;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=215;break}}if((pe|0)==215){t[o>>2]=y,t[y+24>>2]=r,t[y+12>>2]=y,t[y+8>>2]=y;break}else if((pe|0)==216){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=y,t[pe>>2]=y,t[y+8>>2]=_e,t[y+12>>2]=r,t[y+24>>2]=0;break}}}else{_e=t[2787]|0,(_e|0)==0|l>>>0<_e>>>0&&(t[2787]=l),t[2895]=l,t[2896]=d,t[2898]=0,t[2792]=t[2901],t[2791]=-1,n=0;do _e=11172+(n<<1<<2)|0,t[_e+12>>2]=_e,t[_e+8>>2]=_e,n=n+1|0;while((n|0)!=32);_e=l+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=l+_e|0,_e=d+-40-_e|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905]}while(0);if(n=t[2786]|0,n>>>0>P>>>0)return qe=n-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0}return t[(ca()|0)>>2]=12,_e=0,h=vt,_e|0}function sh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(!!e){r=e+-8|0,s=t[2787]|0,e=t[e+-4>>2]|0,n=e&-8,y=r+n|0;do if(e&1)_=r,d=r;else{if(o=t[r>>2]|0,!(e&3)||(d=r+(0-o)|0,l=o+n|0,d>>>0>>0))return;if((d|0)==(t[2788]|0)){if(e=y+4|0,n=t[e>>2]|0,(n&3|0)!=3){_=d,n=l;break}t[2785]=l,t[e>>2]=n&-2,t[d+4>>2]=l|1,t[d+l>>2]=l;return}if(r=o>>>3,o>>>0<256)if(e=t[d+8>>2]|0,n=t[d+12>>2]|0,(n|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=n,t[n+8>>2]=e,_=d,n=l;break}s=t[d+24>>2]|0,e=t[d+12>>2]|0;do if((e|0)==(d|0)){if(r=d+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{e=0;break}for(;;){if(r=e+20|0,o=t[r>>2]|0,o|0){e=o,n=r;continue}if(r=e+16|0,o=t[r>>2]|0,o)e=o,n=r;else break}t[n>>2]=0}else _=t[d+8>>2]|0,t[_+12>>2]=e,t[e+8>>2]=_;while(0);if(s){if(n=t[d+28>>2]|0,r=11436+(n<<2)|0,(d|0)==(t[r>>2]|0)){if(t[r>>2]=e,!e){t[2784]=t[2784]&~(1<>2]|0)!=(d|0)&1)<<2)>>2]=e,!e){_=d,n=l;break}t[e+24>>2]=s,n=d+16|0,r=t[n>>2]|0,r|0&&(t[e+16>>2]=r,t[r+24>>2]=e),n=t[n+4>>2]|0,n?(t[e+20>>2]=n,t[n+24>>2]=e,_=d,n=l):(_=d,n=l)}else _=d,n=l}while(0);if(!(d>>>0>=y>>>0)&&(e=y+4|0,o=t[e>>2]|0,!!(o&1))){if(o&2)t[e>>2]=o&-2,t[_+4>>2]=n|1,t[d+n>>2]=n,s=n;else{if(e=t[2788]|0,(y|0)==(t[2789]|0)){if(y=(t[2786]|0)+n|0,t[2786]=y,t[2789]=_,t[_+4>>2]=y|1,(_|0)!=(e|0))return;t[2788]=0,t[2785]=0;return}if((y|0)==(e|0)){y=(t[2785]|0)+n|0,t[2785]=y,t[2788]=d,t[_+4>>2]=y|1,t[d+y>>2]=y;return}s=(o&-8)+n|0,r=o>>>3;do if(o>>>0<256)if(n=t[y+8>>2]|0,e=t[y+12>>2]|0,(e|0)==(n|0)){t[2783]=t[2783]&~(1<>2]=e,t[e+8>>2]=n;break}else{l=t[y+24>>2]|0,e=t[y+12>>2]|0;do if((e|0)==(y|0)){if(r=y+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{r=0;break}for(;;){if(r=e+20|0,o=t[r>>2]|0,o|0){e=o,n=r;continue}if(r=e+16|0,o=t[r>>2]|0,o)e=o,n=r;else break}t[n>>2]=0,r=e}else r=t[y+8>>2]|0,t[r+12>>2]=e,t[e+8>>2]=r,r=e;while(0);if(l|0){if(e=t[y+28>>2]|0,n=11436+(e<<2)|0,(y|0)==(t[n>>2]|0)){if(t[n>>2]=r,!r){t[2784]=t[2784]&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=l,e=y+16|0,n=t[e>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),e=t[e+4>>2]|0,e|0&&(t[r+20>>2]=e,t[e+24>>2]=r)}}while(0);if(t[_+4>>2]=s|1,t[d+s>>2]=s,(_|0)==(t[2788]|0)){t[2785]=s;return}}if(e=s>>>3,s>>>0<256){r=11172+(e<<1<<2)|0,n=t[2783]|0,e=1<>2]|0):(t[2783]=n|e,e=r,n=r+8|0),t[n>>2]=_,t[e+12>>2]=_,t[_+8>>2]=e,t[_+12>>2]=r;return}e=s>>>8,e?s>>>0>16777215?e=31:(d=(e+1048320|0)>>>16&8,y=e<>>16&4,y=y<>>16&2,e=14-(l|d|e)+(y<>>15)|0,e=s>>>(e+7|0)&1|e<<1):e=0,o=11436+(e<<2)|0,t[_+28>>2]=e,t[_+20>>2]=0,t[_+16>>2]=0,n=t[2784]|0,r=1<>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){e=73;break}if(o=r+16+(n>>>31<<2)|0,e=t[o>>2]|0,e)n=n<<1,r=e;else{e=72;break}}if((e|0)==72){t[o>>2]=_,t[_+24>>2]=r,t[_+12>>2]=_,t[_+8>>2]=_;break}else if((e|0)==73){d=r+8|0,y=t[d>>2]|0,t[y+12>>2]=_,t[d>>2]=_,t[_+8>>2]=y,t[_+12>>2]=r,t[_+24>>2]=0;break}}else t[2784]=n|r,t[o>>2]=_,t[_+24>>2]=o,t[_+12>>2]=_,t[_+8>>2]=_;while(0);if(y=(t[2791]|0)+-1|0,t[2791]=y,!y)e=11588;else return;for(;e=t[e>>2]|0,e;)e=e+8|0;t[2791]=-1}}}function rL(){return 11628}function iL(e){e=e|0;var n=0,r=0;return n=h,h=h+16|0,r=n,t[r>>2]=sL(t[e+60>>2]|0)|0,e=lh(Ms(6,r|0)|0)|0,h=n,e|0}function j8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;P=h,h=h+48|0,k=P+16|0,l=P,s=P+32|0,_=e+28|0,o=t[_>>2]|0,t[s>>2]=o,y=e+20|0,o=(t[y>>2]|0)-o|0,t[s+4>>2]=o,t[s+8>>2]=n,t[s+12>>2]=r,o=o+r|0,d=e+60|0,t[l>>2]=t[d>>2],t[l+4>>2]=s,t[l+8>>2]=2,l=lh(G0(146,l|0)|0)|0;e:do if((o|0)!=(l|0)){for(n=2;!((l|0)<0);)if(o=o-l|0,we=t[s+4>>2]|0,q=l>>>0>we>>>0,s=q?s+8|0:s,n=(q<<31>>31)+n|0,we=l-(q?we:0)|0,t[s>>2]=(t[s>>2]|0)+we,q=s+4|0,t[q>>2]=(t[q>>2]|0)-we,t[k>>2]=t[d>>2],t[k+4>>2]=s,t[k+8>>2]=n,l=lh(G0(146,k|0)|0)|0,(o|0)==(l|0)){T=3;break e}t[e+16>>2]=0,t[_>>2]=0,t[y>>2]=0,t[e>>2]=t[e>>2]|32,(n|0)==2?r=0:r=r-(t[s+4>>2]|0)|0}else T=3;while(0);return(T|0)==3&&(we=t[e+44>>2]|0,t[e+16>>2]=we+(t[e+48>>2]|0),t[_>>2]=we,t[y>>2]=we),h=P,r|0}function oL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return s=h,h=h+32|0,l=s,o=s+20|0,t[l>>2]=t[e+60>>2],t[l+4>>2]=0,t[l+8>>2]=n,t[l+12>>2]=o,t[l+16>>2]=r,(lh(Uu(140,l|0)|0)|0)<0?(t[o>>2]=-1,e=-1):e=t[o>>2]|0,h=s,e|0}function lh(e){return e=e|0,e>>>0>4294963200&&(t[(ca()|0)>>2]=0-e,e=-1),e|0}function ca(){return(uL()|0)+64|0}function uL(){return b4()|0}function b4(){return 2084}function sL(e){return e=e|0,e|0}function lL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return s=h,h=h+32|0,o=s,t[e+36>>2]=1,((t[e>>2]&64|0)==0?(t[o>>2]=t[e+60>>2],t[o+4>>2]=21523,t[o+8>>2]=s+16,su(54,o|0)|0):0)&&(c[e+75>>0]=-1),o=j8(e,n,r)|0,h=s,o|0}function U8(e,n){e=e|0,n=n|0;var r=0,o=0;if(r=c[e>>0]|0,o=c[n>>0]|0,r<<24>>24==0?1:r<<24>>24!=o<<24>>24)e=o;else{do e=e+1|0,n=n+1|0,r=c[e>>0]|0,o=c[n>>0]|0;while(!(r<<24>>24==0?1:r<<24>>24!=o<<24>>24));e=o}return(r&255)-(e&255)|0}function fL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;e:do if(!r)e=0;else{for(;o=c[e>>0]|0,s=c[n>>0]|0,o<<24>>24==s<<24>>24;)if(r=r+-1|0,r)e=e+1|0,n=n+1|0;else{e=0;break e}e=(o&255)-(s&255)|0}while(0);return e|0}function q8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;ie=h,h=h+224|0,T=ie+120|0,P=ie+80|0,we=ie,le=ie+136|0,o=P,s=o+40|0;do t[o>>2]=0,o=o+4|0;while((o|0)<(s|0));return t[T>>2]=t[r>>2],(G4(0,n,T,we,P)|0)<0?r=-1:((t[e+76>>2]|0)>-1?q=cL(e)|0:q=0,r=t[e>>2]|0,k=r&32,(c[e+74>>0]|0)<1&&(t[e>>2]=r&-33),o=e+48|0,t[o>>2]|0?r=G4(e,n,T,we,P)|0:(s=e+44|0,l=t[s>>2]|0,t[s>>2]=le,d=e+28|0,t[d>>2]=le,_=e+20|0,t[_>>2]=le,t[o>>2]=80,y=e+16|0,t[y>>2]=le+80,r=G4(e,n,T,we,P)|0,l&&(dh[t[e+36>>2]&7](e,0,0)|0,r=(t[_>>2]|0)==0?-1:r,t[s>>2]=l,t[o>>2]=0,t[y>>2]=0,t[d>>2]=0,t[_>>2]=0)),o=t[e>>2]|0,t[e>>2]=o|k,q|0&&aL(e),r=(o&32|0)==0?r:-1),h=ie,r|0}function G4(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0;zt=h,h=h+64|0,Ht=zt+16|0,It=zt,vt=zt+24|0,gn=zt+8|0,Pn=zt+20|0,t[Ht>>2]=n,qe=(e|0)!=0,pe=vt+40|0,_e=pe,vt=vt+39|0,Ln=gn+4|0,d=0,l=0,T=0;e:for(;;){do if((l|0)>-1)if((d|0)>(2147483647-l|0)){t[(ca()|0)>>2]=75,l=-1;break}else{l=d+l|0;break}while(0);if(d=c[n>>0]|0,d<<24>>24)_=n;else{ke=87;break}t:for(;;){switch(d<<24>>24){case 37:{d=_,ke=9;break t}case 0:{d=_;break t}default:}Pe=_+1|0,t[Ht>>2]=Pe,d=c[Pe>>0]|0,_=Pe}t:do if((ke|0)==9)for(;;){if(ke=0,(c[_+1>>0]|0)!=37)break t;if(d=d+1|0,_=_+2|0,t[Ht>>2]=_,(c[_>>0]|0)==37)ke=9;else break}while(0);if(d=d-n|0,qe&&ri(e,n,d),d|0){n=_;continue}y=_+1|0,d=(c[y>>0]|0)+-48|0,d>>>0<10?(Pe=(c[_+2>>0]|0)==36,ie=Pe?d:-1,T=Pe?1:T,y=Pe?_+3|0:y):ie=-1,t[Ht>>2]=y,d=c[y>>0]|0,_=(d<<24>>24)+-32|0;t:do if(_>>>0<32)for(k=0,P=d;;){if(d=1<<_,!(d&75913)){d=P;break t}if(k=d|k,y=y+1|0,t[Ht>>2]=y,d=c[y>>0]|0,_=(d<<24>>24)+-32|0,_>>>0>=32)break;P=d}else k=0;while(0);if(d<<24>>24==42){if(_=y+1|0,d=(c[_>>0]|0)+-48|0,d>>>0<10?(c[y+2>>0]|0)==36:0)t[s+(d<<2)>>2]=10,d=t[o+((c[_>>0]|0)+-48<<3)>>2]|0,T=1,y=y+3|0;else{if(T|0){l=-1;break}qe?(T=(t[r>>2]|0)+(4-1)&~(4-1),d=t[T>>2]|0,t[r>>2]=T+4,T=0,y=_):(d=0,T=0,y=_)}t[Ht>>2]=y,Pe=(d|0)<0,d=Pe?0-d|0:d,k=Pe?k|8192:k}else{if(d=z8(Ht)|0,(d|0)<0){l=-1;break}y=t[Ht>>2]|0}do if((c[y>>0]|0)==46){if((c[y+1>>0]|0)!=42){t[Ht>>2]=y+1,_=z8(Ht)|0,y=t[Ht>>2]|0;break}if(P=y+2|0,_=(c[P>>0]|0)+-48|0,_>>>0<10?(c[y+3>>0]|0)==36:0){t[s+(_<<2)>>2]=10,_=t[o+((c[P>>0]|0)+-48<<3)>>2]|0,y=y+4|0,t[Ht>>2]=y;break}if(T|0){l=-1;break e}qe?(Pe=(t[r>>2]|0)+(4-1)&~(4-1),_=t[Pe>>2]|0,t[r>>2]=Pe+4):_=0,t[Ht>>2]=P,y=P}else _=-1;while(0);for(le=0;;){if(((c[y>>0]|0)+-65|0)>>>0>57){l=-1;break e}if(Pe=y+1|0,t[Ht>>2]=Pe,P=c[(c[y>>0]|0)+-65+(5178+(le*58|0))>>0]|0,q=P&255,(q+-1|0)>>>0<8)le=q,y=Pe;else break}if(!(P<<24>>24)){l=-1;break}we=(ie|0)>-1;do if(P<<24>>24==19)if(we){l=-1;break e}else ke=49;else{if(we){t[s+(ie<<2)>>2]=q,we=o+(ie<<3)|0,ie=t[we+4>>2]|0,ke=It,t[ke>>2]=t[we>>2],t[ke+4>>2]=ie,ke=49;break}if(!qe){l=0;break e}W8(It,q,r)}while(0);if((ke|0)==49?(ke=0,!qe):0){d=0,n=Pe;continue}y=c[y>>0]|0,y=(le|0)!=0&(y&15|0)==3?y&-33:y,we=k&-65537,ie=(k&8192|0)==0?k:we;t:do switch(y|0){case 110:switch((le&255)<<24>>24){case 0:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 1:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 2:{d=t[It>>2]|0,t[d>>2]=l,t[d+4>>2]=((l|0)<0)<<31>>31,d=0,n=Pe;continue e}case 3:{g[t[It>>2]>>1]=l,d=0,n=Pe;continue e}case 4:{c[t[It>>2]>>0]=l,d=0,n=Pe;continue e}case 6:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 7:{d=t[It>>2]|0,t[d>>2]=l,t[d+4>>2]=((l|0)<0)<<31>>31,d=0,n=Pe;continue e}default:{d=0,n=Pe;continue e}}case 112:{y=120,_=_>>>0>8?_:8,n=ie|8,ke=61;break}case 88:case 120:{n=ie,ke=61;break}case 111:{y=It,n=t[y>>2]|0,y=t[y+4>>2]|0,q=pL(n,y,pe)|0,we=_e-q|0,k=0,P=5642,_=(ie&8|0)==0|(_|0)>(we|0)?_:we+1|0,we=ie,ke=67;break}case 105:case 100:if(y=It,n=t[y>>2]|0,y=t[y+4>>2]|0,(y|0)<0){n=fh(0,0,n|0,y|0)|0,y=be,k=It,t[k>>2]=n,t[k+4>>2]=y,k=1,P=5642,ke=66;break t}else{k=(ie&2049|0)!=0&1,P=(ie&2048|0)==0?(ie&1|0)==0?5642:5644:5643,ke=66;break t}case 117:{y=It,k=0,P=5642,n=t[y>>2]|0,y=t[y+4>>2]|0,ke=66;break}case 99:{c[vt>>0]=t[It>>2],n=vt,k=0,P=5642,q=pe,y=1,_=we;break}case 109:{y=hL(t[(ca()|0)>>2]|0)|0,ke=71;break}case 115:{y=t[It>>2]|0,y=y|0?y:5652,ke=71;break}case 67:{t[gn>>2]=t[It>>2],t[Ln>>2]=0,t[It>>2]=gn,q=-1,y=gn,ke=75;break}case 83:{n=t[It>>2]|0,_?(q=_,y=n,ke=75):(wi(e,32,d,0,ie),n=0,ke=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{d=vL(e,+L[It>>3],d,_,ie,y)|0,n=Pe;continue e}default:k=0,P=5642,q=pe,y=_,_=ie}while(0);t:do if((ke|0)==61)ie=It,le=t[ie>>2]|0,ie=t[ie+4>>2]|0,q=dL(le,ie,pe,y&32)|0,P=(n&8|0)==0|(le|0)==0&(ie|0)==0,k=P?0:2,P=P?5642:5642+(y>>4)|0,we=n,n=le,y=ie,ke=67;else if((ke|0)==66)q=aa(n,y,pe)|0,we=ie,ke=67;else if((ke|0)==71)ke=0,ie=mL(y,0,_)|0,le=(ie|0)==0,n=y,k=0,P=5642,q=le?y+_|0:ie,y=le?_:ie-y|0,_=we;else if((ke|0)==75){for(ke=0,P=y,n=0,_=0;k=t[P>>2]|0,!(!k||(_=H8(Pn,k)|0,(_|0)<0|_>>>0>(q-n|0)>>>0));)if(n=_+n|0,q>>>0>n>>>0)P=P+4|0;else break;if((_|0)<0){l=-1;break e}if(wi(e,32,d,n,ie),!n)n=0,ke=84;else for(k=0;;){if(_=t[y>>2]|0,!_){ke=84;break t}if(_=H8(Pn,_)|0,k=_+k|0,(k|0)>(n|0)){ke=84;break t}if(ri(e,Pn,_),k>>>0>=n>>>0){ke=84;break}else y=y+4|0}}while(0);if((ke|0)==67)ke=0,y=(n|0)!=0|(y|0)!=0,ie=(_|0)!=0|y,y=((y^1)&1)+(_e-q)|0,n=ie?q:pe,q=pe,y=ie?(_|0)>(y|0)?_:y:_,_=(_|0)>-1?we&-65537:we;else if((ke|0)==84){ke=0,wi(e,32,d,n,ie^8192),d=(d|0)>(n|0)?d:n,n=Pe;continue}le=q-n|0,we=(y|0)<(le|0)?le:y,ie=we+k|0,d=(d|0)<(ie|0)?ie:d,wi(e,32,d,ie,_),ri(e,P,k),wi(e,48,d,ie,_^65536),wi(e,48,we,le,0),ri(e,n,le),wi(e,32,d,ie,_^8192),n=Pe}e:do if((ke|0)==87&&!e)if(!T)l=0;else{for(l=1;n=t[s+(l<<2)>>2]|0,!!n;)if(W8(o+(l<<3)|0,n,r),l=l+1|0,(l|0)>=10){l=1;break e}for(;;){if(t[s+(l<<2)>>2]|0){l=-1;break e}if(l=l+1|0,(l|0)>=10){l=1;break}}}while(0);return h=zt,l|0}function cL(e){return e=e|0,0}function aL(e){e=e|0}function ri(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]&32||TL(n,r,e)|0}function z8(e){e=e|0;var n=0,r=0,o=0;if(r=t[e>>2]|0,o=(c[r>>0]|0)+-48|0,o>>>0<10){n=0;do n=o+(n*10|0)|0,r=r+1|0,t[e>>2]=r,o=(c[r>>0]|0)+-48|0;while(o>>>0<10)}else n=0;return n|0}function W8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;e:do if(n>>>0<=20)do switch(n|0){case 9:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,t[e>>2]=n;break e}case 10:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,o=e,t[o>>2]=n,t[o+4>>2]=((n|0)<0)<<31>>31;break e}case 11:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,o=e,t[o>>2]=n,t[o+4>>2]=0;break e}case 12:{o=(t[r>>2]|0)+(8-1)&~(8-1),n=o,s=t[n>>2]|0,n=t[n+4>>2]|0,t[r>>2]=o+8,o=e,t[o>>2]=s,t[o+4>>2]=n;break e}case 13:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,o=(o&65535)<<16>>16,s=e,t[s>>2]=o,t[s+4>>2]=((o|0)<0)<<31>>31;break e}case 14:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,s=e,t[s>>2]=o&65535,t[s+4>>2]=0;break e}case 15:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,o=(o&255)<<24>>24,s=e,t[s>>2]=o,t[s+4>>2]=((o|0)<0)<<31>>31;break e}case 16:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,s=e,t[s>>2]=o&255,t[s+4>>2]=0;break e}case 17:{s=(t[r>>2]|0)+(8-1)&~(8-1),l=+L[s>>3],t[r>>2]=s+8,L[e>>3]=l;break e}case 18:{s=(t[r>>2]|0)+(8-1)&~(8-1),l=+L[s>>3],t[r>>2]=s+8,L[e>>3]=l;break e}default:break e}while(0);while(0)}function dL(e,n,r,o){if(e=e|0,n=n|0,r=r|0,o=o|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=C[5694+(e&15)>>0]|0|o,e=ch(e|0,n|0,4)|0,n=be;while(!((e|0)==0&(n|0)==0));return r|0}function pL(e,n,r){if(e=e|0,n=n|0,r=r|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=e&7|48,e=ch(e|0,n|0,3)|0,n=be;while(!((e|0)==0&(n|0)==0));return r|0}function aa(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;if(n>>>0>0|(n|0)==0&e>>>0>4294967295){for(;o=K4(e|0,n|0,10,0)|0,r=r+-1|0,c[r>>0]=o&255|48,o=e,e=$4(e|0,n|0,10,0)|0,n>>>0>9|(n|0)==9&o>>>0>4294967295;)n=be;n=e}else n=e;if(n)for(;r=r+-1|0,c[r>>0]=(n>>>0)%10|0|48,!(n>>>0<10);)n=(n>>>0)/10|0;return r|0}function hL(e){return e=e|0,DL(e,t[(wL()|0)+188>>2]|0)|0}function mL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;l=n&255,o=(r|0)!=0;e:do if(o&(e&3|0)!=0)for(s=n&255;;){if((c[e>>0]|0)==s<<24>>24){d=6;break e}if(e=e+1|0,r=r+-1|0,o=(r|0)!=0,!(o&(e&3|0)!=0)){d=5;break}}else d=5;while(0);(d|0)==5&&(o?d=6:r=0);e:do if((d|0)==6&&(s=n&255,(c[e>>0]|0)!=s<<24>>24)){o=Un(l,16843009)|0;t:do if(r>>>0>3){for(;l=t[e>>2]^o,!((l&-2139062144^-2139062144)&l+-16843009|0);)if(e=e+4|0,r=r+-4|0,r>>>0<=3){d=11;break t}}else d=11;while(0);if((d|0)==11&&!r){r=0;break}for(;;){if((c[e>>0]|0)==s<<24>>24)break e;if(e=e+1|0,r=r+-1|0,!r){r=0;break}}}while(0);return(r|0?e:0)|0}function wi(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0;if(d=h,h=h+256|0,l=d,(r|0)>(o|0)&(s&73728|0)==0){if(s=r-o|0,pa(l|0,n|0,(s>>>0<256?s:256)|0)|0,s>>>0>255){n=r-o|0;do ri(e,l,256),s=s+-256|0;while(s>>>0>255);s=n&255}ri(e,l,s)}h=d}function H8(e,n){return e=e|0,n=n|0,e?e=_L(e,n,0)|0:e=0,e|0}function vL(e,n,r,o,s,l){e=e|0,n=+n,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0;Dr=h,h=h+560|0,y=Dr+8|0,Pe=Dr,zt=Dr+524|0,Pn=zt,k=Dr+512|0,t[Pe>>2]=0,gn=k+12|0,b8(n)|0,(be|0)<0?(n=-n,Ht=1,Ln=5659):(Ht=(s&2049|0)!=0&1,Ln=(s&2048|0)==0?(s&1|0)==0?5660:5665:5662),b8(n)|0,It=be&2146435072;do if(It>>>0<2146435072|(It|0)==2146435072&0<0){if(we=+gL(n,Pe)*2,d=we!=0,d&&(t[Pe>>2]=(t[Pe>>2]|0)+-1),qe=l|32,(qe|0)==97){le=l&32,q=(le|0)==0?Ln:Ln+9|0,P=Ht|2,d=12-o|0;do if(o>>>0>11|(d|0)==0)n=we;else{n=8;do d=d+-1|0,n=n*16;while((d|0)!=0);if((c[q>>0]|0)==45){n=-(n+(-we-n));break}else{n=we+n-n;break}}while(0);_=t[Pe>>2]|0,d=(_|0)<0?0-_|0:_,d=aa(d,((d|0)<0)<<31>>31,gn)|0,(d|0)==(gn|0)&&(d=k+11|0,c[d>>0]=48),c[d+-1>>0]=(_>>31&2)+43,T=d+-2|0,c[T>>0]=l+15,k=(o|0)<1,y=(s&8|0)==0,d=zt;do It=~~n,_=d+1|0,c[d>>0]=C[5694+It>>0]|le,n=(n-+(It|0))*16,((_-Pn|0)==1?!(y&(k&n==0)):0)?(c[_>>0]=46,d=d+2|0):d=_;while(n!=0);It=d-Pn|0,Pn=gn-T|0,gn=(o|0)!=0&(It+-2|0)<(o|0)?o+2|0:It,d=Pn+P+gn|0,wi(e,32,r,d,s),ri(e,q,P),wi(e,48,r,d,s^65536),ri(e,zt,It),wi(e,48,gn-It|0,0,0),ri(e,T,Pn),wi(e,32,r,d,s^8192);break}_=(o|0)<0?6:o,d?(d=(t[Pe>>2]|0)+-28|0,t[Pe>>2]=d,n=we*268435456):(n=we,d=t[Pe>>2]|0),It=(d|0)<0?y:y+288|0,y=It;do _e=~~n>>>0,t[y>>2]=_e,y=y+4|0,n=(n-+(_e>>>0))*1e9;while(n!=0);if((d|0)>0)for(k=It,P=y;;){if(T=(d|0)<29?d:29,d=P+-4|0,d>>>0>=k>>>0){y=0;do pe=X8(t[d>>2]|0,0,T|0)|0,pe=Y4(pe|0,be|0,y|0,0)|0,_e=be,ke=K4(pe|0,_e|0,1e9,0)|0,t[d>>2]=ke,y=$4(pe|0,_e|0,1e9,0)|0,d=d+-4|0;while(d>>>0>=k>>>0);y&&(k=k+-4|0,t[k>>2]=y)}for(y=P;!(y>>>0<=k>>>0);)if(d=y+-4|0,!(t[d>>2]|0))y=d;else break;if(d=(t[Pe>>2]|0)-T|0,t[Pe>>2]=d,(d|0)>0)P=y;else break}else k=It;if((d|0)<0){o=((_+25|0)/9|0)+1|0,ie=(qe|0)==102;do{if(le=0-d|0,le=(le|0)<9?le:9,k>>>0>>0){T=(1<>>le,q=0,d=k;do _e=t[d>>2]|0,t[d>>2]=(_e>>>le)+q,q=Un(_e&T,P)|0,d=d+4|0;while(d>>>0>>0);d=(t[k>>2]|0)==0?k+4|0:k,q?(t[y>>2]=q,k=d,d=y+4|0):(k=d,d=y)}else k=(t[k>>2]|0)==0?k+4|0:k,d=y;y=ie?It:k,y=(d-y>>2|0)>(o|0)?y+(o<<2)|0:d,d=(t[Pe>>2]|0)+le|0,t[Pe>>2]=d}while((d|0)<0);d=k,o=y}else d=k,o=y;if(_e=It,d>>>0>>0){if(y=(_e-d>>2)*9|0,T=t[d>>2]|0,T>>>0>=10){k=10;do k=k*10|0,y=y+1|0;while(T>>>0>=k>>>0)}}else y=0;if(ie=(qe|0)==103,ke=(_|0)!=0,k=_-((qe|0)!=102?y:0)+((ke&ie)<<31>>31)|0,(k|0)<(((o-_e>>2)*9|0)+-9|0)){if(k=k+9216|0,le=It+4+(((k|0)/9|0)+-1024<<2)|0,k=((k|0)%9|0)+1|0,(k|0)<9){T=10;do T=T*10|0,k=k+1|0;while((k|0)!=9)}else T=10;if(P=t[le>>2]|0,q=(P>>>0)%(T>>>0)|0,k=(le+4|0)==(o|0),k&(q|0)==0)k=le;else if(we=(((P>>>0)/(T>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,pe=(T|0)/2|0,n=q>>>0>>0?.5:k&(q|0)==(pe|0)?1:1.5,Ht&&(pe=(c[Ln>>0]|0)==45,n=pe?-n:n,we=pe?-we:we),k=P-q|0,t[le>>2]=k,we+n!=we){if(pe=k+T|0,t[le>>2]=pe,pe>>>0>999999999)for(y=le;k=y+-4|0,t[y>>2]=0,k>>>0>>0&&(d=d+-4|0,t[d>>2]=0),pe=(t[k>>2]|0)+1|0,t[k>>2]=pe,pe>>>0>999999999;)y=k;else k=le;if(y=(_e-d>>2)*9|0,P=t[d>>2]|0,P>>>0>=10){T=10;do T=T*10|0,y=y+1|0;while(P>>>0>=T>>>0)}}else k=le;k=k+4|0,k=o>>>0>k>>>0?k:o,pe=d}else k=o,pe=d;for(qe=k;;){if(qe>>>0<=pe>>>0){Pe=0;break}if(d=qe+-4|0,!(t[d>>2]|0))qe=d;else{Pe=1;break}}o=0-y|0;do if(ie)if(d=((ke^1)&1)+_|0,(d|0)>(y|0)&(y|0)>-5?(T=l+-1|0,_=d+-1-y|0):(T=l+-2|0,_=d+-1|0),d=s&8,d)le=d;else{if(Pe?(vt=t[qe+-4>>2]|0,(vt|0)!=0):0)if((vt>>>0)%10|0)k=0;else{k=0,d=10;do d=d*10|0,k=k+1|0;while(!((vt>>>0)%(d>>>0)|0|0))}else k=9;if(d=((qe-_e>>2)*9|0)+-9|0,(T|32|0)==102){le=d-k|0,le=(le|0)>0?le:0,_=(_|0)<(le|0)?_:le,le=0;break}else{le=d+y-k|0,le=(le|0)>0?le:0,_=(_|0)<(le|0)?_:le,le=0;break}}else T=l,le=s&8;while(0);if(ie=_|le,P=(ie|0)!=0&1,q=(T|32|0)==102,q)ke=0,d=(y|0)>0?y:0;else{if(d=(y|0)<0?o:y,d=aa(d,((d|0)<0)<<31>>31,gn)|0,k=gn,(k-d|0)<2)do d=d+-1|0,c[d>>0]=48;while((k-d|0)<2);c[d+-1>>0]=(y>>31&2)+43,d=d+-2|0,c[d>>0]=T,ke=d,d=k-d|0}if(d=Ht+1+_+P+d|0,wi(e,32,r,d,s),ri(e,Ln,Ht),wi(e,48,r,d,s^65536),q){T=pe>>>0>It>>>0?It:pe,le=zt+9|0,P=le,q=zt+8|0,k=T;do{if(y=aa(t[k>>2]|0,0,le)|0,(k|0)==(T|0))(y|0)==(le|0)&&(c[q>>0]=48,y=q);else if(y>>>0>zt>>>0){pa(zt|0,48,y-Pn|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}ri(e,y,P-y|0),k=k+4|0}while(k>>>0<=It>>>0);if(ie|0&&ri(e,5710,1),k>>>0>>0&(_|0)>0)for(;;){if(y=aa(t[k>>2]|0,0,le)|0,y>>>0>zt>>>0){pa(zt|0,48,y-Pn|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}if(ri(e,y,(_|0)<9?_:9),k=k+4|0,y=_+-9|0,k>>>0>>0&(_|0)>9)_=y;else{_=y;break}}wi(e,48,_+9|0,9,0)}else{if(ie=Pe?qe:pe+4|0,(_|0)>-1){Pe=zt+9|0,le=(le|0)==0,o=Pe,P=0-Pn|0,q=zt+8|0,T=pe;do{y=aa(t[T>>2]|0,0,Pe)|0,(y|0)==(Pe|0)&&(c[q>>0]=48,y=q);do if((T|0)==(pe|0)){if(k=y+1|0,ri(e,y,1),le&(_|0)<1){y=k;break}ri(e,5710,1),y=k}else{if(y>>>0<=zt>>>0)break;pa(zt|0,48,y+P|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}while(0);Pn=o-y|0,ri(e,y,(_|0)>(Pn|0)?Pn:_),_=_-Pn|0,T=T+4|0}while(T>>>0>>0&(_|0)>-1)}wi(e,48,_+18|0,18,0),ri(e,ke,gn-ke|0)}wi(e,32,r,d,s^8192)}else zt=(l&32|0)!=0,d=Ht+3|0,wi(e,32,r,d,s&-65537),ri(e,Ln,Ht),ri(e,n!=n|!1?zt?5686:5690:zt?5678:5682,3),wi(e,32,r,d,s^8192);while(0);return h=Dr,((d|0)<(r|0)?r:d)|0}function b8(e){e=+e;var n=0;return L[j>>3]=e,n=t[j>>2]|0,be=t[j+4>>2]|0,n|0}function gL(e,n){return e=+e,n=n|0,+ +G8(e,n)}function G8(e,n){e=+e,n=n|0;var r=0,o=0,s=0;switch(L[j>>3]=e,r=t[j>>2]|0,o=t[j+4>>2]|0,s=ch(r|0,o|0,52)|0,s&2047){case 0:{e!=0?(e=+G8(e*18446744073709552e3,n),r=(t[n>>2]|0)+-64|0):r=0,t[n>>2]=r;break}case 2047:break;default:t[n>>2]=(s&2047)+-1022,t[j>>2]=r,t[j+4>>2]=o&-2146435073|1071644672,e=+L[j>>3]}return+e}function _L(e,n,r){e=e|0,n=n|0,r=r|0;do if(e){if(n>>>0<128){c[e>>0]=n,e=1;break}if(!(t[t[(yL()|0)+188>>2]>>2]|0))if((n&-128|0)==57216){c[e>>0]=n,e=1;break}else{t[(ca()|0)>>2]=84,e=-1;break}if(n>>>0<2048){c[e>>0]=n>>>6|192,c[e+1>>0]=n&63|128,e=2;break}if(n>>>0<55296|(n&-8192|0)==57344){c[e>>0]=n>>>12|224,c[e+1>>0]=n>>>6&63|128,c[e+2>>0]=n&63|128,e=3;break}if((n+-65536|0)>>>0<1048576){c[e>>0]=n>>>18|240,c[e+1>>0]=n>>>12&63|128,c[e+2>>0]=n>>>6&63|128,c[e+3>>0]=n&63|128,e=4;break}else{t[(ca()|0)>>2]=84,e=-1;break}}else e=1;while(0);return e|0}function yL(){return b4()|0}function wL(){return b4()|0}function DL(e,n){e=e|0,n=n|0;var r=0,o=0;for(o=0;;){if((C[5712+o>>0]|0)==(e|0)){e=2;break}if(r=o+1|0,(r|0)==87){r=5800,o=87,e=5;break}else o=r}if((e|0)==2&&(o?(r=5800,e=5):r=5800),(e|0)==5)for(;;){do e=r,r=r+1|0;while((c[e>>0]|0)!=0);if(o=o+-1|0,o)e=5;else break}return EL(r,t[n+20>>2]|0)|0}function EL(e,n){return e=e|0,n=n|0,SL(e,n)|0}function SL(e,n){return e=e|0,n=n|0,n?n=CL(t[n>>2]|0,t[n+4>>2]|0,e)|0:n=0,(n|0?n:e)|0}function CL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;q=(t[e>>2]|0)+1794895138|0,l=fc(t[e+8>>2]|0,q)|0,o=fc(t[e+12>>2]|0,q)|0,s=fc(t[e+16>>2]|0,q)|0;e:do if((l>>>0>>2>>>0?(P=n-(l<<2)|0,o>>>0

>>0&s>>>0

>>0):0)?((s|o)&3|0)==0:0){for(P=o>>>2,T=s>>>2,k=0;;){if(_=l>>>1,y=k+_|0,d=y<<1,s=d+P|0,o=fc(t[e+(s<<2)>>2]|0,q)|0,s=fc(t[e+(s+1<<2)>>2]|0,q)|0,!(s>>>0>>0&o>>>0<(n-s|0)>>>0)){o=0;break e}if(c[e+(s+o)>>0]|0){o=0;break e}if(o=U8(r,e+s|0)|0,!o)break;if(o=(o|0)<0,(l|0)==1){o=0;break e}else k=o?k:y,l=o?_:l-_|0}o=d+T|0,s=fc(t[e+(o<<2)>>2]|0,q)|0,o=fc(t[e+(o+1<<2)>>2]|0,q)|0,o>>>0>>0&s>>>0<(n-o|0)>>>0?o=(c[e+(o+s)>>0]|0)==0?e+o|0:0:o=0}else o=0;while(0);return o|0}function fc(e,n){e=e|0,n=n|0;var r=0;return r=Z8(e|0)|0,((n|0)==0?e:r)|0}function TL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=r+16|0,s=t[o>>2]|0,s?l=5:xL(r)|0?o=0:(s=t[o>>2]|0,l=5);e:do if((l|0)==5){if(_=r+20|0,d=t[_>>2]|0,o=d,(s-d|0)>>>0>>0){o=dh[t[r+36>>2]&7](r,e,n)|0;break}t:do if((c[r+75>>0]|0)>-1){for(d=n;;){if(!d){l=0,s=e;break t}if(s=d+-1|0,(c[e+s>>0]|0)==10)break;d=s}if(o=dh[t[r+36>>2]&7](r,e,d)|0,o>>>0>>0)break e;l=d,s=e+d|0,n=n-d|0,o=t[_>>2]|0}else l=0,s=e;while(0);vn(o|0,s|0,n|0)|0,t[_>>2]=(t[_>>2]|0)+n,o=l+n|0}while(0);return o|0}function xL(e){e=e|0;var n=0,r=0;return n=e+74|0,r=c[n>>0]|0,c[n>>0]=r+255|r,n=t[e>>2]|0,n&8?(t[e>>2]=n|32,e=-1):(t[e+8>>2]=0,t[e+4>>2]=0,r=t[e+44>>2]|0,t[e+28>>2]=r,t[e+20>>2]=r,t[e+16>>2]=r+(t[e+48>>2]|0),e=0),e|0}function Ur(e,n){e=w(e),n=w(n);var r=0,o=0;r=V8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(o=V8(n)|0,(o&2147483647)>>>0<=2139095040)if((o^r|0)<0){e=(r|0)<0?n:e;break}else{e=e>2]=e,t[j>>2]|0|0}function cc(e,n){e=w(e),n=w(n);var r=0,o=0;r=Y8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(o=Y8(n)|0,(o&2147483647)>>>0<=2139095040)if((o^r|0)<0){e=(r|0)<0?e:n;break}else{e=e>2]=e,t[j>>2]|0|0}function V4(e,n){e=w(e),n=w(n);var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;l=(D[j>>2]=e,t[j>>2]|0),_=(D[j>>2]=n,t[j>>2]|0),r=l>>>23&255,d=_>>>23&255,y=l&-2147483648,s=_<<1;e:do if((s|0)!=0?!((r|0)==255|((kL(n)|0)&2147483647)>>>0>2139095040):0){if(o=l<<1,o>>>0<=s>>>0)return n=w(e*w(0)),w((o|0)==(s|0)?n:e);if(r)o=l&8388607|8388608;else{if(r=l<<9,(r|0)>-1){o=r,r=0;do r=r+-1|0,o=o<<1;while((o|0)>-1)}else r=0;o=l<<1-r}if(d)_=_&8388607|8388608;else{if(l=_<<9,(l|0)>-1){s=0;do s=s+-1|0,l=l<<1;while((l|0)>-1)}else s=0;d=s,_=_<<1-s}s=o-_|0,l=(s|0)>-1;t:do if((r|0)>(d|0)){for(;;){if(l)if(s)o=s;else break;if(o=o<<1,r=r+-1|0,s=o-_|0,l=(s|0)>-1,(r|0)<=(d|0))break t}n=w(e*w(0));break e}while(0);if(l)if(s)o=s;else{n=w(e*w(0));break}if(o>>>0<8388608)do o=o<<1,r=r+-1|0;while(o>>>0<8388608);(r|0)>0?r=o+-8388608|r<<23:r=o>>>(1-r|0),n=(t[j>>2]=r|y,w(D[j>>2]))}else k=3;while(0);return(k|0)==3&&(n=w(e*n),n=w(n/n)),w(n)}function kL(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function AL(e,n){return e=e|0,n=n|0,q8(t[582]|0,e,n)|0}function $n(e){e=e|0,_n()}function da(e){e=e|0}function OL(e,n){return e=e|0,n=n|0,0}function IL(e){return e=e|0,($8(e+4|0)|0)==-1?(Nl[t[(t[e>>2]|0)+8>>2]&127](e),e=1):e=0,e|0}function $8(e){e=e|0;var n=0;return n=t[e>>2]|0,t[e>>2]=n+-1,n+-1|0}function Tf(e){e=e|0,IL(e)|0&&PL(e)}function PL(e){e=e|0;var n=0;n=e+8|0,((t[n>>2]|0)!=0?($8(n)|0)!=-1:0)||Nl[t[(t[e>>2]|0)+16>>2]&127](e)}function Tt(e){e=e|0;var n=0;for(n=(e|0)==0?1:e;e=uh(n)|0,!(e|0);){if(e=FL()|0,!e){e=0;break}fD[e&0]()}return e|0}function K8(e){return e=e|0,Tt(e)|0}function Ve(e){e=e|0,sh(e)}function ML(e){e=e|0,(c[e+11>>0]|0)<0&&Ve(t[e>>2]|0)}function FL(){var e=0;return e=t[2923]|0,t[2923]=e+0,e|0}function LL(){}function fh(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,o=n-o-(r>>>0>e>>>0|0)>>>0,be=o,e-r>>>0|0|0}function Y4(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,r=e+r>>>0,be=n+o+(r>>>0>>0|0)>>>0,r|0|0}function pa(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(l=e+r|0,n=n&255,(r|0)>=67){for(;e&3;)c[e>>0]=n,e=e+1|0;for(o=l&-4|0,s=o-64|0,d=n|n<<8|n<<16|n<<24;(e|0)<=(s|0);)t[e>>2]=d,t[e+4>>2]=d,t[e+8>>2]=d,t[e+12>>2]=d,t[e+16>>2]=d,t[e+20>>2]=d,t[e+24>>2]=d,t[e+28>>2]=d,t[e+32>>2]=d,t[e+36>>2]=d,t[e+40>>2]=d,t[e+44>>2]=d,t[e+48>>2]=d,t[e+52>>2]=d,t[e+56>>2]=d,t[e+60>>2]=d,e=e+64|0;for(;(e|0)<(o|0);)t[e>>2]=d,e=e+4|0}for(;(e|0)<(l|0);)c[e>>0]=n,e=e+1|0;return l-r|0}function X8(e,n,r){return e=e|0,n=n|0,r=r|0,(r|0)<32?(be=n<>>32-r,e<>>r,e>>>r|(n&(1<>>r-32|0)}function vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;if((r|0)>=8192)return wo(e|0,n|0,r|0)|0;if(l=e|0,s=e+r|0,(e&3)==(n&3)){for(;e&3;){if(!r)return l|0;c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0,r=r-1|0}for(r=s&-4|0,o=r-64|0;(e|0)<=(o|0);)t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2],t[e+16>>2]=t[n+16>>2],t[e+20>>2]=t[n+20>>2],t[e+24>>2]=t[n+24>>2],t[e+28>>2]=t[n+28>>2],t[e+32>>2]=t[n+32>>2],t[e+36>>2]=t[n+36>>2],t[e+40>>2]=t[n+40>>2],t[e+44>>2]=t[n+44>>2],t[e+48>>2]=t[n+48>>2],t[e+52>>2]=t[n+52>>2],t[e+56>>2]=t[n+56>>2],t[e+60>>2]=t[n+60>>2],e=e+64|0,n=n+64|0;for(;(e|0)<(r|0);)t[e>>2]=t[n>>2],e=e+4|0,n=n+4|0}else for(r=s-4|0;(e|0)<(r|0);)c[e>>0]=c[n>>0]|0,c[e+1>>0]=c[n+1>>0]|0,c[e+2>>0]=c[n+2>>0]|0,c[e+3>>0]=c[n+3>>0]|0,e=e+4|0,n=n+4|0;for(;(e|0)<(s|0);)c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0;return l|0}function J8(e){e=e|0;var n=0;return n=c[ce+(e&255)>>0]|0,(n|0)<8?n|0:(n=c[ce+(e>>8&255)>>0]|0,(n|0)<8?n+8|0:(n=c[ce+(e>>16&255)>>0]|0,(n|0)<8?n+16|0:(c[ce+(e>>>24)>>0]|0)+24|0))}function Q8(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0;if(T=e,y=n,k=y,d=r,q=o,_=q,!k)return l=(s|0)!=0,_?l?(t[s>>2]=e|0,t[s+4>>2]=n&0,q=0,s=0,be=q,s|0):(q=0,s=0,be=q,s|0):(l&&(t[s>>2]=(T>>>0)%(d>>>0),t[s+4>>2]=0),q=0,s=(T>>>0)/(d>>>0)>>>0,be=q,s|0);l=(_|0)==0;do if(d){if(!l){if(l=(cr(_|0)|0)-(cr(k|0)|0)|0,l>>>0<=31){P=l+1|0,_=31-l|0,n=l-31>>31,d=P,e=T>>>(P>>>0)&n|k<<_,n=k>>>(P>>>0)&n,l=0,_=T<<_;break}return s?(t[s>>2]=e|0,t[s+4>>2]=y|n&0,q=0,s=0,be=q,s|0):(q=0,s=0,be=q,s|0)}if(l=d-1|0,l&d|0){_=(cr(d|0)|0)+33-(cr(k|0)|0)|0,le=64-_|0,P=32-_|0,y=P>>31,we=_-32|0,n=we>>31,d=_,e=P-1>>31&k>>>(we>>>0)|(k<>>(_>>>0))&n,n=n&k>>>(_>>>0),l=T<>>(we>>>0))&y|T<>31;break}return s|0&&(t[s>>2]=l&T,t[s+4>>2]=0),(d|0)==1?(we=y|n&0,le=e|0|0,be=we,le|0):(le=J8(d|0)|0,we=k>>>(le>>>0)|0,le=k<<32-le|T>>>(le>>>0)|0,be=we,le|0)}else{if(l)return s|0&&(t[s>>2]=(k>>>0)%(d>>>0),t[s+4>>2]=0),we=0,le=(k>>>0)/(d>>>0)>>>0,be=we,le|0;if(!T)return s|0&&(t[s>>2]=0,t[s+4>>2]=(k>>>0)%(_>>>0)),we=0,le=(k>>>0)/(_>>>0)>>>0,be=we,le|0;if(l=_-1|0,!(l&_))return s|0&&(t[s>>2]=e|0,t[s+4>>2]=l&k|n&0),we=0,le=k>>>((J8(_|0)|0)>>>0),be=we,le|0;if(l=(cr(_|0)|0)-(cr(k|0)|0)|0,l>>>0<=30){n=l+1|0,_=31-l|0,d=n,e=k<<_|T>>>(n>>>0),n=k>>>(n>>>0),l=0,_=T<<_;break}return s?(t[s>>2]=e|0,t[s+4>>2]=y|n&0,we=0,le=0,be=we,le|0):(we=0,le=0,be=we,le|0)}while(0);if(!d)k=_,y=0,_=0;else{P=r|0|0,T=q|o&0,k=Y4(P|0,T|0,-1,-1)|0,r=be,y=_,_=0;do o=y,y=l>>>31|y<<1,l=_|l<<1,o=e<<1|o>>>31|0,q=e>>>31|n<<1|0,fh(k|0,r|0,o|0,q|0)|0,le=be,we=le>>31|((le|0)<0?-1:0)<<1,_=we&1,e=fh(o|0,q|0,we&P|0,(((le|0)<0?-1:0)>>31|((le|0)<0?-1:0)<<1)&T|0)|0,n=be,d=d-1|0;while((d|0)!=0);k=y,y=0}return d=0,s|0&&(t[s>>2]=e,t[s+4>>2]=n),we=(l|0)>>>31|(k|d)<<1|(d<<1|l>>>31)&0|y,le=(l<<1|0>>>31)&-2|_,be=we,le|0}function $4(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,Q8(e,n,r,o,0)|0}function xf(e){e=e|0;var n=0,r=0;return r=e+15&-16|0,n=t[N>>2]|0,e=n+r|0,(r|0)>0&(e|0)<(n|0)|(e|0)<0?(vr()|0,Os(12),-1):(t[N>>2]=e,((e|0)>(Xn()|0)?(Bn()|0)==0:0)?(t[N>>2]=n,Os(12),-1):n|0)}function Y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;if((n|0)<(e|0)&(e|0)<(n+r|0)){for(o=e,n=n+r|0,e=e+r|0;(r|0)>0;)e=e-1|0,n=n-1|0,r=r-1|0,c[e>>0]=c[n>>0]|0;e=o}else vn(e,n,r)|0;return e|0}function K4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;return l=h,h=h+16|0,s=l|0,Q8(e,n,r,o,s)|0,h=l,be=t[s+4>>2]|0,t[s>>2]|0|0}function Z8(e){return e=e|0,(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function RL(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,eD[e&1](n|0,r|0,o|0,s|0,l|0)}function NL(e,n,r){e=e|0,n=n|0,r=w(r),tD[e&1](n|0,w(r))}function BL(e,n,r){e=e|0,n=n|0,r=+r,nD[e&31](n|0,+r)}function jL(e,n,r,o){return e=e|0,n=n|0,r=w(r),o=w(o),w(rD[e&0](n|0,w(r),w(o)))}function UL(e,n){e=e|0,n=n|0,Nl[e&127](n|0)}function qL(e,n,r){e=e|0,n=n|0,r=r|0,Bl[e&31](n|0,r|0)}function zL(e,n){return e=e|0,n=n|0,dc[e&31](n|0)|0}function WL(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0,iD[e&1](n|0,+r,+o,s|0)}function HL(e,n,r,o){e=e|0,n=n|0,r=+r,o=+o,CR[e&1](n|0,+r,+o)}function bL(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,dh[e&7](n|0,r|0,o|0)|0}function VL(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,+TR[e&1](n|0,r|0,o|0)}function YL(e,n){return e=e|0,n=n|0,+oD[e&15](n|0)}function $L(e,n,r){return e=e|0,n=n|0,r=+r,xR[e&1](n|0,+r)|0}function KL(e,n,r){return e=e|0,n=n|0,r=r|0,J4[e&15](n|0,r|0)|0}function XL(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=+o,s=+s,l=l|0,kR[e&1](n|0,r|0,+o,+s,l|0)}function JL(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,AR[e&1](n|0,r|0,o|0,s|0,l|0,d|0)}function QL(e,n,r){return e=e|0,n=n|0,r=r|0,+uD[e&7](n|0,r|0)}function ZL(e){return e=e|0,ph[e&7]()|0}function eR(e,n,r,o,s,l){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,sD[e&1](n|0,r|0,o|0,s|0,l|0)|0}function tR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=+s,OR[e&1](n|0,r|0,o|0,+s)}function nR(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,lD[e&1](n|0,r|0,w(o),s|0,w(l),d|0)}function rR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,X1[e&15](n|0,r|0,o|0)}function iR(e){e=e|0,fD[e&0]()}function oR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o,cD[e&15](n|0,r|0,+o)}function uR(e,n,r){return e=e|0,n=+n,r=+r,IR[e&1](+n,+r)|0}function sR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,Q4[e&15](n|0,r|0,o|0,s|0)}function lR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,pt(0)}function fR(e,n){e=e|0,n=w(n),pt(1)}function Lo(e,n){e=e|0,n=+n,pt(2)}function cR(e,n,r){return e=e|0,n=w(n),r=w(r),pt(3),tt}function tn(e){e=e|0,pt(4)}function $1(e,n){e=e|0,n=n|0,pt(5)}function tu(e){return e=e|0,pt(6),0}function aR(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,pt(7)}function dR(e,n,r){e=e|0,n=+n,r=+r,pt(8)}function pR(e,n,r){return e=e|0,n=n|0,r=r|0,pt(9),0}function hR(e,n,r){return e=e|0,n=n|0,r=r|0,pt(10),0}function ac(e){return e=e|0,pt(11),0}function mR(e,n){return e=e|0,n=+n,pt(12),0}function K1(e,n){return e=e|0,n=n|0,pt(13),0}function vR(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0,pt(14)}function gR(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,pt(15)}function X4(e,n){return e=e|0,n=n|0,pt(16),0}function _R(){return pt(17),0}function yR(e,n,r,o,s){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,pt(18),0}function wR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o,pt(19)}function DR(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0,pt(20)}function ah(e,n,r){e=e|0,n=n|0,r=r|0,pt(21)}function ER(){pt(22)}function ha(e,n,r){e=e|0,n=n|0,r=+r,pt(23)}function SR(e,n){return e=+e,n=+n,pt(24),0}function ma(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,pt(25)}var eD=[lR,_I],tD=[fR,x0],nD=[Lo,Kf,Tl,xl,hf,xo,mf,Wa,Hs,mi,Xf,Rc,Jf,ao,$o,kl,Nc,Al,vf,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo],rD=[cR],Nl=[tn,da,Km,Xm,es,a_,d_,p_,YA,$A,KA,oI,uI,sI,kF,AF,OF,Sn,Oc,pf,ti,vi,Nm,Uc,r1,Hd,Pl,mv,Av,Kc,Jc,yp,Eg,na,Ug,Yg,u_,k_,q_,J_,a4,Ct,w9,U9,ex,hx,Ix,_0,s7,S7,W7,uk,Dk,Wk,Qk,tA,_A,DA,jA,JA,eO,gO,RO,d1,vP,YP,lM,SM,GM,uF,gF,wF,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn],Bl=[$1,ja,Ua,$f,gu,co,qa,Ws,za,Mc,Fc,Lc,po,Ce,ze,Et,on,sr,mn,Zf,gd,xd,H9,rx,ck,yP,HO,C8,$1,$1,$1,$1],dc=[tu,iL,Ba,m,b,ee,Ye,Ze,ut,In,jr,gi,Pm,Ha,Ya,Fx,Tk,wO,SP,Qo,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu],iD=[aR,Sd],CR=[dR,zA],dh=[pR,j8,oL,lL,Gv,P_,a7,kM],TR=[hR,Op],oD=[ac,_i,Re,pr,Cd,ho,bs,$a,Td,qc,ac,ac,ac,ac,ac,ac],xR=[mR,Kk],J4=[K1,OL,vd,Vc,_v,ig,pg,f_,H_,_x,Xu,dM,K1,K1,K1,K1],kR=[vR,iv],AR=[gR,KM],uD=[X4,Hr,Ka,kd,Xa,Jg,X4,X4],ph=[_R,Ja,Z0,g0,oA,TA,iO,CF],sD=[yR,or],OR=[wR,m4],lD=[DR,Bc],X1=[ah,S,A0,Vn,ni,Mv,Tg,dn,C9,fo,zI,JP,cF,ah,ah,ah],fD=[ER],cD=[ha,Ic,vu,Pc,Qu,Qf,k0,v,W1,k7,Gk,ha,ha,ha,ha,ha],IR=[SR,GA],Q4=[ma,Fg,zx,V7,Lk,aA,PA,aO,qO,OP,RF,ma,ma,ma,ma,ma];return{_llvm_bswap_i32:Z8,dynCall_idd:uR,dynCall_i:ZL,_i64Subtract:fh,___udivdi3:$4,dynCall_vif:NL,setThrew:vl,dynCall_viii:rR,_bitshift64Lshr:ch,_bitshift64Shl:X8,dynCall_vi:UL,dynCall_viiddi:XL,dynCall_diii:VL,dynCall_iii:KL,_memset:pa,_sbrk:xf,_memcpy:vn,__GLOBAL__sub_I_Yoga_cpp:t0,dynCall_vii:qL,___uremdi3:K4,dynCall_vid:BL,stackAlloc:zi,_nbind_init:VF,getTempRet0:fu,dynCall_di:YL,dynCall_iid:$L,setTempRet0:gl,_i64Add:Y4,dynCall_fiff:jL,dynCall_iiii:bL,_emscripten_get_global_libc:rL,dynCall_viid:oR,dynCall_viiid:tR,dynCall_viififi:nR,dynCall_ii:zL,__GLOBAL__sub_I_Binding_cc:lP,dynCall_viiii:sR,dynCall_iiiiii:eR,stackSave:lu,dynCall_viiiii:RL,__GLOBAL__sub_I_nbind_cc:Gs,dynCall_vidd:HL,_free:sh,runPostSets:LL,dynCall_viiiiii:JL,establishStackSpace:O0,_memmove:Y1,stackRestore:Ho,_malloc:uh,__GLOBAL__sub_I_common_cc:AO,dynCall_viddi:WL,dynCall_dii:QL,dynCall_v:iR}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(i){this.name="ExitStatus",this.message="Program terminated with exit("+i+")",this.status=i}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function i(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=i)},Module.callMain=Module.callMain=function(u){u=u||[],ensureInitRuntime();var f=u.length+1;function c(){for(var x=0;x<4-1;x++)g.push(0)}var g=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];c();for(var t=0;t0||(preRun(),runDependencies>0)||Module.calledRun)return;function u(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(i),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),u()},1)):u()}Module.run=Module.run=run;function exit(i,u){u&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=i,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(i)),ENVIRONMENT_IS_NODE&&process.exit(i),Module.quit(i,new ExitStatus(i)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(i){Module.onAbort&&Module.onAbort(i),i!==void 0?(Module.print(i),Module.printErr(i),i=JSON.stringify(i)):i="",ABORT=!0,EXITSTATUS=1;var u=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,f="abort("+i+") at "+stackTrace()+u;throw abortDecorators&&abortDecorators.forEach(function(c){f=c(f,i)}),f}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var hc=Me((hb,vE)=>{"use strict";var wN=hE(),DN=mE(),Py=!1,My=null;DN({},function(i,u){if(!Py){if(Py=!0,i)throw i;My=u}});if(!Py)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");vE.exports=wN(My.bind,My.lib)});var _E=Me((mb,gE)=>{"use strict";gE.exports=({onlyFirst:i=!1}={})=>{let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,i?void 0:"g")}});var Fy=Me((vb,yE)=>{"use strict";var EN=_E();yE.exports=i=>typeof i=="string"?i.replace(EN(),""):i});var Ry=Me((gb,Ly)=>{"use strict";var wE=i=>Number.isNaN(i)?!1:i>=4352&&(i<=4447||i===9001||i===9002||11904<=i&&i<=12871&&i!==12351||12880<=i&&i<=19903||19968<=i&&i<=42182||43360<=i&&i<=43388||44032<=i&&i<=55203||63744<=i&&i<=64255||65040<=i&&i<=65049||65072<=i&&i<=65131||65281<=i&&i<=65376||65504<=i&&i<=65510||110592<=i&&i<=110593||127488<=i&&i<=127569||131072<=i&&i<=262141);Ly.exports=wE;Ly.exports.default=wE});var EE=Me((_b,DE)=>{"use strict";DE.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Mh=Me((yb,Ny)=>{"use strict";var SN=Fy(),CN=Ry(),TN=EE(),SE=i=>{if(i=i.replace(TN()," "),typeof i!="string"||i.length===0)return 0;i=SN(i);let u=0;for(let f=0;f=127&&c<=159||c>=768&&c<=879||(c>65535&&f++,u+=CN(c)?2:1)}return u};Ny.exports=SE;Ny.exports.default=SE});var jy=Me((wb,By)=>{"use strict";var xN=Mh(),CE=i=>{let u=0;for(let f of i.split(` -`))u=Math.max(u,xN(f));return u};By.exports=CE;By.exports.default=CE});var TE=Me(a2=>{"use strict";var kN=a2&&a2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(a2,"__esModule",{value:!0});var AN=kN(jy()),Uy={};a2.default=i=>{if(i.length===0)return{width:0,height:0};if(Uy[i])return Uy[i];let u=AN.default(i),f=i.split(` -`).length;return Uy[i]={width:u,height:f},{width:u,height:f}}});var xE=Me(d2=>{"use strict";var ON=d2&&d2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(d2,"__esModule",{value:!0});var hr=ON(hc()),IN=(i,u)=>{"position"in u&&i.setPositionType(u.position==="absolute"?hr.default.POSITION_TYPE_ABSOLUTE:hr.default.POSITION_TYPE_RELATIVE)},PN=(i,u)=>{"marginLeft"in u&&i.setMargin(hr.default.EDGE_START,u.marginLeft||0),"marginRight"in u&&i.setMargin(hr.default.EDGE_END,u.marginRight||0),"marginTop"in u&&i.setMargin(hr.default.EDGE_TOP,u.marginTop||0),"marginBottom"in u&&i.setMargin(hr.default.EDGE_BOTTOM,u.marginBottom||0)},MN=(i,u)=>{"paddingLeft"in u&&i.setPadding(hr.default.EDGE_LEFT,u.paddingLeft||0),"paddingRight"in u&&i.setPadding(hr.default.EDGE_RIGHT,u.paddingRight||0),"paddingTop"in u&&i.setPadding(hr.default.EDGE_TOP,u.paddingTop||0),"paddingBottom"in u&&i.setPadding(hr.default.EDGE_BOTTOM,u.paddingBottom||0)},FN=(i,u)=>{var f;"flexGrow"in u&&i.setFlexGrow((f=u.flexGrow)!==null&&f!==void 0?f:0),"flexShrink"in u&&i.setFlexShrink(typeof u.flexShrink=="number"?u.flexShrink:1),"flexDirection"in u&&(u.flexDirection==="row"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_ROW),u.flexDirection==="row-reverse"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_ROW_REVERSE),u.flexDirection==="column"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_COLUMN),u.flexDirection==="column-reverse"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in u&&(typeof u.flexBasis=="number"?i.setFlexBasis(u.flexBasis):typeof u.flexBasis=="string"?i.setFlexBasisPercent(Number.parseInt(u.flexBasis,10)):i.setFlexBasis(NaN)),"alignItems"in u&&((u.alignItems==="stretch"||!u.alignItems)&&i.setAlignItems(hr.default.ALIGN_STRETCH),u.alignItems==="flex-start"&&i.setAlignItems(hr.default.ALIGN_FLEX_START),u.alignItems==="center"&&i.setAlignItems(hr.default.ALIGN_CENTER),u.alignItems==="flex-end"&&i.setAlignItems(hr.default.ALIGN_FLEX_END)),"alignSelf"in u&&((u.alignSelf==="auto"||!u.alignSelf)&&i.setAlignSelf(hr.default.ALIGN_AUTO),u.alignSelf==="flex-start"&&i.setAlignSelf(hr.default.ALIGN_FLEX_START),u.alignSelf==="center"&&i.setAlignSelf(hr.default.ALIGN_CENTER),u.alignSelf==="flex-end"&&i.setAlignSelf(hr.default.ALIGN_FLEX_END)),"justifyContent"in u&&((u.justifyContent==="flex-start"||!u.justifyContent)&&i.setJustifyContent(hr.default.JUSTIFY_FLEX_START),u.justifyContent==="center"&&i.setJustifyContent(hr.default.JUSTIFY_CENTER),u.justifyContent==="flex-end"&&i.setJustifyContent(hr.default.JUSTIFY_FLEX_END),u.justifyContent==="space-between"&&i.setJustifyContent(hr.default.JUSTIFY_SPACE_BETWEEN),u.justifyContent==="space-around"&&i.setJustifyContent(hr.default.JUSTIFY_SPACE_AROUND))},LN=(i,u)=>{var f,c;"width"in u&&(typeof u.width=="number"?i.setWidth(u.width):typeof u.width=="string"?i.setWidthPercent(Number.parseInt(u.width,10)):i.setWidthAuto()),"height"in u&&(typeof u.height=="number"?i.setHeight(u.height):typeof u.height=="string"?i.setHeightPercent(Number.parseInt(u.height,10)):i.setHeightAuto()),"minWidth"in u&&(typeof u.minWidth=="string"?i.setMinWidthPercent(Number.parseInt(u.minWidth,10)):i.setMinWidth((f=u.minWidth)!==null&&f!==void 0?f:0)),"minHeight"in u&&(typeof u.minHeight=="string"?i.setMinHeightPercent(Number.parseInt(u.minHeight,10)):i.setMinHeight((c=u.minHeight)!==null&&c!==void 0?c:0))},RN=(i,u)=>{"display"in u&&i.setDisplay(u.display==="flex"?hr.default.DISPLAY_FLEX:hr.default.DISPLAY_NONE)},NN=(i,u)=>{if("borderStyle"in u){let f=typeof u.borderStyle=="string"?1:0;i.setBorder(hr.default.EDGE_TOP,f),i.setBorder(hr.default.EDGE_BOTTOM,f),i.setBorder(hr.default.EDGE_LEFT,f),i.setBorder(hr.default.EDGE_RIGHT,f)}};d2.default=(i,u={})=>{IN(i,u),PN(i,u),MN(i,u),FN(i,u),LN(i,u),RN(i,u),NN(i,u)}});var AE=Me((Sb,kE)=>{"use strict";kE.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var qy=Me((Cb,OE)=>{var p2=AE(),IE={};for(let i of Object.keys(p2))IE[p2[i]]=i;var Xt={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};OE.exports=Xt;for(let i of Object.keys(Xt)){if(!("channels"in Xt[i]))throw new Error("missing channels property: "+i);if(!("labels"in Xt[i]))throw new Error("missing channel labels property: "+i);if(Xt[i].labels.length!==Xt[i].channels)throw new Error("channel and label counts mismatch: "+i);let{channels:u,labels:f}=Xt[i];delete Xt[i].channels,delete Xt[i].labels,Object.defineProperty(Xt[i],"channels",{value:u}),Object.defineProperty(Xt[i],"labels",{value:f})}Xt.rgb.hsl=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.min(u,f,c),t=Math.max(u,f,c),C=t-g,A,x;t===g?A=0:u===t?A=(f-c)/C:f===t?A=2+(c-u)/C:c===t&&(A=4+(u-f)/C),A=Math.min(A*60,360),A<0&&(A+=360);let D=(g+t)/2;return t===g?x=0:D<=.5?x=C/(t+g):x=C/(2-t-g),[A,x*100,D*100]};Xt.rgb.hsv=function(i){let u,f,c,g,t,C=i[0]/255,A=i[1]/255,x=i[2]/255,D=Math.max(C,A,x),L=D-Math.min(C,A,x),N=function(j){return(D-j)/6/L+1/2};return L===0?(g=0,t=0):(t=L/D,u=N(C),f=N(A),c=N(x),C===D?g=c-f:A===D?g=1/3+u-c:x===D&&(g=2/3+f-u),g<0?g+=1:g>1&&(g-=1)),[g*360,t*100,D*100]};Xt.rgb.hwb=function(i){let u=i[0],f=i[1],c=i[2],g=Xt.rgb.hsl(i)[0],t=1/255*Math.min(u,Math.min(f,c));return c=1-1/255*Math.max(u,Math.max(f,c)),[g,t*100,c*100]};Xt.rgb.cmyk=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.min(1-u,1-f,1-c),t=(1-u-g)/(1-g)||0,C=(1-f-g)/(1-g)||0,A=(1-c-g)/(1-g)||0;return[t*100,C*100,A*100,g*100]};function BN(i,u){return(i[0]-u[0])**2+(i[1]-u[1])**2+(i[2]-u[2])**2}Xt.rgb.keyword=function(i){let u=IE[i];if(u)return u;let f=Infinity,c;for(let g of Object.keys(p2)){let t=p2[g],C=BN(i,t);C.04045?((u+.055)/1.055)**2.4:u/12.92,f=f>.04045?((f+.055)/1.055)**2.4:f/12.92,c=c>.04045?((c+.055)/1.055)**2.4:c/12.92;let g=u*.4124+f*.3576+c*.1805,t=u*.2126+f*.7152+c*.0722,C=u*.0193+f*.1192+c*.9505;return[g*100,t*100,C*100]};Xt.rgb.lab=function(i){let u=Xt.rgb.xyz(i),f=u[0],c=u[1],g=u[2];f/=95.047,c/=100,g/=108.883,f=f>.008856?f**(1/3):7.787*f+16/116,c=c>.008856?c**(1/3):7.787*c+16/116,g=g>.008856?g**(1/3):7.787*g+16/116;let t=116*c-16,C=500*(f-c),A=200*(c-g);return[t,C,A]};Xt.hsl.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100,g,t,C;if(f===0)return C=c*255,[C,C,C];c<.5?g=c*(1+f):g=c+f-c*f;let A=2*c-g,x=[0,0,0];for(let D=0;D<3;D++)t=u+1/3*-(D-1),t<0&&t++,t>1&&t--,6*t<1?C=A+(g-A)*6*t:2*t<1?C=g:3*t<2?C=A+(g-A)*(2/3-t)*6:C=A,x[D]=C*255;return x};Xt.hsl.hsv=function(i){let u=i[0],f=i[1]/100,c=i[2]/100,g=f,t=Math.max(c,.01);c*=2,f*=c<=1?c:2-c,g*=t<=1?t:2-t;let C=(c+f)/2,A=c===0?2*g/(t+g):2*f/(c+f);return[u,A*100,C*100]};Xt.hsv.rgb=function(i){let u=i[0]/60,f=i[1]/100,c=i[2]/100,g=Math.floor(u)%6,t=u-Math.floor(u),C=255*c*(1-f),A=255*c*(1-f*t),x=255*c*(1-f*(1-t));switch(c*=255,g){case 0:return[c,x,C];case 1:return[A,c,C];case 2:return[C,c,x];case 3:return[C,A,c];case 4:return[x,C,c];case 5:return[c,C,A]}};Xt.hsv.hsl=function(i){let u=i[0],f=i[1]/100,c=i[2]/100,g=Math.max(c,.01),t,C;C=(2-f)*c;let A=(2-f)*g;return t=f*g,t/=A<=1?A:2-A,t=t||0,C/=2,[u,t*100,C*100]};Xt.hwb.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100,g=f+c,t;g>1&&(f/=g,c/=g);let C=Math.floor(6*u),A=1-c;t=6*u-C,(C&1)!=0&&(t=1-t);let x=f+t*(A-f),D,L,N;switch(C){default:case 6:case 0:D=A,L=x,N=f;break;case 1:D=x,L=A,N=f;break;case 2:D=f,L=A,N=x;break;case 3:D=f,L=x,N=A;break;case 4:D=x,L=f,N=A;break;case 5:D=A,L=f,N=x;break}return[D*255,L*255,N*255]};Xt.cmyk.rgb=function(i){let u=i[0]/100,f=i[1]/100,c=i[2]/100,g=i[3]/100,t=1-Math.min(1,u*(1-g)+g),C=1-Math.min(1,f*(1-g)+g),A=1-Math.min(1,c*(1-g)+g);return[t*255,C*255,A*255]};Xt.xyz.rgb=function(i){let u=i[0]/100,f=i[1]/100,c=i[2]/100,g,t,C;return g=u*3.2406+f*-1.5372+c*-.4986,t=u*-.9689+f*1.8758+c*.0415,C=u*.0557+f*-.204+c*1.057,g=g>.0031308?1.055*g**(1/2.4)-.055:g*12.92,t=t>.0031308?1.055*t**(1/2.4)-.055:t*12.92,C=C>.0031308?1.055*C**(1/2.4)-.055:C*12.92,g=Math.min(Math.max(0,g),1),t=Math.min(Math.max(0,t),1),C=Math.min(Math.max(0,C),1),[g*255,t*255,C*255]};Xt.xyz.lab=function(i){let u=i[0],f=i[1],c=i[2];u/=95.047,f/=100,c/=108.883,u=u>.008856?u**(1/3):7.787*u+16/116,f=f>.008856?f**(1/3):7.787*f+16/116,c=c>.008856?c**(1/3):7.787*c+16/116;let g=116*f-16,t=500*(u-f),C=200*(f-c);return[g,t,C]};Xt.lab.xyz=function(i){let u=i[0],f=i[1],c=i[2],g,t,C;t=(u+16)/116,g=f/500+t,C=t-c/200;let A=t**3,x=g**3,D=C**3;return t=A>.008856?A:(t-16/116)/7.787,g=x>.008856?x:(g-16/116)/7.787,C=D>.008856?D:(C-16/116)/7.787,g*=95.047,t*=100,C*=108.883,[g,t,C]};Xt.lab.lch=function(i){let u=i[0],f=i[1],c=i[2],g;g=Math.atan2(c,f)*360/2/Math.PI,g<0&&(g+=360);let C=Math.sqrt(f*f+c*c);return[u,C,g]};Xt.lch.lab=function(i){let u=i[0],f=i[1],g=i[2]/360*2*Math.PI,t=f*Math.cos(g),C=f*Math.sin(g);return[u,t,C]};Xt.rgb.ansi16=function(i,u=null){let[f,c,g]=i,t=u===null?Xt.rgb.hsv(i)[2]:u;if(t=Math.round(t/50),t===0)return 30;let C=30+(Math.round(g/255)<<2|Math.round(c/255)<<1|Math.round(f/255));return t===2&&(C+=60),C};Xt.hsv.ansi16=function(i){return Xt.rgb.ansi16(Xt.hsv.rgb(i),i[2])};Xt.rgb.ansi256=function(i){let u=i[0],f=i[1],c=i[2];return u===f&&f===c?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(f/255*5)+Math.round(c/255*5)};Xt.ansi16.rgb=function(i){let u=i%10;if(u===0||u===7)return i>50&&(u+=3.5),u=u/10.5*255,[u,u,u];let f=(~~(i>50)+1)*.5,c=(u&1)*f*255,g=(u>>1&1)*f*255,t=(u>>2&1)*f*255;return[c,g,t]};Xt.ansi256.rgb=function(i){if(i>=232){let t=(i-232)*10+8;return[t,t,t]}i-=16;let u,f=Math.floor(i/36)/5*255,c=Math.floor((u=i%36)/6)/5*255,g=u%6/5*255;return[f,c,g]};Xt.rgb.hex=function(i){let f=(((Math.round(i[0])&255)<<16)+((Math.round(i[1])&255)<<8)+(Math.round(i[2])&255)).toString(16).toUpperCase();return"000000".substring(f.length)+f};Xt.hex.rgb=function(i){let u=i.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!u)return[0,0,0];let f=u[0];u[0].length===3&&(f=f.split("").map(A=>A+A).join(""));let c=parseInt(f,16),g=c>>16&255,t=c>>8&255,C=c&255;return[g,t,C]};Xt.rgb.hcg=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.max(Math.max(u,f),c),t=Math.min(Math.min(u,f),c),C=g-t,A,x;return C<1?A=t/(1-C):A=0,C<=0?x=0:g===u?x=(f-c)/C%6:g===f?x=2+(c-u)/C:x=4+(u-f)/C,x/=6,x%=1,[x*360,C*100,A*100]};Xt.hsl.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=f<.5?2*u*f:2*u*(1-f),g=0;return c<1&&(g=(f-.5*c)/(1-c)),[i[0],c*100,g*100]};Xt.hsv.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=u*f,g=0;return c<1&&(g=(f-c)/(1-c)),[i[0],c*100,g*100]};Xt.hcg.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100;if(f===0)return[c*255,c*255,c*255];let g=[0,0,0],t=u%1*6,C=t%1,A=1-C,x=0;switch(Math.floor(t)){case 0:g[0]=1,g[1]=C,g[2]=0;break;case 1:g[0]=A,g[1]=1,g[2]=0;break;case 2:g[0]=0,g[1]=1,g[2]=C;break;case 3:g[0]=0,g[1]=A,g[2]=1;break;case 4:g[0]=C,g[1]=0,g[2]=1;break;default:g[0]=1,g[1]=0,g[2]=A}return x=(1-f)*c,[(f*g[0]+x)*255,(f*g[1]+x)*255,(f*g[2]+x)*255]};Xt.hcg.hsv=function(i){let u=i[1]/100,f=i[2]/100,c=u+f*(1-u),g=0;return c>0&&(g=u/c),[i[0],g*100,c*100]};Xt.hcg.hsl=function(i){let u=i[1]/100,c=i[2]/100*(1-u)+.5*u,g=0;return c>0&&c<.5?g=u/(2*c):c>=.5&&c<1&&(g=u/(2*(1-c))),[i[0],g*100,c*100]};Xt.hcg.hwb=function(i){let u=i[1]/100,f=i[2]/100,c=u+f*(1-u);return[i[0],(c-u)*100,(1-c)*100]};Xt.hwb.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=1-f,g=c-u,t=0;return g<1&&(t=(c-g)/(1-g)),[i[0],g*100,t*100]};Xt.apple.rgb=function(i){return[i[0]/65535*255,i[1]/65535*255,i[2]/65535*255]};Xt.rgb.apple=function(i){return[i[0]/255*65535,i[1]/255*65535,i[2]/255*65535]};Xt.gray.rgb=function(i){return[i[0]/100*255,i[0]/100*255,i[0]/100*255]};Xt.gray.hsl=function(i){return[0,0,i[0]]};Xt.gray.hsv=Xt.gray.hsl;Xt.gray.hwb=function(i){return[0,100,i[0]]};Xt.gray.cmyk=function(i){return[0,0,0,i[0]]};Xt.gray.lab=function(i){return[i[0],0,0]};Xt.gray.hex=function(i){let u=Math.round(i[0]/100*255)&255,c=((u<<16)+(u<<8)+u).toString(16).toUpperCase();return"000000".substring(c.length)+c};Xt.rgb.gray=function(i){return[(i[0]+i[1]+i[2])/3/255*100]}});var ME=Me((Tb,PE)=>{var Fh=qy();function jN(){let i={},u=Object.keys(Fh);for(let f=u.length,c=0;c{var zy=qy(),WN=ME(),Ca={},HN=Object.keys(zy);function bN(i){let u=function(...f){let c=f[0];return c==null?c:(c.length>1&&(f=c),i(f))};return"conversion"in i&&(u.conversion=i.conversion),u}function GN(i){let u=function(...f){let c=f[0];if(c==null)return c;c.length>1&&(f=c);let g=i(f);if(typeof g=="object")for(let t=g.length,C=0;C{Ca[i]={},Object.defineProperty(Ca[i],"channels",{value:zy[i].channels}),Object.defineProperty(Ca[i],"labels",{value:zy[i].labels});let u=WN(i);Object.keys(u).forEach(c=>{let g=u[c];Ca[i][c]=GN(g),Ca[i][c].raw=bN(g)})});FE.exports=Ca});var Rh=Me((kb,RE)=>{"use strict";var NE=(i,u)=>(...f)=>`[${i(...f)+u}m`,BE=(i,u)=>(...f)=>{let c=i(...f);return`[${38+u};5;${c}m`},jE=(i,u)=>(...f)=>{let c=i(...f);return`[${38+u};2;${c[0]};${c[1]};${c[2]}m`},Lh=i=>i,UE=(i,u,f)=>[i,u,f],Ta=(i,u,f)=>{Object.defineProperty(i,u,{get:()=>{let c=f();return Object.defineProperty(i,u,{value:c,enumerable:!0,configurable:!0}),c},enumerable:!0,configurable:!0})},Wy,xa=(i,u,f,c)=>{Wy===void 0&&(Wy=LE());let g=c?10:0,t={};for(let[C,A]of Object.entries(Wy)){let x=C==="ansi16"?"ansi":C;C===u?t[x]=i(f,g):typeof A=="object"&&(t[x]=i(A[u],g))}return t};function VN(){let i=new Map,u={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};u.color.gray=u.color.blackBright,u.bgColor.bgGray=u.bgColor.bgBlackBright,u.color.grey=u.color.blackBright,u.bgColor.bgGrey=u.bgColor.bgBlackBright;for(let[f,c]of Object.entries(u)){for(let[g,t]of Object.entries(c))u[g]={open:`[${t[0]}m`,close:`[${t[1]}m`},c[g]=u[g],i.set(t[0],t[1]);Object.defineProperty(u,f,{value:c,enumerable:!1})}return Object.defineProperty(u,"codes",{value:i,enumerable:!1}),u.color.close="",u.bgColor.close="",Ta(u.color,"ansi",()=>xa(NE,"ansi16",Lh,!1)),Ta(u.color,"ansi256",()=>xa(BE,"ansi256",Lh,!1)),Ta(u.color,"ansi16m",()=>xa(jE,"rgb",UE,!1)),Ta(u.bgColor,"ansi",()=>xa(NE,"ansi16",Lh,!0)),Ta(u.bgColor,"ansi256",()=>xa(BE,"ansi256",Lh,!0)),Ta(u.bgColor,"ansi16m",()=>xa(jE,"rgb",UE,!0)),u}Object.defineProperty(RE,"exports",{enumerable:!0,get:VN})});var WE=Me((Ab,qE)=>{"use strict";var h2=Mh(),YN=Fy(),$N=Rh(),Hy=new Set(["","\x9B"]),KN=39,zE=i=>`${Hy.values().next().value}[${i}m`,XN=i=>i.split(" ").map(u=>h2(u)),by=(i,u,f)=>{let c=[...u],g=!1,t=h2(YN(i[i.length-1]));for(let[C,A]of c.entries()){let x=h2(A);if(t+x<=f?i[i.length-1]+=A:(i.push(A),t=0),Hy.has(A))g=!0;else if(g&&A==="m"){g=!1;continue}g||(t+=x,t===f&&C0&&i.length>1&&(i[i.length-2]+=i.pop())},JN=i=>{let u=i.split(" "),f=u.length;for(;f>0&&!(h2(u[f-1])>0);)f--;return f===u.length?i:u.slice(0,f).join(" ")+u.slice(f).join("")},QN=(i,u,f={})=>{if(f.trim!==!1&&i.trim()==="")return"";let c="",g="",t,C=XN(i),A=[""];for(let[x,D]of i.split(" ").entries()){f.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let L=h2(A[A.length-1]);if(x!==0&&(L>=u&&(f.wordWrap===!1||f.trim===!1)&&(A.push(""),L=0),(L>0||f.trim===!1)&&(A[A.length-1]+=" ",L++)),f.hard&&C[x]>u){let N=u-L,j=1+Math.floor((C[x]-N-1)/u);Math.floor((C[x]-1)/u)u&&L>0&&C[x]>0){if(f.wordWrap===!1&&Lu&&f.wordWrap===!1){by(A,D,u);continue}A[A.length-1]+=D}f.trim!==!1&&(A=A.map(JN)),c=A.join(` -`);for(let[x,D]of[...c].entries()){if(g+=D,Hy.has(D)){let N=parseFloat(/\d[^m]*/.exec(c.slice(x,x+4)));t=N===KN?null:N}let L=$N.codes.get(Number(t));t&&L&&(c[x+1]===` -`?g+=zE(L):D===` -`&&(g+=zE(t)))}return g};qE.exports=(i,u,f)=>String(i).normalize().replace(/\r\n/g,` -`).split(` -`).map(c=>QN(c,u,f)).join(` -`)});var GE=Me((Ob,HE)=>{"use strict";var bE="[\uD800-\uDBFF][\uDC00-\uDFFF]",ZN=i=>i&&i.exact?new RegExp(`^${bE}$`):new RegExp(bE,"g");HE.exports=ZN});var Gy=Me((Ib,VE)=>{"use strict";var eB=Ry(),tB=GE(),YE=Rh(),$E=["","\x9B"],Nh=i=>`${$E[0]}[${i}m`,KE=(i,u,f)=>{let c=[];i=[...i];for(let g of i){let t=g;g.match(";")&&(g=g.split(";")[0][0]+"0");let C=YE.codes.get(parseInt(g,10));if(C){let A=i.indexOf(C.toString());A>=0?i.splice(A,1):c.push(Nh(u?C:t))}else if(u){c.push(Nh(0));break}else c.push(Nh(t))}if(u&&(c=c.filter((g,t)=>c.indexOf(g)===t),f!==void 0)){let g=Nh(YE.codes.get(parseInt(f,10)));c=c.reduce((t,C)=>C===g?[C,...t]:[...t,C],[])}return c.join("")};VE.exports=(i,u,f)=>{let c=[...i.normalize()],g=[];f=typeof f=="number"?f:c.length;let t=!1,C,A=0,x="";for(let[D,L]of c.entries()){let N=!1;if($E.includes(L)){let j=/\d[^m]*/.exec(i.slice(D,D+18));C=j&&j.length>0?j[0]:void 0,Au&&A<=f)x+=L;else if(A===u&&!t&&C!==void 0)x=KE(g);else if(A>=f){x+=KE(g,!0,C);break}}return x}});var JE=Me((Pb,XE)=>{"use strict";var Bf=Gy(),nB=Mh();function Bh(i,u,f){if(i.charAt(u)===" ")return u;for(let c=1;c<=3;c++)if(f){if(i.charAt(u+c)===" ")return u+c}else if(i.charAt(u-c)===" ")return u-c;return u}XE.exports=(i,u,f)=>{f=dt({position:"end",preferTruncationOnSpace:!1},f);let{position:c,space:g,preferTruncationOnSpace:t}=f,C="\u2026",A=1;if(typeof i!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof i}`);if(typeof u!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof u}`);if(u<1)return"";if(u===1)return C;let x=nB(i);if(x<=u)return i;if(c==="start"){if(t){let D=Bh(i,x-u+1,!0);return C+Bf(i,D,x).trim()}return g===!0&&(C+=" ",A=2),C+Bf(i,x-u+A,x)}if(c==="middle"){g===!0&&(C=" "+C+" ",A=3);let D=Math.floor(u/2);if(t){let L=Bh(i,D),N=Bh(i,x-(u-D)+1,!0);return Bf(i,0,L)+C+Bf(i,N,x).trim()}return Bf(i,0,D)+C+Bf(i,x-(u-D)+A,x)}if(c==="end"){if(t){let D=Bh(i,u-1);return Bf(i,0,D)+C}return g===!0&&(C=" "+C,A=2),Bf(i,0,u-A)+C}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${c}`)}});var Yy=Me(m2=>{"use strict";var QE=m2&&m2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(m2,"__esModule",{value:!0});var rB=QE(WE()),iB=QE(JE()),Vy={};m2.default=(i,u,f)=>{let c=i+String(u)+String(f);if(Vy[c])return Vy[c];let g=i;if(f==="wrap"&&(g=rB.default(i,u,{trim:!1,hard:!0})),f.startsWith("truncate")){let t="end";f==="truncate-middle"&&(t="middle"),f==="truncate-start"&&(t="start"),g=iB.default(i,u,{position:t})}return Vy[c]=g,g}});var Ky=Me($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});var ZE=i=>{let u="";if(i.childNodes.length>0)for(let f of i.childNodes){let c="";f.nodeName==="#text"?c=f.nodeValue:((f.nodeName==="ink-text"||f.nodeName==="ink-virtual-text")&&(c=ZE(f)),c.length>0&&typeof f.internal_transform=="function"&&(c=f.internal_transform(c))),u+=c}return u};$y.default=ZE});var Xy=Me(Zr=>{"use strict";var v2=Zr&&Zr.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Zr,"__esModule",{value:!0});Zr.setTextNodeValue=Zr.createTextNode=Zr.setStyle=Zr.setAttribute=Zr.removeChildNode=Zr.insertBeforeNode=Zr.appendChildNode=Zr.createNode=Zr.TEXT_NAME=void 0;var oB=v2(hc()),e6=v2(TE()),uB=v2(xE()),sB=v2(Yy()),lB=v2(Ky());Zr.TEXT_NAME="#text";Zr.createNode=i=>{var u;let f={nodeName:i,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:i==="ink-virtual-text"?void 0:oB.default.Node.create()};return i==="ink-text"&&((u=f.yogaNode)===null||u===void 0||u.setMeasureFunc(fB.bind(null,f))),f};Zr.appendChildNode=(i,u)=>{var f;u.parentNode&&Zr.removeChildNode(u.parentNode,u),u.parentNode=i,i.childNodes.push(u),u.yogaNode&&((f=i.yogaNode)===null||f===void 0||f.insertChild(u.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.insertBeforeNode=(i,u,f)=>{var c,g;u.parentNode&&Zr.removeChildNode(u.parentNode,u),u.parentNode=i;let t=i.childNodes.indexOf(f);if(t>=0){i.childNodes.splice(t,0,u),u.yogaNode&&((c=i.yogaNode)===null||c===void 0||c.insertChild(u.yogaNode,t));return}i.childNodes.push(u),u.yogaNode&&((g=i.yogaNode)===null||g===void 0||g.insertChild(u.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.removeChildNode=(i,u)=>{var f,c;u.yogaNode&&((c=(f=u.parentNode)===null||f===void 0?void 0:f.yogaNode)===null||c===void 0||c.removeChild(u.yogaNode)),u.parentNode=null;let g=i.childNodes.indexOf(u);g>=0&&i.childNodes.splice(g,1),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.setAttribute=(i,u,f)=>{i.attributes[u]=f};Zr.setStyle=(i,u)=>{i.style=u,i.yogaNode&&uB.default(i.yogaNode,u)};Zr.createTextNode=i=>{let u={nodeName:"#text",nodeValue:i,yogaNode:void 0,parentNode:null,style:{}};return Zr.setTextNodeValue(u,i),u};var fB=function(i,u){var f,c;let g=i.nodeName==="#text"?i.nodeValue:lB.default(i),t=e6.default(g);if(t.width<=u||t.width>=1&&u>0&&u<1)return t;let C=(c=(f=i.style)===null||f===void 0?void 0:f.textWrap)!==null&&c!==void 0?c:"wrap",A=sB.default(g,u,C);return e6.default(A)},t6=i=>{var u;if(!(!i||!i.parentNode))return(u=i.yogaNode)!==null&&u!==void 0?u:t6(i.parentNode)},jh=i=>{let u=t6(i);u==null||u.markDirty()};Zr.setTextNodeValue=(i,u)=>{typeof u!="string"&&(u=String(u)),i.nodeValue=u,jh(i)}});var mc=Me((Rb,n6)=>{"use strict";n6.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}});var g2=Me((Nb,Jy)=>{"use strict";var{EMPTY_BUFFER:cB}=mc();function r6(i,u){if(i.length===0)return cB;if(i.length===1)return i[0];let f=Buffer.allocUnsafe(u),c=0;for(let g=0;g{"use strict";var l6=Symbol("kDone"),Qy=Symbol("kRun"),f6=class{constructor(u){this[l6]=()=>{this.pending--,this[Qy]()},this.concurrency=u||Infinity,this.jobs=[],this.pending=0}add(u){this.jobs.push(u),this[Qy]()}[Qy](){if(this.pending!==this.concurrency&&this.jobs.length){let u=this.jobs.shift();this.pending++,u(this[l6])}}};s6.exports=f6});var w2=Me((jb,a6)=>{"use strict";var _2=require("zlib"),d6=g2(),aB=c6(),{kStatusCode:p6,NOOP:dB}=mc(),pB=Buffer.from([0,0,255,255]),qh=Symbol("permessage-deflate"),Xl=Symbol("total-length"),y2=Symbol("callback"),jf=Symbol("buffers"),Zy=Symbol("error"),zh,h6=class{constructor(u,f,c){if(this._maxPayload=c|0,this._options=u||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!f,this._deflate=null,this._inflate=null,this.params=null,!zh){let g=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;zh=new aB(g)}}static get extensionName(){return"permessage-deflate"}offer(){let u={};return this._options.serverNoContextTakeover&&(u.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(u.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(u.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?u.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(u.client_max_window_bits=!0),u}accept(u){return u=this.normalizeParams(u),this.params=this._isServer?this.acceptAsServer(u):this.acceptAsClient(u),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let u=this._deflate[y2];this._deflate.close(),this._deflate=null,u&&u(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(u){let f=this._options,c=u.find(g=>!(f.serverNoContextTakeover===!1&&g.server_no_context_takeover||g.server_max_window_bits&&(f.serverMaxWindowBits===!1||typeof f.serverMaxWindowBits=="number"&&f.serverMaxWindowBits>g.server_max_window_bits)||typeof f.clientMaxWindowBits=="number"&&!g.client_max_window_bits));if(!c)throw new Error("None of the extension offers can be accepted");return f.serverNoContextTakeover&&(c.server_no_context_takeover=!0),f.clientNoContextTakeover&&(c.client_no_context_takeover=!0),typeof f.serverMaxWindowBits=="number"&&(c.server_max_window_bits=f.serverMaxWindowBits),typeof f.clientMaxWindowBits=="number"?c.client_max_window_bits=f.clientMaxWindowBits:(c.client_max_window_bits===!0||f.clientMaxWindowBits===!1)&&delete c.client_max_window_bits,c}acceptAsClient(u){let f=u[0];if(this._options.clientNoContextTakeover===!1&&f.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!f.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(f.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&f.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return f}normalizeParams(u){return u.forEach(f=>{Object.keys(f).forEach(c=>{let g=f[c];if(g.length>1)throw new Error(`Parameter "${c}" must have only a single value`);if(g=g[0],c==="client_max_window_bits"){if(g!==!0){let t=+g;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${g}`);g=t}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${c}": ${g}`)}else if(c==="server_max_window_bits"){let t=+g;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${g}`);g=t}else if(c==="client_no_context_takeover"||c==="server_no_context_takeover"){if(g!==!0)throw new TypeError(`Invalid value for parameter "${c}": ${g}`)}else throw new Error(`Unknown parameter "${c}"`);f[c]=g})}),u}decompress(u,f,c){zh.add(g=>{this._decompress(u,f,(t,C)=>{g(),c(t,C)})})}compress(u,f,c){zh.add(g=>{this._compress(u,f,(t,C)=>{g(),c(t,C)})})}_decompress(u,f,c){let g=this._isServer?"client":"server";if(!this._inflate){let t=`${g}_max_window_bits`,C=typeof this.params[t]!="number"?_2.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=_2.createInflateRaw(zn(dt({},this._options.zlibInflateOptions),{windowBits:C})),this._inflate[qh]=this,this._inflate[Xl]=0,this._inflate[jf]=[],this._inflate.on("error",mB),this._inflate.on("data",m6)}this._inflate[y2]=c,this._inflate.write(u),f&&this._inflate.write(pB),this._inflate.flush(()=>{let t=this._inflate[Zy];if(t){this._inflate.close(),this._inflate=null,c(t);return}let C=d6.concat(this._inflate[jf],this._inflate[Xl]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Xl]=0,this._inflate[jf]=[],f&&this.params[`${g}_no_context_takeover`]&&this._inflate.reset()),c(null,C)})}_compress(u,f,c){let g=this._isServer?"server":"client";if(!this._deflate){let t=`${g}_max_window_bits`,C=typeof this.params[t]!="number"?_2.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=_2.createDeflateRaw(zn(dt({},this._options.zlibDeflateOptions),{windowBits:C})),this._deflate[Xl]=0,this._deflate[jf]=[],this._deflate.on("error",dB),this._deflate.on("data",hB)}this._deflate[y2]=c,this._deflate.write(u),this._deflate.flush(_2.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let t=d6.concat(this._deflate[jf],this._deflate[Xl]);f&&(t=t.slice(0,t.length-4)),this._deflate[y2]=null,this._deflate[Xl]=0,this._deflate[jf]=[],f&&this.params[`${g}_no_context_takeover`]&&this._deflate.reset(),c(null,t)})}};a6.exports=h6;function hB(i){this[jf].push(i),this[Xl]+=i.length}function m6(i){if(this[Xl]+=i.length,this[qh]._maxPayload<1||this[Xl]<=this[qh]._maxPayload){this[jf].push(i);return}this[Zy]=new RangeError("Max payload size exceeded"),this[Zy][p6]=1009,this.removeListener("data",m6),this.reset()}function mB(i){this[qh]._inflate=null,i[p6]=1007,this[y2](i)}});var t3=Me((Ub,e3)=>{"use strict";function v6(i){return i>=1e3&&i<=1014&&i!==1004&&i!==1005&&i!==1006||i>=3e3&&i<=4999}function g6(i){let u=i.length,f=0;for(;f=u||(i[f+1]&192)!=128||(i[f+2]&192)!=128||i[f]===224&&(i[f+1]&224)==128||i[f]===237&&(i[f+1]&224)==160)return!1;f+=3}else if((i[f]&248)==240){if(f+3>=u||(i[f+1]&192)!=128||(i[f+2]&192)!=128||(i[f+3]&192)!=128||i[f]===240&&(i[f+1]&240)==128||i[f]===244&&i[f+1]>143||i[f]>244)return!1;f+=4}else return!1;return!0}try{let i=require("utf-8-validate");typeof i=="object"&&(i=i.Validation.isValidUTF8),e3.exports={isValidStatusCode:v6,isValidUTF8(u){return u.length<150?g6(u):i(u)}}}catch(i){e3.exports={isValidStatusCode:v6,isValidUTF8:g6}}});var i3=Me((qb,_6)=>{"use strict";var{Writable:vB}=require("stream"),y6=w2(),{BINARY_TYPES:gB,EMPTY_BUFFER:_B,kStatusCode:yB,kWebSocket:wB}=mc(),{concat:n3,toArrayBuffer:DB,unmask:EB}=g2(),{isValidStatusCode:SB,isValidUTF8:w6}=t3(),D2=0,D6=1,E6=2,S6=3,r3=4,CB=5,C6=class extends vB{constructor(u,f,c,g){super();this._binaryType=u||gB[0],this[wB]=void 0,this._extensions=f||{},this._isServer=!!c,this._maxPayload=g|0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=D2,this._loop=!1}_write(u,f,c){if(this._opcode===8&&this._state==D2)return c();this._bufferedBytes+=u.length,this._buffers.push(u),this.startLoop(c)}consume(u){if(this._bufferedBytes-=u,u===this._buffers[0].length)return this._buffers.shift();if(u=c.length?f.set(this._buffers.shift(),g):(f.set(new Uint8Array(c.buffer,c.byteOffset,u),g),this._buffers[0]=c.slice(u)),u-=c.length}while(u>0);return f}startLoop(u){let f;this._loop=!0;do switch(this._state){case D2:f=this.getInfo();break;case D6:f=this.getPayloadLength16();break;case E6:f=this.getPayloadLength64();break;case S6:this.getMask();break;case r3:f=this.getData(u);break;default:this._loop=!1;return}while(this._loop);u(f)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}let u=this.consume(2);if((u[0]&48)!=0)return this._loop=!1,ii(RangeError,"RSV2 and RSV3 must be clear",!0,1002);let f=(u[0]&64)==64;if(f&&!this._extensions[y6.extensionName])return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=(u[0]&128)==128,this._opcode=u[0]&15,this._payloadLength=u[1]&127,this._opcode===0){if(f)return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,ii(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,ii(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=f}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,ii(RangeError,"FIN must be set",!0,1002);if(f)return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,ii(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}else return this._loop=!1,ii(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(u[1]&128)==128,this._isServer){if(!this._masked)return this._loop=!1,ii(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,ii(RangeError,"MASK must be clear",!0,1002);if(this._payloadLength===126)this._state=D6;else if(this._payloadLength===127)this._state=E6;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}let u=this.consume(8),f=u.readUInt32BE(0);return f>Math.pow(2,53-32)-1?(this._loop=!1,ii(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=f*Math.pow(2,32)+u.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,ii(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=S6:this._state=r3}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=r3}getData(u){let f=_B;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(f);if(this._compressed){this._state=CB,this.decompress(f,u);return}return f.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(f)),this.dataMessage()}decompress(u,f){this._extensions[y6.extensionName].decompress(u,this._fin,(g,t)=>{if(g)return f(g);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return f(ii(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(t)}let C=this.dataMessage();if(C)return f(C);this.startLoop(f)})}dataMessage(){if(this._fin){let u=this._messageLength,f=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let c;this._binaryType==="nodebuffer"?c=n3(f,u):this._binaryType==="arraybuffer"?c=DB(n3(f,u)):c=f,this.emit("message",c)}else{let c=n3(f,u);if(!w6(c))return this._loop=!1,ii(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",c.toString())}}this._state=D2}controlMessage(u){if(this._opcode===8)if(this._loop=!1,u.length===0)this.emit("conclude",1005,""),this.end();else{if(u.length===1)return ii(RangeError,"invalid payload length 1",!0,1002);{let f=u.readUInt16BE(0);if(!SB(f))return ii(RangeError,`invalid status code ${f}`,!0,1002);let c=u.slice(2);if(!w6(c))return ii(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",f,c.toString()),this.end()}}else this._opcode===9?this.emit("ping",u):this.emit("pong",u);this._state=D2}};_6.exports=C6;function ii(i,u,f,c){let g=new i(f?`Invalid WebSocket frame: ${u}`:u);return Error.captureStackTrace(g,ii),g[yB]=c,g}});var o3=Me((zb,T6)=>{"use strict";var{randomFillSync:TB}=require("crypto"),x6=w2(),{EMPTY_BUFFER:xB}=mc(),{isValidStatusCode:kB}=t3(),{mask:k6,toBuffer:Jl}=g2(),vc=Buffer.alloc(4),Ql=class{constructor(u,f){this._extensions=f||{},this._socket=u,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(u,f){let c=f.mask&&f.readOnly,g=f.mask?6:2,t=u.length;u.length>=65536?(g+=8,t=127):u.length>125&&(g+=2,t=126);let C=Buffer.allocUnsafe(c?u.length+g:g);return C[0]=f.fin?f.opcode|128:f.opcode,f.rsv1&&(C[0]|=64),C[1]=t,t===126?C.writeUInt16BE(u.length,2):t===127&&(C.writeUInt32BE(0,2),C.writeUInt32BE(u.length,6)),f.mask?(TB(vc,0,4),C[1]|=128,C[g-4]=vc[0],C[g-3]=vc[1],C[g-2]=vc[2],C[g-1]=vc[3],c?(k6(u,vc,C,g,u.length),[C]):(k6(u,vc,u,0,u.length),[C,u])):[C,u]}close(u,f,c,g){let t;if(u===void 0)t=xB;else{if(typeof u!="number"||!kB(u))throw new TypeError("First argument must be a valid error code number");if(f===void 0||f==="")t=Buffer.allocUnsafe(2),t.writeUInt16BE(u,0);else{let C=Buffer.byteLength(f);if(C>123)throw new RangeError("The message must not be greater than 123 bytes");t=Buffer.allocUnsafe(2+C),t.writeUInt16BE(u,0),t.write(f,2)}}this._deflating?this.enqueue([this.doClose,t,c,g]):this.doClose(t,c,g)}doClose(u,f,c){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:8,mask:f,readOnly:!1}),c)}ping(u,f,c){let g=Jl(u);if(g.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,g,f,Jl.readOnly,c]):this.doPing(g,f,Jl.readOnly,c)}doPing(u,f,c,g){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:9,mask:f,readOnly:c}),g)}pong(u,f,c){let g=Jl(u);if(g.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,g,f,Jl.readOnly,c]):this.doPong(g,f,Jl.readOnly,c)}doPong(u,f,c,g){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:10,mask:f,readOnly:c}),g)}send(u,f,c){let g=Jl(u),t=this._extensions[x6.extensionName],C=f.binary?2:1,A=f.compress;if(this._firstFragment?(this._firstFragment=!1,A&&t&&(A=g.length>=t._threshold),this._compress=A):(A=!1,C=0),f.fin&&(this._firstFragment=!0),t){let x={fin:f.fin,rsv1:A,opcode:C,mask:f.mask,readOnly:Jl.readOnly};this._deflating?this.enqueue([this.dispatch,g,this._compress,x,c]):this.dispatch(g,this._compress,x,c)}else this.sendFrame(Ql.frame(g,{fin:f.fin,rsv1:!1,opcode:C,mask:f.mask,readOnly:Jl.readOnly}),c)}dispatch(u,f,c,g){if(!f){this.sendFrame(Ql.frame(u,c),g);return}let t=this._extensions[x6.extensionName];this._bufferedBytes+=u.length,this._deflating=!0,t.compress(u,c.fin,(C,A)=>{if(this._socket.destroyed){let x=new Error("The socket was closed while data was being compressed");typeof g=="function"&&g(x);for(let D=0;D{"use strict";var E2=class{constructor(u,f){this.target=f,this.type=u}},O6=class extends E2{constructor(u,f){super("message",f);this.data=u}},I6=class extends E2{constructor(u,f,c){super("close",c);this.wasClean=c._closeFrameReceived&&c._closeFrameSent,this.reason=f,this.code=u}},P6=class extends E2{constructor(u){super("open",u)}},M6=class extends E2{constructor(u,f){super("error",f);this.message=u.message,this.error=u}},AB={addEventListener(i,u,f){if(typeof u!="function")return;function c(x){u.call(this,new O6(x,this))}function g(x,D){u.call(this,new I6(x,D,this))}function t(x){u.call(this,new M6(x,this))}function C(){u.call(this,new P6(this))}let A=f&&f.once?"once":"on";i==="message"?(c._listener=u,this[A](i,c)):i==="close"?(g._listener=u,this[A](i,g)):i==="error"?(t._listener=u,this[A](i,t)):i==="open"?(C._listener=u,this[A](i,C)):this[A](i,u)},removeEventListener(i,u){let f=this.listeners(i);for(let c=0;c{"use strict";var S2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function rl(i,u,f){i[u]===void 0?i[u]=[f]:i[u].push(f)}function OB(i){let u=Object.create(null);if(i===void 0||i==="")return u;let f=Object.create(null),c=!1,g=!1,t=!1,C,A,x=-1,D=-1,L=0;for(;L{let f=i[u];return Array.isArray(f)||(f=[f]),f.map(c=>[u].concat(Object.keys(c).map(g=>{let t=c[g];return Array.isArray(t)||(t=[t]),t.map(C=>C===!0?g:`${g}=${C}`).join("; ")})).join("; ")).join(", ")}).join(", ")}L6.exports={format:IB,parse:OB}});var a3=Me((bb,R6)=>{"use strict";var PB=require("events"),MB=require("https"),FB=require("http"),N6=require("net"),LB=require("tls"),{randomBytes:RB,createHash:NB}=require("crypto"),{URL:s3}=require("url"),Uf=w2(),BB=i3(),jB=o3(),{BINARY_TYPES:B6,EMPTY_BUFFER:l3,GUID:UB,kStatusCode:qB,kWebSocket:No,NOOP:j6}=mc(),{addEventListener:zB,removeEventListener:WB}=F6(),{format:HB,parse:bB}=u3(),{toBuffer:GB}=g2(),U6=["CONNECTING","OPEN","CLOSING","CLOSED"],f3=[8,13],VB=30*1e3,mr=class extends PB{constructor(u,f,c){super();this._binaryType=B6[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._extensions={},this._protocol="",this._readyState=mr.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,u!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(f)?f=f.join(", "):typeof f=="object"&&f!==null&&(c=f,f=void 0),q6(this,u,f,c)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(u){!B6.includes(u)||(this._binaryType=u,this._receiver&&(this._receiver._binaryType=u))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(u,f,c){let g=new BB(this.binaryType,this._extensions,this._isServer,c);this._sender=new jB(u,this._extensions),this._receiver=g,this._socket=u,g[No]=this,u[No]=this,g.on("conclude",YB),g.on("drain",$B),g.on("error",KB),g.on("message",XB),g.on("ping",JB),g.on("pong",QB),u.setTimeout(0),u.setNoDelay(),f.length>0&&u.unshift(f),u.on("close",z6),u.on("data",Wh),u.on("end",W6),u.on("error",H6),this._readyState=mr.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=mr.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Uf.extensionName]&&this._extensions[Uf.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=mr.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(u,f){if(this.readyState!==mr.CLOSED){if(this.readyState===mr.CONNECTING){let c="WebSocket was closed before the connection was established";return Zl(this,this._req,c)}if(this.readyState===mr.CLOSING){this._closeFrameSent&&this._closeFrameReceived&&this._socket.end();return}this._readyState=mr.CLOSING,this._sender.close(u,f,!this._isServer,c=>{c||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),VB)}}ping(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u=="function"?(c=u,u=f=void 0):typeof f=="function"&&(c=f,f=void 0),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}f===void 0&&(f=!this._isServer),this._sender.ping(u||l3,f,c)}pong(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u=="function"?(c=u,u=f=void 0):typeof f=="function"&&(c=f,f=void 0),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}f===void 0&&(f=!this._isServer),this._sender.pong(u||l3,f,c)}send(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f=="function"&&(c=f,f={}),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}let g=dt({binary:typeof u!="string",mask:!this._isServer,compress:!0,fin:!0},f);this._extensions[Uf.extensionName]||(g.compress=!1),this._sender.send(u||l3,g,c)}terminate(){if(this.readyState!==mr.CLOSED){if(this.readyState===mr.CONNECTING){let u="WebSocket was closed before the connection was established";return Zl(this,this._req,u)}this._socket&&(this._readyState=mr.CLOSING,this._socket.destroy())}}};U6.forEach((i,u)=>{let f={enumerable:!0,value:u};Object.defineProperty(mr.prototype,i,f),Object.defineProperty(mr,i,f)});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach(i=>{Object.defineProperty(mr.prototype,i,{enumerable:!0})});["open","error","close","message"].forEach(i=>{Object.defineProperty(mr.prototype,`on${i}`,{configurable:!0,enumerable:!0,get(){let u=this.listeners(i);for(let f=0;f{Zl(i,j,"Opening handshake has timed out")}),j.on("error",$=>{j===null||j.aborted||(j=i._req=null,i._readyState=mr.CLOSING,i.emit("error",$),i.emitClose())}),j.on("response",$=>{let h=$.headers.location,re=$.statusCode;if(h&&g.followRedirects&&re>=300&&re<400){if(++i._redirects>g.maxRedirects){Zl(i,j,"Maximum redirects exceeded");return}j.abort();let ce=new s3(h,u);q6(i,ce,f,c)}else i.emit("unexpected-response",j,$)||Zl(i,j,`Unexpected server response: ${$.statusCode}`)}),j.on("upgrade",($,h,re)=>{if(i.emit("upgrade",$),i.readyState!==mr.CONNECTING)return;j=i._req=null;let ce=NB("sha1").update(D+UB).digest("base64");if($.headers["sec-websocket-accept"]!==ce){Zl(i,h,"Invalid Sec-WebSocket-Accept header");return}let Q=$.headers["sec-websocket-protocol"],oe=(f||"").split(/, */),Se;if(!f&&Q?Se="Server sent a subprotocol but none was requested":f&&!Q?Se="Server sent no subprotocol":Q&&!oe.includes(Q)&&(Se="Server sent an invalid subprotocol"),Se){Zl(i,h,Se);return}if(Q&&(i._protocol=Q),N)try{let me=bB($.headers["sec-websocket-extensions"]);me[Uf.extensionName]&&(N.accept(me[Uf.extensionName]),i._extensions[Uf.extensionName]=N)}catch(me){Zl(i,h,"Invalid Sec-WebSocket-Extensions header");return}i.setSocket(h,re,g.maxPayload)})}function ZB(i){return i.path=i.socketPath,N6.connect(i)}function ej(i){return i.path=void 0,!i.servername&&i.servername!==""&&(i.servername=N6.isIP(i.host)?"":i.host),LB.connect(i)}function Zl(i,u,f){i._readyState=mr.CLOSING;let c=new Error(f);Error.captureStackTrace(c,Zl),u.setHeader?(u.abort(),u.socket&&!u.socket.destroyed&&u.socket.destroy(),u.once("abort",i.emitClose.bind(i)),i.emit("error",c)):(u.destroy(c),u.once("error",i.emit.bind(i,"error")),u.once("close",i.emitClose.bind(i)))}function c3(i,u,f){if(u){let c=GB(u).length;i._socket?i._sender._bufferedBytes+=c:i._bufferedAmount+=c}if(f){let c=new Error(`WebSocket is not open: readyState ${i.readyState} (${U6[i.readyState]})`);f(c)}}function YB(i,u){let f=this[No];f._socket.removeListener("data",Wh),f._socket.resume(),f._closeFrameReceived=!0,f._closeMessage=u,f._closeCode=i,i===1005?f.close():f.close(i,u)}function $B(){this[No]._socket.resume()}function KB(i){let u=this[No];u._socket.removeListener("data",Wh),u._readyState=mr.CLOSING,u._closeCode=i[qB],u.emit("error",i),u._socket.destroy()}function b6(){this[No].emitClose()}function XB(i){this[No].emit("message",i)}function JB(i){let u=this[No];u.pong(i,!u._isServer,j6),u.emit("ping",i)}function QB(i){this[No].emit("pong",i)}function z6(){let i=this[No];this.removeListener("close",z6),this.removeListener("end",W6),i._readyState=mr.CLOSING,i._socket.read(),i._receiver.end(),this.removeListener("data",Wh),this[No]=void 0,clearTimeout(i._closeTimer),i._receiver._writableState.finished||i._receiver._writableState.errorEmitted?i.emitClose():(i._receiver.on("error",b6),i._receiver.on("finish",b6))}function Wh(i){this[No]._receiver.write(i)||this.pause()}function W6(){let i=this[No];i._readyState=mr.CLOSING,i._receiver.end(),this.end()}function H6(){let i=this[No];this.removeListener("error",H6),this.on("error",j6),i&&(i._readyState=mr.CLOSING,this.destroy())}});var $6=Me((Gb,G6)=>{"use strict";var{Duplex:tj}=require("stream");function V6(i){i.emit("close")}function nj(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Y6(i){this.removeListener("error",Y6),this.destroy(),this.listenerCount("error")===0&&this.emit("error",i)}function rj(i,u){let f=!0;function c(){f&&i._socket.resume()}i.readyState===i.CONNECTING?i.once("open",function(){i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c)}):(i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c));let g=new tj(zn(dt({},u),{autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1}));return i.on("message",function(C){g.push(C)||(f=!1,i._socket.pause())}),i.once("error",function(C){g.destroyed||g.destroy(C)}),i.once("close",function(){g.destroyed||g.push(null)}),g._destroy=function(t,C){if(i.readyState===i.CLOSED){C(t),process.nextTick(V6,g);return}let A=!1;i.once("error",function(D){A=!0,C(D)}),i.once("close",function(){A||C(t),process.nextTick(V6,g)}),i.terminate()},g._final=function(t){if(i.readyState===i.CONNECTING){i.once("open",function(){g._final(t)});return}i._socket!==null&&(i._socket._writableState.finished?(t(),g._readableState.endEmitted&&g.destroy()):(i._socket.once("finish",function(){t()}),i.close()))},g._read=function(){i.readyState===i.OPEN&&!f&&(f=!0,i._receiver._writableState.needDrain||i._socket.resume())},g._write=function(t,C,A){if(i.readyState===i.CONNECTING){i.once("open",function(){g._write(t,C,A)});return}i.send(t,A)},g.on("end",nj),g.on("error",Y6),g}G6.exports=rj});var J6=Me((Vb,K6)=>{"use strict";var ij=require("events"),{createHash:oj}=require("crypto"),{createServer:uj,STATUS_CODES:d3}=require("http"),gc=w2(),sj=a3(),{format:lj,parse:fj}=u3(),{GUID:cj,kWebSocket:aj}=mc(),dj=/^[+/0-9A-Za-z]{22}==$/,X6=class extends ij{constructor(u,f){super();if(u=dt({maxPayload:100*1024*1024,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null},u),u.port==null&&!u.server&&!u.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(u.port!=null?(this._server=uj((c,g)=>{let t=d3[426];g.writeHead(426,{"Content-Length":t.length,"Content-Type":"text/plain"}),g.end(t)}),this._server.listen(u.port,u.host,u.backlog,f)):u.server&&(this._server=u.server),this._server){let c=this.emit.bind(this,"connection");this._removeListeners=pj(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(g,t,C)=>{this.handleUpgrade(g,t,C,c)}})}u.perMessageDeflate===!0&&(u.perMessageDeflate={}),u.clientTracking&&(this.clients=new Set),this.options=u}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(u){if(u&&this.once("close",u),this.clients)for(let c of this.clients)c.terminate();let f=this._server;if(f&&(this._removeListeners(),this._removeListeners=this._server=null,this.options.port!=null)){f.close(()=>this.emit("close"));return}process.nextTick(hj,this)}shouldHandle(u){if(this.options.path){let f=u.url.indexOf("?");if((f!==-1?u.url.slice(0,f):u.url)!==this.options.path)return!1}return!0}handleUpgrade(u,f,c,g){f.on("error",p3);let t=u.headers["sec-websocket-key"]!==void 0?u.headers["sec-websocket-key"].trim():!1,C=+u.headers["sec-websocket-version"],A={};if(u.method!=="GET"||u.headers.upgrade.toLowerCase()!=="websocket"||!t||!dj.test(t)||C!==8&&C!==13||!this.shouldHandle(u))return Hh(f,400);if(this.options.perMessageDeflate){let x=new gc(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let D=fj(u.headers["sec-websocket-extensions"]);D[gc.extensionName]&&(x.accept(D[gc.extensionName]),A[gc.extensionName]=x)}catch(D){return Hh(f,400)}}if(this.options.verifyClient){let x={origin:u.headers[`${C===8?"sec-websocket-origin":"origin"}`],secure:!!(u.socket.authorized||u.socket.encrypted),req:u};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(D,L,N,j)=>{if(!D)return Hh(f,L||401,N,j);this.completeUpgrade(t,A,u,f,c,g)});return}if(!this.options.verifyClient(x))return Hh(f,401)}this.completeUpgrade(t,A,u,f,c,g)}completeUpgrade(u,f,c,g,t,C){if(!g.readable||!g.writable)return g.destroy();if(g[aj])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");let A=oj("sha1").update(u+cj).digest("base64"),x=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${A}`],D=new sj(null),L=c.headers["sec-websocket-protocol"];if(L&&(L=L.split(",").map(mj),this.options.handleProtocols?L=this.options.handleProtocols(L,c):L=L[0],L&&(x.push(`Sec-WebSocket-Protocol: ${L}`),D._protocol=L)),f[gc.extensionName]){let N=f[gc.extensionName].params,j=lj({[gc.extensionName]:[N]});x.push(`Sec-WebSocket-Extensions: ${j}`),D._extensions=f}this.emit("headers",x,c),g.write(x.concat(`\r -`).join(`\r -`)),g.removeListener("error",p3),D.setSocket(g,t,this.options.maxPayload),this.clients&&(this.clients.add(D),D.on("close",()=>this.clients.delete(D))),C(D,c)}};K6.exports=X6;function pj(i,u){for(let f of Object.keys(u))i.on(f,u[f]);return function(){for(let c of Object.keys(u))i.removeListener(c,u[c])}}function hj(i){i.emit("close")}function p3(){this.destroy()}function Hh(i,u,f,c){i.writable&&(f=f||d3[u],c=dt({Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(f)},c),i.write(`HTTP/1.1 ${u} ${d3[u]}\r -`+Object.keys(c).map(g=>`${g}: ${c[g]}`).join(`\r -`)+`\r -\r -`+f)),i.removeListener("error",p3),i.destroy()}function mj(i){return i.trim()}});var Z6=Me((Yb,Q6)=>{"use strict";var C2=a3();C2.createWebSocketStream=$6();C2.Server=J6();C2.Receiver=i3();C2.Sender=o3();Q6.exports=C2});var eS=Me(bh=>{"use strict";var vj=bh&&bh.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(bh,"__esModule",{value:!0});var gj=vj(Z6()),T2=global;T2.WebSocket||(T2.WebSocket=gj.default);T2.window||(T2.window=global);T2.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var tS=Me((Gh,h3)=>{(function(i,u){typeof Gh=="object"&&typeof h3=="object"?h3.exports=u():typeof define=="function"&&define.amd?define([],u):typeof Gh=="object"?Gh.ReactDevToolsBackend=u():i.ReactDevToolsBackend=u()})(window,function(){return function(i){var u={};function f(c){if(u[c])return u[c].exports;var g=u[c]={i:c,l:!1,exports:{}};return i[c].call(g.exports,g,g.exports,f),g.l=!0,g.exports}return f.m=i,f.c=u,f.d=function(c,g,t){f.o(c,g)||Object.defineProperty(c,g,{enumerable:!0,get:t})},f.r=function(c){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},f.t=function(c,g){if(1&g&&(c=f(c)),8&g||4&g&&typeof c=="object"&&c&&c.__esModule)return c;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:c}),2&g&&typeof c!="string")for(var C in c)f.d(t,C,function(A){return c[A]}.bind(null,C));return t},f.n=function(c){var g=c&&c.__esModule?function(){return c.default}:function(){return c};return f.d(g,"a",g),g},f.o=function(c,g){return Object.prototype.hasOwnProperty.call(c,g)},f.p="",f(f.s=20)}([function(i,u,f){"use strict";i.exports=f(12)},function(i,u,f){"use strict";var c=Object.getOwnPropertySymbols,g=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function C(A){if(A==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(A)}i.exports=function(){try{if(!Object.assign)return!1;var A=new String("abc");if(A[5]="de",Object.getOwnPropertyNames(A)[0]==="5")return!1;for(var x={},D=0;D<10;D++)x["_"+String.fromCharCode(D)]=D;if(Object.getOwnPropertyNames(x).map(function(N){return x[N]}).join("")!=="0123456789")return!1;var L={};return"abcdefghijklmnopqrst".split("").forEach(function(N){L[N]=N}),Object.keys(Object.assign({},L)).join("")==="abcdefghijklmnopqrst"}catch(N){return!1}}()?Object.assign:function(A,x){for(var D,L,N=C(A),j=1;j=J||Ft<0||Nt&&it-At>=ot}function Z(){var it=ce();if(ge(it))return Ae(it);Ue=setTimeout(Z,function(Ft){var jt=J-(Ft-be);return Nt?re(jt,ot-(Ft-At)):jt}(it))}function Ae(it){return Ue=void 0,Je&&Oe?V(it):(Oe=Le=void 0,ct)}function at(){var it=ce(),Ft=ge(it);if(Oe=arguments,Le=this,be=it,Ft){if(Ue===void 0)return ne(be);if(Nt)return Ue=setTimeout(Z,J),V(be)}return Ue===void 0&&(Ue=setTimeout(Z,J)),ct}return J=me(J)||0,oe(Te)&&(Ot=!!Te.leading,ot=(Nt="maxWait"in Te)?h(me(Te.maxWait)||0,J):ot,Je="trailing"in Te?!!Te.trailing:Je),at.cancel=function(){Ue!==void 0&&clearTimeout(Ue),At=0,Oe=be=Le=Ue=void 0},at.flush=function(){return Ue===void 0?ct:Ae(ce())},at}function oe(De){var J=g(De);return!!De&&(J=="object"||J=="function")}function Se(De){return g(De)=="symbol"||function(J){return!!J&&g(J)=="object"}(De)&&$.call(De)=="[object Symbol]"}function me(De){if(typeof De=="number")return De;if(Se(De))return NaN;if(oe(De)){var J=typeof De.valueOf=="function"?De.valueOf():De;De=oe(J)?J+"":J}if(typeof De!="string")return De===0?De:+De;De=De.replace(t,"");var Te=A.test(De);return Te||x.test(De)?D(De.slice(2),Te?2:8):C.test(De)?NaN:+De}i.exports=function(De,J,Te){var Oe=!0,Le=!0;if(typeof De!="function")throw new TypeError("Expected a function");return oe(Te)&&(Oe="leading"in Te?!!Te.leading:Oe,Le="trailing"in Te?!!Te.trailing:Le),Q(De,J,{leading:Oe,maxWait:J,trailing:Le})}}).call(this,f(4))},function(i,u,f){(function(c){function g(V){return(g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ne){return typeof ne}:function(ne){return ne&&typeof Symbol=="function"&&ne.constructor===Symbol&&ne!==Symbol.prototype?"symbol":typeof ne})(V)}var t;u=i.exports=h,t=(c===void 0?"undefined":g(c))==="object"&&c.env&&c.env.NODE_DEBUG&&/\bsemver\b/i.test(c.env.NODE_DEBUG)?function(){var V=Array.prototype.slice.call(arguments,0);V.unshift("SEMVER"),console.log.apply(console,V)}:function(){},u.SEMVER_SPEC_VERSION="2.0.0";var C=Number.MAX_SAFE_INTEGER||9007199254740991,A=u.re=[],x=u.src=[],D=u.tokens={},L=0;function N(V){D[V]=L++}N("NUMERICIDENTIFIER"),x[D.NUMERICIDENTIFIER]="0|[1-9]\\d*",N("NUMERICIDENTIFIERLOOSE"),x[D.NUMERICIDENTIFIERLOOSE]="[0-9]+",N("NONNUMERICIDENTIFIER"),x[D.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",N("MAINVERSION"),x[D.MAINVERSION]="("+x[D.NUMERICIDENTIFIER]+")\\.("+x[D.NUMERICIDENTIFIER]+")\\.("+x[D.NUMERICIDENTIFIER]+")",N("MAINVERSIONLOOSE"),x[D.MAINVERSIONLOOSE]="("+x[D.NUMERICIDENTIFIERLOOSE]+")\\.("+x[D.NUMERICIDENTIFIERLOOSE]+")\\.("+x[D.NUMERICIDENTIFIERLOOSE]+")",N("PRERELEASEIDENTIFIER"),x[D.PRERELEASEIDENTIFIER]="(?:"+x[D.NUMERICIDENTIFIER]+"|"+x[D.NONNUMERICIDENTIFIER]+")",N("PRERELEASEIDENTIFIERLOOSE"),x[D.PRERELEASEIDENTIFIERLOOSE]="(?:"+x[D.NUMERICIDENTIFIERLOOSE]+"|"+x[D.NONNUMERICIDENTIFIER]+")",N("PRERELEASE"),x[D.PRERELEASE]="(?:-("+x[D.PRERELEASEIDENTIFIER]+"(?:\\."+x[D.PRERELEASEIDENTIFIER]+")*))",N("PRERELEASELOOSE"),x[D.PRERELEASELOOSE]="(?:-?("+x[D.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+x[D.PRERELEASEIDENTIFIERLOOSE]+")*))",N("BUILDIDENTIFIER"),x[D.BUILDIDENTIFIER]="[0-9A-Za-z-]+",N("BUILD"),x[D.BUILD]="(?:\\+("+x[D.BUILDIDENTIFIER]+"(?:\\."+x[D.BUILDIDENTIFIER]+")*))",N("FULL"),N("FULLPLAIN"),x[D.FULLPLAIN]="v?"+x[D.MAINVERSION]+x[D.PRERELEASE]+"?"+x[D.BUILD]+"?",x[D.FULL]="^"+x[D.FULLPLAIN]+"$",N("LOOSEPLAIN"),x[D.LOOSEPLAIN]="[v=\\s]*"+x[D.MAINVERSIONLOOSE]+x[D.PRERELEASELOOSE]+"?"+x[D.BUILD]+"?",N("LOOSE"),x[D.LOOSE]="^"+x[D.LOOSEPLAIN]+"$",N("GTLT"),x[D.GTLT]="((?:<|>)?=?)",N("XRANGEIDENTIFIERLOOSE"),x[D.XRANGEIDENTIFIERLOOSE]=x[D.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",N("XRANGEIDENTIFIER"),x[D.XRANGEIDENTIFIER]=x[D.NUMERICIDENTIFIER]+"|x|X|\\*",N("XRANGEPLAIN"),x[D.XRANGEPLAIN]="[v=\\s]*("+x[D.XRANGEIDENTIFIER]+")(?:\\.("+x[D.XRANGEIDENTIFIER]+")(?:\\.("+x[D.XRANGEIDENTIFIER]+")(?:"+x[D.PRERELEASE]+")?"+x[D.BUILD]+"?)?)?",N("XRANGEPLAINLOOSE"),x[D.XRANGEPLAINLOOSE]="[v=\\s]*("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:"+x[D.PRERELEASELOOSE]+")?"+x[D.BUILD]+"?)?)?",N("XRANGE"),x[D.XRANGE]="^"+x[D.GTLT]+"\\s*"+x[D.XRANGEPLAIN]+"$",N("XRANGELOOSE"),x[D.XRANGELOOSE]="^"+x[D.GTLT]+"\\s*"+x[D.XRANGEPLAINLOOSE]+"$",N("COERCE"),x[D.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",N("COERCERTL"),A[D.COERCERTL]=new RegExp(x[D.COERCE],"g"),N("LONETILDE"),x[D.LONETILDE]="(?:~>?)",N("TILDETRIM"),x[D.TILDETRIM]="(\\s*)"+x[D.LONETILDE]+"\\s+",A[D.TILDETRIM]=new RegExp(x[D.TILDETRIM],"g"),N("TILDE"),x[D.TILDE]="^"+x[D.LONETILDE]+x[D.XRANGEPLAIN]+"$",N("TILDELOOSE"),x[D.TILDELOOSE]="^"+x[D.LONETILDE]+x[D.XRANGEPLAINLOOSE]+"$",N("LONECARET"),x[D.LONECARET]="(?:\\^)",N("CARETTRIM"),x[D.CARETTRIM]="(\\s*)"+x[D.LONECARET]+"\\s+",A[D.CARETTRIM]=new RegExp(x[D.CARETTRIM],"g"),N("CARET"),x[D.CARET]="^"+x[D.LONECARET]+x[D.XRANGEPLAIN]+"$",N("CARETLOOSE"),x[D.CARETLOOSE]="^"+x[D.LONECARET]+x[D.XRANGEPLAINLOOSE]+"$",N("COMPARATORLOOSE"),x[D.COMPARATORLOOSE]="^"+x[D.GTLT]+"\\s*("+x[D.LOOSEPLAIN]+")$|^$",N("COMPARATOR"),x[D.COMPARATOR]="^"+x[D.GTLT]+"\\s*("+x[D.FULLPLAIN]+")$|^$",N("COMPARATORTRIM"),x[D.COMPARATORTRIM]="(\\s*)"+x[D.GTLT]+"\\s*("+x[D.LOOSEPLAIN]+"|"+x[D.XRANGEPLAIN]+")",A[D.COMPARATORTRIM]=new RegExp(x[D.COMPARATORTRIM],"g"),N("HYPHENRANGE"),x[D.HYPHENRANGE]="^\\s*("+x[D.XRANGEPLAIN]+")\\s+-\\s+("+x[D.XRANGEPLAIN]+")\\s*$",N("HYPHENRANGELOOSE"),x[D.HYPHENRANGELOOSE]="^\\s*("+x[D.XRANGEPLAINLOOSE]+")\\s+-\\s+("+x[D.XRANGEPLAINLOOSE]+")\\s*$",N("STAR"),x[D.STAR]="(<|>)?=?\\s*\\*";for(var j=0;j256||!(ne.loose?A[D.LOOSE]:A[D.FULL]).test(V))return null;try{return new h(V,ne)}catch(ge){return null}}function h(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof h){if(V.loose===ne.loose)return V;V=V.version}else if(typeof V!="string")throw new TypeError("Invalid Version: "+V);if(V.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof h))return new h(V,ne);t("SemVer",V,ne),this.options=ne,this.loose=!!ne.loose;var ge=V.trim().match(ne.loose?A[D.LOOSE]:A[D.FULL]);if(!ge)throw new TypeError("Invalid Version: "+V);if(this.raw=V,this.major=+ge[1],this.minor=+ge[2],this.patch=+ge[3],this.major>C||this.major<0)throw new TypeError("Invalid major version");if(this.minor>C||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>C||this.patch<0)throw new TypeError("Invalid patch version");ge[4]?this.prerelease=ge[4].split(".").map(function(Z){if(/^[0-9]+$/.test(Z)){var Ae=+Z;if(Ae>=0&&Ae=0;)typeof this.prerelease[ge]=="number"&&(this.prerelease[ge]++,ge=-2);ge===-1&&this.prerelease.push(0)}ne&&(this.prerelease[0]===ne?isNaN(this.prerelease[1])&&(this.prerelease=[ne,0]):this.prerelease=[ne,0]);break;default:throw new Error("invalid increment argument: "+V)}return this.format(),this.raw=this.version,this},u.inc=function(V,ne,ge,Z){typeof ge=="string"&&(Z=ge,ge=void 0);try{return new h(V,ge).inc(ne,Z).version}catch(Ae){return null}},u.diff=function(V,ne){if(me(V,ne))return null;var ge=$(V),Z=$(ne),Ae="";if(ge.prerelease.length||Z.prerelease.length){Ae="pre";var at="prerelease"}for(var it in ge)if((it==="major"||it==="minor"||it==="patch")&&ge[it]!==Z[it])return Ae+it;return at},u.compareIdentifiers=ce;var re=/^[0-9]+$/;function ce(V,ne){var ge=re.test(V),Z=re.test(ne);return ge&&Z&&(V=+V,ne=+ne),V===ne?0:ge&&!Z?-1:Z&&!ge?1:V0}function Se(V,ne,ge){return Q(V,ne,ge)<0}function me(V,ne,ge){return Q(V,ne,ge)===0}function De(V,ne,ge){return Q(V,ne,ge)!==0}function J(V,ne,ge){return Q(V,ne,ge)>=0}function Te(V,ne,ge){return Q(V,ne,ge)<=0}function Oe(V,ne,ge,Z){switch(ne){case"===":return g(V)==="object"&&(V=V.version),g(ge)==="object"&&(ge=ge.version),V===ge;case"!==":return g(V)==="object"&&(V=V.version),g(ge)==="object"&&(ge=ge.version),V!==ge;case"":case"=":case"==":return me(V,ge,Z);case"!=":return De(V,ge,Z);case">":return oe(V,ge,Z);case">=":return J(V,ge,Z);case"<":return Se(V,ge,Z);case"<=":return Te(V,ge,Z);default:throw new TypeError("Invalid operator: "+ne)}}function Le(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof Le){if(V.loose===!!ne.loose)return V;V=V.value}if(!(this instanceof Le))return new Le(V,ne);t("comparator",V,ne),this.options=ne,this.loose=!!ne.loose,this.parse(V),this.semver===ot?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}u.rcompareIdentifiers=function(V,ne){return ce(ne,V)},u.major=function(V,ne){return new h(V,ne).major},u.minor=function(V,ne){return new h(V,ne).minor},u.patch=function(V,ne){return new h(V,ne).patch},u.compare=Q,u.compareLoose=function(V,ne){return Q(V,ne,!0)},u.compareBuild=function(V,ne,ge){var Z=new h(V,ge),Ae=new h(ne,ge);return Z.compare(Ae)||Z.compareBuild(Ae)},u.rcompare=function(V,ne,ge){return Q(ne,V,ge)},u.sort=function(V,ne){return V.sort(function(ge,Z){return u.compareBuild(ge,Z,ne)})},u.rsort=function(V,ne){return V.sort(function(ge,Z){return u.compareBuild(Z,ge,ne)})},u.gt=oe,u.lt=Se,u.eq=me,u.neq=De,u.gte=J,u.lte=Te,u.cmp=Oe,u.Comparator=Le;var ot={};function ct(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof ct)return V.loose===!!ne.loose&&V.includePrerelease===!!ne.includePrerelease?V:new ct(V.raw,ne);if(V instanceof Le)return new ct(V.value,ne);if(!(this instanceof ct))return new ct(V,ne);if(this.options=ne,this.loose=!!ne.loose,this.includePrerelease=!!ne.includePrerelease,this.raw=V,this.set=V.split(/\s*\|\|\s*/).map(function(ge){return this.parseRange(ge.trim())},this).filter(function(ge){return ge.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+V);this.format()}function Ue(V,ne){for(var ge=!0,Z=V.slice(),Ae=Z.pop();ge&&Z.length;)ge=Z.every(function(at){return Ae.intersects(at,ne)}),Ae=Z.pop();return ge}function be(V){return!V||V.toLowerCase()==="x"||V==="*"}function At(V,ne,ge,Z,Ae,at,it,Ft,jt,hn,Un,Jt,Yt){return((ne=be(ge)?"":be(Z)?">="+ge+".0.0":be(Ae)?">="+ge+"."+Z+".0":">="+ne)+" "+(Ft=be(jt)?"":be(hn)?"<"+(+jt+1)+".0.0":be(Un)?"<"+jt+"."+(+hn+1)+".0":Jt?"<="+jt+"."+hn+"."+Un+"-"+Jt:"<="+Ft)).trim()}function Ot(V,ne,ge){for(var Z=0;Z0){var Ae=V[Z].semver;if(Ae.major===ne.major&&Ae.minor===ne.minor&&Ae.patch===ne.patch)return!0}return!1}return!0}function Nt(V,ne,ge){try{ne=new ct(ne,ge)}catch(Z){return!1}return ne.test(V)}function Je(V,ne,ge,Z){var Ae,at,it,Ft,jt;switch(V=new h(V,Z),ne=new ct(ne,Z),ge){case">":Ae=oe,at=Te,it=Se,Ft=">",jt=">=";break;case"<":Ae=Se,at=J,it=oe,Ft="<",jt="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Nt(V,ne,Z))return!1;for(var hn=0;hn=0.0.0")),Jt=Jt||cr,Yt=Yt||cr,Ae(cr.semver,Jt.semver,Z)?Jt=cr:it(cr.semver,Yt.semver,Z)&&(Yt=cr)}),Jt.operator===Ft||Jt.operator===jt||(!Yt.operator||Yt.operator===Ft)&&at(V,Yt.semver)||Yt.operator===jt&&it(V,Yt.semver))return!1}return!0}Le.prototype.parse=function(V){var ne=this.options.loose?A[D.COMPARATORLOOSE]:A[D.COMPARATOR],ge=V.match(ne);if(!ge)throw new TypeError("Invalid comparator: "+V);this.operator=ge[1]!==void 0?ge[1]:"",this.operator==="="&&(this.operator=""),ge[2]?this.semver=new h(ge[2],this.options.loose):this.semver=ot},Le.prototype.toString=function(){return this.value},Le.prototype.test=function(V){if(t("Comparator.test",V,this.options.loose),this.semver===ot||V===ot)return!0;if(typeof V=="string")try{V=new h(V,this.options)}catch(ne){return!1}return Oe(V,this.operator,this.semver,this.options)},Le.prototype.intersects=function(V,ne){if(!(V instanceof Le))throw new TypeError("a Comparator is required");var ge;if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),this.operator==="")return this.value===""||(ge=new ct(V.value,ne),Nt(this.value,ge,ne));if(V.operator==="")return V.value===""||(ge=new ct(this.value,ne),Nt(V.semver,ge,ne));var Z=!(this.operator!==">="&&this.operator!==">"||V.operator!==">="&&V.operator!==">"),Ae=!(this.operator!=="<="&&this.operator!=="<"||V.operator!=="<="&&V.operator!=="<"),at=this.semver.version===V.semver.version,it=!(this.operator!==">="&&this.operator!=="<="||V.operator!==">="&&V.operator!=="<="),Ft=Oe(this.semver,"<",V.semver,ne)&&(this.operator===">="||this.operator===">")&&(V.operator==="<="||V.operator==="<"),jt=Oe(this.semver,">",V.semver,ne)&&(this.operator==="<="||this.operator==="<")&&(V.operator===">="||V.operator===">");return Z||Ae||at&&it||Ft||jt},u.Range=ct,ct.prototype.format=function(){return this.range=this.set.map(function(V){return V.join(" ").trim()}).join("||").trim(),this.range},ct.prototype.toString=function(){return this.range},ct.prototype.parseRange=function(V){var ne=this.options.loose;V=V.trim();var ge=ne?A[D.HYPHENRANGELOOSE]:A[D.HYPHENRANGE];V=V.replace(ge,At),t("hyphen replace",V),V=V.replace(A[D.COMPARATORTRIM],"$1$2$3"),t("comparator trim",V,A[D.COMPARATORTRIM]),V=(V=(V=V.replace(A[D.TILDETRIM],"$1~")).replace(A[D.CARETTRIM],"$1^")).split(/\s+/).join(" ");var Z=ne?A[D.COMPARATORLOOSE]:A[D.COMPARATOR],Ae=V.split(" ").map(function(at){return function(it,Ft){return t("comp",it,Ft),it=function(jt,hn){return jt.trim().split(/\s+/).map(function(Un){return function(Jt,Yt){t("caret",Jt,Yt);var cr=Yt.loose?A[D.CARETLOOSE]:A[D.CARET];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn){var vr;return t("caret",Jt,w,pt,Mn,Bn,Xn),be(pt)?vr="":be(Mn)?vr=">="+pt+".0.0 <"+(+pt+1)+".0.0":be(Bn)?vr=pt==="0"?">="+pt+"."+Mn+".0 <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+".0 <"+(+pt+1)+".0.0":Xn?(t("replaceCaret pr",Xn),vr=pt==="0"?Mn==="0"?">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+Mn+"."+(+Bn+1):">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+(+pt+1)+".0.0"):(t("no pr"),vr=pt==="0"?Mn==="0"?">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+Mn+"."+(+Bn+1):">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+"."+Bn+" <"+(+pt+1)+".0.0"),t("caret return",vr),vr})}(Un,hn)}).join(" ")}(it,Ft),t("caret",it),it=function(jt,hn){return jt.trim().split(/\s+/).map(function(Un){return function(Jt,Yt){var cr=Yt.loose?A[D.TILDELOOSE]:A[D.TILDE];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn){var vr;return t("tilde",Jt,w,pt,Mn,Bn,Xn),be(pt)?vr="":be(Mn)?vr=">="+pt+".0.0 <"+(+pt+1)+".0.0":be(Bn)?vr=">="+pt+"."+Mn+".0 <"+pt+"."+(+Mn+1)+".0":Xn?(t("replaceTilde pr",Xn),vr=">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+(+Mn+1)+".0"):vr=">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+(+Mn+1)+".0",t("tilde return",vr),vr})}(Un,hn)}).join(" ")}(it,Ft),t("tildes",it),it=function(jt,hn){return t("replaceXRanges",jt,hn),jt.split(/\s+/).map(function(Un){return function(Jt,Yt){Jt=Jt.trim();var cr=Yt.loose?A[D.XRANGELOOSE]:A[D.XRANGE];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn,vr){t("xRange",Jt,w,pt,Mn,Bn,Xn,vr);var gr=be(Mn),r0=gr||be(Bn),Ci=r0||be(Xn),yo=Ci;return pt==="="&&yo&&(pt=""),vr=Yt.includePrerelease?"-0":"",gr?w=pt===">"||pt==="<"?"<0.0.0-0":"*":pt&&yo?(r0&&(Bn=0),Xn=0,pt===">"?(pt=">=",r0?(Mn=+Mn+1,Bn=0,Xn=0):(Bn=+Bn+1,Xn=0)):pt==="<="&&(pt="<",r0?Mn=+Mn+1:Bn=+Bn+1),w=pt+Mn+"."+Bn+"."+Xn+vr):r0?w=">="+Mn+".0.0"+vr+" <"+(+Mn+1)+".0.0"+vr:Ci&&(w=">="+Mn+"."+Bn+".0"+vr+" <"+Mn+"."+(+Bn+1)+".0"+vr),t("xRange return",w),w})}(Un,hn)}).join(" ")}(it,Ft),t("xrange",it),it=function(jt,hn){return t("replaceStars",jt,hn),jt.trim().replace(A[D.STAR],"")}(it,Ft),t("stars",it),it}(at,this.options)},this).join(" ").split(/\s+/);return this.options.loose&&(Ae=Ae.filter(function(at){return!!at.match(Z)})),Ae=Ae.map(function(at){return new Le(at,this.options)},this)},ct.prototype.intersects=function(V,ne){if(!(V instanceof ct))throw new TypeError("a Range is required");return this.set.some(function(ge){return Ue(ge,ne)&&V.set.some(function(Z){return Ue(Z,ne)&&ge.every(function(Ae){return Z.every(function(at){return Ae.intersects(at,ne)})})})})},u.toComparators=function(V,ne){return new ct(V,ne).set.map(function(ge){return ge.map(function(Z){return Z.value}).join(" ").trim().split(" ")})},ct.prototype.test=function(V){if(!V)return!1;if(typeof V=="string")try{V=new h(V,this.options)}catch(ge){return!1}for(var ne=0;ne":at.prerelease.length===0?at.patch++:at.prerelease.push(0),at.raw=at.format();case"":case">=":ge&&!oe(ge,at)||(ge=at);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+Ae.operator)}});return ge&&V.test(ge)?ge:null},u.validRange=function(V,ne){try{return new ct(V,ne).range||"*"}catch(ge){return null}},u.ltr=function(V,ne,ge){return Je(V,ne,"<",ge)},u.gtr=function(V,ne,ge){return Je(V,ne,">",ge)},u.outside=Je,u.prerelease=function(V,ne){var ge=$(V,ne);return ge&&ge.prerelease.length?ge.prerelease:null},u.intersects=function(V,ne,ge){return V=new ct(V,ge),ne=new ct(ne,ge),V.intersects(ne)},u.coerce=function(V,ne){if(V instanceof h)return V;if(typeof V=="number"&&(V=String(V)),typeof V!="string")return null;var ge=null;if((ne=ne||{}).rtl){for(var Z;(Z=A[D.COERCERTL].exec(V))&&(!ge||ge.index+ge[0].length!==V.length);)ge&&Z.index+Z[0].length===ge.index+ge[0].length||(ge=Z),A[D.COERCERTL].lastIndex=Z.index+Z[1].length+Z[2].length;A[D.COERCERTL].lastIndex=-1}else ge=V.match(A[D.COERCE]);return ge===null?null:$(ge[2]+"."+(ge[3]||"0")+"."+(ge[4]||"0"),ne)}}).call(this,f(5))},function(i,u){function f(g){return(f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(g)}var c;c=function(){return this}();try{c=c||new Function("return this")()}catch(g){(typeof window=="undefined"?"undefined":f(window))==="object"&&(c=window)}i.exports=c},function(i,u){var f,c,g=i.exports={};function t(){throw new Error("setTimeout has not been defined")}function C(){throw new Error("clearTimeout has not been defined")}function A(ce){if(f===setTimeout)return setTimeout(ce,0);if((f===t||!f)&&setTimeout)return f=setTimeout,setTimeout(ce,0);try{return f(ce,0)}catch(Q){try{return f.call(null,ce,0)}catch(oe){return f.call(this,ce,0)}}}(function(){try{f=typeof setTimeout=="function"?setTimeout:t}catch(ce){f=t}try{c=typeof clearTimeout=="function"?clearTimeout:C}catch(ce){c=C}})();var x,D=[],L=!1,N=-1;function j(){L&&x&&(L=!1,x.length?D=x.concat(D):N=-1,D.length&&$())}function $(){if(!L){var ce=A(j);L=!0;for(var Q=D.length;Q;){for(x=D,D=[];++N1)for(var oe=1;oethis[C])return De(this,this[h].get(Ue)),!1;var Je=this[h].get(Ue).value;return this[N]&&(this[j]||this[N](Ue,Je.value)),Je.now=Ot,Je.maxAge=At,Je.value=be,this[A]+=Nt-Je.length,Je.length=Nt,this.get(Ue),me(this),!0}var V=new J(Ue,be,Nt,Ot,At);return V.length>this[C]?(this[N]&&this[N](Ue,be),!1):(this[A]+=V.length,this[$].unshift(V),this[h].set(Ue,this[$].head),me(this),!0)}},{key:"has",value:function(Ue){if(!this[h].has(Ue))return!1;var be=this[h].get(Ue).value;return!Se(this,be)}},{key:"get",value:function(Ue){return oe(this,Ue,!0)}},{key:"peek",value:function(Ue){return oe(this,Ue,!1)}},{key:"pop",value:function(){var Ue=this[$].tail;return Ue?(De(this,Ue),Ue.value):null}},{key:"del",value:function(Ue){De(this,this[h].get(Ue))}},{key:"load",value:function(Ue){this.reset();for(var be=Date.now(),At=Ue.length-1;At>=0;At--){var Ot=Ue[At],Nt=Ot.e||0;if(Nt===0)this.set(Ot.k,Ot.v);else{var Je=Nt-be;Je>0&&this.set(Ot.k,Ot.v,Je)}}}},{key:"prune",value:function(){var Ue=this;this[h].forEach(function(be,At){return oe(Ue,At,!1)})}},{key:"max",set:function(Ue){if(typeof Ue!="number"||Ue<0)throw new TypeError("max must be a non-negative number");this[C]=Ue||1/0,me(this)},get:function(){return this[C]}},{key:"allowStale",set:function(Ue){this[D]=!!Ue},get:function(){return this[D]}},{key:"maxAge",set:function(Ue){if(typeof Ue!="number")throw new TypeError("maxAge must be a non-negative number");this[L]=Ue,me(this)},get:function(){return this[L]}},{key:"lengthCalculator",set:function(Ue){var be=this;typeof Ue!="function"&&(Ue=ce),Ue!==this[x]&&(this[x]=Ue,this[A]=0,this[$].forEach(function(At){At.length=be[x](At.value,At.key),be[A]+=At.length})),me(this)},get:function(){return this[x]}},{key:"length",get:function(){return this[A]}},{key:"itemCount",get:function(){return this[$].length}}])&&g(Le.prototype,ot),ct&&g(Le,ct),Oe}(),oe=function(Oe,Le,ot){var ct=Oe[h].get(Le);if(ct){var Ue=ct.value;if(Se(Oe,Ue)){if(De(Oe,ct),!Oe[D])return}else ot&&(Oe[re]&&(ct.value.now=Date.now()),Oe[$].unshiftNode(ct));return Ue.value}},Se=function(Oe,Le){if(!Le||!Le.maxAge&&!Oe[L])return!1;var ot=Date.now()-Le.now;return Le.maxAge?ot>Le.maxAge:Oe[L]&&ot>Oe[L]},me=function(Oe){if(Oe[A]>Oe[C])for(var Le=Oe[$].tail;Oe[A]>Oe[C]&&Le!==null;){var ot=Le.prev;De(Oe,Le),Le=ot}},De=function(Oe,Le){if(Le){var ot=Le.value;Oe[N]&&Oe[N](ot.key,ot.value),Oe[A]-=ot.length,Oe[h].delete(ot.key),Oe[$].removeNode(Le)}},J=function Oe(Le,ot,ct,Ue,be){c(this,Oe),this.key=Le,this.value=ot,this.length=ct,this.now=Ue,this.maxAge=be||0},Te=function(Oe,Le,ot,ct){var Ue=ot.value;Se(Oe,Ue)&&(De(Oe,ot),Oe[D]||(Ue=void 0)),Ue&&Le.call(ct,Ue.value,Ue.key,Oe)};i.exports=Q},function(i,u,f){(function(c){function g(t){return(g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(C){return typeof C}:function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C})(t)}i.exports=function(){if(typeof document=="undefined"||!document.addEventListener)return null;var t,C,A,x={};return x.copy=function(){var D=!1,L=null,N=!1;function j(){D=!1,L=null,N&&window.getSelection().removeAllRanges(),N=!1}return document.addEventListener("copy",function($){if(D){for(var h in L)$.clipboardData.setData(h,L[h]);$.preventDefault()}}),function($){return new Promise(function(h,re){D=!0,typeof $=="string"?L={"text/plain":$}:$ instanceof Node?L={"text/html":new XMLSerializer().serializeToString($)}:$ instanceof Object?L=$:re("Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings."),function ce(Q){try{if(document.execCommand("copy"))j(),h();else{if(Q)throw j(),new Error("Unable to copy. Perhaps it's not available in your browser?");(function(){var oe=document.getSelection();if(!document.queryCommandEnabled("copy")&&oe.isCollapsed){var Se=document.createRange();Se.selectNodeContents(document.body),oe.removeAllRanges(),oe.addRange(Se),N=!0}})(),ce(!0)}}catch(oe){j(),re(oe)}}(!1)})}}(),x.paste=(A=!1,document.addEventListener("paste",function(D){if(A){A=!1,D.preventDefault();var L=t;t=null,L(D.clipboardData.getData(C))}}),function(D){return new Promise(function(L,N){A=!0,t=L,C=D||"text/plain";try{document.execCommand("paste")||(A=!1,N(new Error("Unable to paste. Pasting only works in Internet Explorer at the moment.")))}catch(j){A=!1,N(new Error(j))}})}),typeof ClipboardEvent=="undefined"&&window.clipboardData!==void 0&&window.clipboardData.setData!==void 0&&(function(D){function L(me,De){return function(){me.apply(De,arguments)}}function N(me){if(g(this)!="object")throw new TypeError("Promises must be constructed via new");if(typeof me!="function")throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],Q(me,L($,this),L(h,this))}function j(me){var De=this;return this._state===null?void this._deferreds.push(me):void oe(function(){var J=De._state?me.onFulfilled:me.onRejected;if(J!==null){var Te;try{Te=J(De._value)}catch(Oe){return void me.reject(Oe)}me.resolve(Te)}else(De._state?me.resolve:me.reject)(De._value)})}function $(me){try{if(me===this)throw new TypeError("A promise cannot be resolved with itself.");if(me&&(g(me)=="object"||typeof me=="function")){var De=me.then;if(typeof De=="function")return void Q(L(De,me),L($,this),L(h,this))}this._state=!0,this._value=me,re.call(this)}catch(J){h.call(this,J)}}function h(me){this._state=!1,this._value=me,re.call(this)}function re(){for(var me=0,De=this._deferreds.length;De>me;me++)j.call(this,this._deferreds[me]);this._deferreds=null}function ce(me,De,J,Te){this.onFulfilled=typeof me=="function"?me:null,this.onRejected=typeof De=="function"?De:null,this.resolve=J,this.reject=Te}function Q(me,De,J){var Te=!1;try{me(function(Oe){Te||(Te=!0,De(Oe))},function(Oe){Te||(Te=!0,J(Oe))})}catch(Oe){if(Te)return;Te=!0,J(Oe)}}var oe=N.immediateFn||typeof c=="function"&&c||function(me){setTimeout(me,1)},Se=Array.isArray||function(me){return Object.prototype.toString.call(me)==="[object Array]"};N.prototype.catch=function(me){return this.then(null,me)},N.prototype.then=function(me,De){var J=this;return new N(function(Te,Oe){j.call(J,new ce(me,De,Te,Oe))})},N.all=function(){var me=Array.prototype.slice.call(arguments.length===1&&Se(arguments[0])?arguments[0]:arguments);return new N(function(De,J){function Te(ot,ct){try{if(ct&&(g(ct)=="object"||typeof ct=="function")){var Ue=ct.then;if(typeof Ue=="function")return void Ue.call(ct,function(be){Te(ot,be)},J)}me[ot]=ct,--Oe==0&&De(me)}catch(be){J(be)}}if(me.length===0)return De([]);for(var Oe=me.length,Le=0;LeTe;Te++)me[Te].then(De,J)})},i.exports?i.exports=N:D.Promise||(D.Promise=N)}(this),x.copy=function(D){return new Promise(function(L,N){if(typeof D!="string"&&!("text/plain"in D))throw new Error("You must provide a text/plain type.");var j=typeof D=="string"?D:D["text/plain"];window.clipboardData.setData("Text",j)?L():N(new Error("Copying was rejected."))})},x.paste=function(){return new Promise(function(D,L){var N=window.clipboardData.getData("Text");N?D(N):L(new Error("Pasting was rejected."))})}),x}()}).call(this,f(13).setImmediate)},function(i,u,f){"use strict";i.exports=f(15)},function(i,u,f){"use strict";f.r(u),u.default=`:root { - /** - * IMPORTANT: When new theme variables are added below\u2013 also add them to SettingsContext updateThemeVariables() - */ - - /* Light theme */ - --light-color-attribute-name: #ef6632; - --light-color-attribute-name-not-editable: #23272f; - --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7); - --light-color-attribute-value: #1a1aa6; - --light-color-attribute-value-inverted: #ffffff; - --light-color-attribute-editable-value: #1a1aa6; - --light-color-background: #ffffff; - --light-color-background-hover: rgba(0, 136, 250, 0.1); - --light-color-background-inactive: #e5e5e5; - --light-color-background-invalid: #fff0f0; - --light-color-background-selected: #0088fa; - --light-color-button-background: #ffffff; - --light-color-button-background-focus: #ededed; - --light-color-button: #5f6673; - --light-color-button-disabled: #cfd1d5; - --light-color-button-active: #0088fa; - --light-color-button-focus: #23272f; - --light-color-button-hover: #23272f; - --light-color-border: #eeeeee; - --light-color-commit-did-not-render-fill: #cfd1d5; - --light-color-commit-did-not-render-fill-text: #000000; - --light-color-commit-did-not-render-pattern: #cfd1d5; - --light-color-commit-did-not-render-pattern-text: #333333; - --light-color-commit-gradient-0: #37afa9; - --light-color-commit-gradient-1: #63b19e; - --light-color-commit-gradient-2: #80b393; - --light-color-commit-gradient-3: #97b488; - --light-color-commit-gradient-4: #abb67d; - --light-color-commit-gradient-5: #beb771; - --light-color-commit-gradient-6: #cfb965; - --light-color-commit-gradient-7: #dfba57; - --light-color-commit-gradient-8: #efbb49; - --light-color-commit-gradient-9: #febc38; - --light-color-commit-gradient-text: #000000; - --light-color-component-name: #6a51b2; - --light-color-component-name-inverted: #ffffff; - --light-color-component-badge-background: rgba(0, 0, 0, 0.1); - --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25); - --light-color-component-badge-count: #777d88; - --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --light-color-context-background: rgba(0,0,0,.9); - --light-color-context-background-hover: rgba(255, 255, 255, 0.1); - --light-color-context-background-selected: #178fb9; - --light-color-context-border: #3d424a; - --light-color-context-text: #ffffff; - --light-color-context-text-selected: #ffffff; - --light-color-dim: #777d88; - --light-color-dimmer: #cfd1d5; - --light-color-dimmest: #eff0f1; - --light-color-error-background: hsl(0, 100%, 97%); - --light-color-error-border: hsl(0, 100%, 92%); - --light-color-error-text: #ff0000; - --light-color-expand-collapse-toggle: #777d88; - --light-color-link: #0000ff; - --light-color-modal-background: rgba(255, 255, 255, 0.75); - --light-color-record-active: #fc3a4b; - --light-color-record-hover: #3578e5; - --light-color-record-inactive: #0088fa; - --light-color-scroll-thumb: #c2c2c2; - --light-color-scroll-track: #fafafa; - --light-color-search-match: yellow; - --light-color-search-match-current: #f7923b; - --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1); - --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05); - --light-color-shadow: rgba(0, 0, 0, 0.25); - --light-color-tab-selected-border: #0088fa; - --light-color-text: #000000; - --light-color-text-invalid: #ff0000; - --light-color-text-selected: #ffffff; - --light-color-toggle-background-invalid: #fc3a4b; - --light-color-toggle-background-on: #0088fa; - --light-color-toggle-background-off: #cfd1d5; - --light-color-toggle-text: #ffffff; - --light-color-tooltip-background: rgba(0, 0, 0, 0.9); - --light-color-tooltip-text: #ffffff; - - /* Dark theme */ - --dark-color-attribute-name: #9d87d2; - --dark-color-attribute-name-not-editable: #ededed; - --dark-color-attribute-name-inverted: #282828; - --dark-color-attribute-value: #cedae0; - --dark-color-attribute-value-inverted: #ffffff; - --dark-color-attribute-editable-value: yellow; - --dark-color-background: #282c34; - --dark-color-background-hover: rgba(255, 255, 255, 0.1); - --dark-color-background-inactive: #3d424a; - --dark-color-background-invalid: #5c0000; - --dark-color-background-selected: #178fb9; - --dark-color-button-background: #282c34; - --dark-color-button-background-focus: #3d424a; - --dark-color-button: #afb3b9; - --dark-color-button-active: #61dafb; - --dark-color-button-disabled: #4f5766; - --dark-color-button-focus: #a2e9fc; - --dark-color-button-hover: #ededed; - --dark-color-border: #3d424a; - --dark-color-commit-did-not-render-fill: #777d88; - --dark-color-commit-did-not-render-fill-text: #000000; - --dark-color-commit-did-not-render-pattern: #666c77; - --dark-color-commit-did-not-render-pattern-text: #ffffff; - --dark-color-commit-gradient-0: #37afa9; - --dark-color-commit-gradient-1: #63b19e; - --dark-color-commit-gradient-2: #80b393; - --dark-color-commit-gradient-3: #97b488; - --dark-color-commit-gradient-4: #abb67d; - --dark-color-commit-gradient-5: #beb771; - --dark-color-commit-gradient-6: #cfb965; - --dark-color-commit-gradient-7: #dfba57; - --dark-color-commit-gradient-8: #efbb49; - --dark-color-commit-gradient-9: #febc38; - --dark-color-commit-gradient-text: #000000; - --dark-color-component-name: #61dafb; - --dark-color-component-name-inverted: #282828; - --dark-color-component-badge-background: rgba(255, 255, 255, 0.25); - --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25); - --dark-color-component-badge-count: #8f949d; - --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --dark-color-context-background: rgba(255,255,255,.9); - --dark-color-context-background-hover: rgba(0, 136, 250, 0.1); - --dark-color-context-background-selected: #0088fa; - --dark-color-context-border: #eeeeee; - --dark-color-context-text: #000000; - --dark-color-context-text-selected: #ffffff; - --dark-color-dim: #8f949d; - --dark-color-dimmer: #777d88; - --dark-color-dimmest: #4f5766; - --dark-color-error-background: #200; - --dark-color-error-border: #900; - --dark-color-error-text: #f55; - --dark-color-expand-collapse-toggle: #8f949d; - --dark-color-link: #61dafb; - --dark-color-modal-background: rgba(0, 0, 0, 0.75); - --dark-color-record-active: #fc3a4b; - --dark-color-record-hover: #a2e9fc; - --dark-color-record-inactive: #61dafb; - --dark-color-scroll-thumb: #afb3b9; - --dark-color-scroll-track: #313640; - --dark-color-search-match: yellow; - --dark-color-search-match-current: #f7923b; - --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15); - --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05); - --dark-color-shadow: rgba(0, 0, 0, 0.5); - --dark-color-tab-selected-border: #178fb9; - --dark-color-text: #ffffff; - --dark-color-text-invalid: #ff8080; - --dark-color-text-selected: #ffffff; - --dark-color-toggle-background-invalid: #fc3a4b; - --dark-color-toggle-background-on: #178fb9; - --dark-color-toggle-background-off: #777d88; - --dark-color-toggle-text: #ffffff; - --dark-color-tooltip-background: rgba(255, 255, 255, 0.9); - --dark-color-tooltip-text: #000000; - - /* Font smoothing */ - --light-font-smoothing: auto; - --dark-font-smoothing: antialiased; - --font-smoothing: auto; - - /* Compact density */ - --compact-font-size-monospace-small: 9px; - --compact-font-size-monospace-normal: 11px; - --compact-font-size-monospace-large: 15px; - --compact-font-size-sans-small: 10px; - --compact-font-size-sans-normal: 12px; - --compact-font-size-sans-large: 14px; - --compact-line-height-data: 18px; - --compact-root-font-size: 16px; - - /* Comfortable density */ - --comfortable-font-size-monospace-small: 10px; - --comfortable-font-size-monospace-normal: 13px; - --comfortable-font-size-monospace-large: 17px; - --comfortable-font-size-sans-small: 12px; - --comfortable-font-size-sans-normal: 14px; - --comfortable-font-size-sans-large: 16px; - --comfortable-line-height-data: 22px; - --comfortable-root-font-size: 20px; - - /* GitHub.com system fonts */ - --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, - Courier, monospace; - --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, - Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - - /* Constant values shared between JS and CSS */ - --interaction-commit-size: 10px; - --interaction-label-width: 200px; -} -`},function(i,u,f){"use strict";function c(x){var D=this;if(D instanceof c||(D=new c),D.tail=null,D.head=null,D.length=0,x&&typeof x.forEach=="function")x.forEach(function(j){D.push(j)});else if(arguments.length>0)for(var L=0,N=arguments.length;L1)L=D;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");N=this.head.next,L=this.head.value}for(var j=0;N!==null;j++)L=x(L,N.value,j),N=N.next;return L},c.prototype.reduceReverse=function(x,D){var L,N=this.tail;if(arguments.length>1)L=D;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");N=this.tail.prev,L=this.tail.value}for(var j=this.length-1;N!==null;j--)L=x(L,N.value,j),N=N.prev;return L},c.prototype.toArray=function(){for(var x=new Array(this.length),D=0,L=this.head;L!==null;D++)x[D]=L.value,L=L.next;return x},c.prototype.toArrayReverse=function(){for(var x=new Array(this.length),D=0,L=this.tail;L!==null;D++)x[D]=L.value,L=L.prev;return x},c.prototype.slice=function(x,D){(D=D||this.length)<0&&(D+=this.length),(x=x||0)<0&&(x+=this.length);var L=new c;if(Dthis.length&&(D=this.length);for(var N=0,j=this.head;j!==null&&Nthis.length&&(D=this.length);for(var N=this.length,j=this.tail;j!==null&&N>D;N--)j=j.prev;for(;j!==null&&N>x;N--,j=j.prev)L.push(j.value);return L},c.prototype.splice=function(x,D){x>this.length&&(x=this.length-1),x<0&&(x=this.length+x);for(var L=0,N=this.head;N!==null&&L=0&&(A._idleTimeoutId=setTimeout(function(){A._onTimeout&&A._onTimeout()},x))},f(14),u.setImmediate=typeof self!="undefined"&&self.setImmediate||c!==void 0&&c.setImmediate||this&&this.setImmediate,u.clearImmediate=typeof self!="undefined"&&self.clearImmediate||c!==void 0&&c.clearImmediate||this&&this.clearImmediate}).call(this,f(4))},function(i,u,f){(function(c,g){(function(t,C){"use strict";if(!t.setImmediate){var A,x,D,L,N,j=1,$={},h=!1,re=t.document,ce=Object.getPrototypeOf&&Object.getPrototypeOf(t);ce=ce&&ce.setTimeout?ce:t,{}.toString.call(t.process)==="[object process]"?A=function(Se){g.nextTick(function(){oe(Se)})}:function(){if(t.postMessage&&!t.importScripts){var Se=!0,me=t.onmessage;return t.onmessage=function(){Se=!1},t.postMessage("","*"),t.onmessage=me,Se}}()?(L="setImmediate$"+Math.random()+"$",N=function(Se){Se.source===t&&typeof Se.data=="string"&&Se.data.indexOf(L)===0&&oe(+Se.data.slice(L.length))},t.addEventListener?t.addEventListener("message",N,!1):t.attachEvent("onmessage",N),A=function(Se){t.postMessage(L+Se,"*")}):t.MessageChannel?((D=new MessageChannel).port1.onmessage=function(Se){oe(Se.data)},A=function(Se){D.port2.postMessage(Se)}):re&&"onreadystatechange"in re.createElement("script")?(x=re.documentElement,A=function(Se){var me=re.createElement("script");me.onreadystatechange=function(){oe(Se),me.onreadystatechange=null,x.removeChild(me),me=null},x.appendChild(me)}):A=function(Se){setTimeout(oe,0,Se)},ce.setImmediate=function(Se){typeof Se!="function"&&(Se=new Function(""+Se));for(var me=new Array(arguments.length-1),De=0;Dene;ne++)if((V=Q(Je,Ot,ne))!==-1){ce=ne,Ot=V;break e}Ot=-1}}e:{if(Je=Nt,(V=j().get(At.primitive))!==void 0){for(ne=0;neOt-Je?null:Nt.slice(Je,Ot-1))!==null){if(Ot=0,Le!==null){for(;OtOt;Le--)ot=Ue.pop()}for(Le=Nt.length-Ot-1;1<=Le;Le--)Ot=[],ot.push({id:null,isStateEditable:!1,name:Se(Nt[Le-1].functionName),value:void 0,subHooks:Ot}),Ue.push(ot),ot=Ot;Le=Nt}Ot=(Nt=At.primitive)==="Context"||Nt==="DebugValue"?null:ct++,ot.push({id:Ot,isStateEditable:Nt==="Reducer"||Nt==="State",name:Nt,value:At.value,subHooks:[]})}return function ge(Z,Ae){for(var at=[],it=0;it-1&&($=$.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var h=$.replace(/^\s+/,"").replace(/\(eval code/g,"("),re=h.match(/ (\((.+):(\d+):(\d+)\)$)/),ce=(h=re?h.replace(re[0],""):h).split(/\s+/).slice(1),Q=this.extractLocation(re?re[1]:ce.pop()),oe=ce.join(" ")||void 0,Se=["eval",""].indexOf(Q[0])>-1?void 0:Q[0];return new x({functionName:oe,fileName:Se,lineNumber:Q[1],columnNumber:Q[2],source:$})},this)},parseFFOrSafari:function(j){return j.stack.split(` -`).filter(function($){return!$.match(N)},this).map(function($){if($.indexOf(" > eval")>-1&&($=$.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),$.indexOf("@")===-1&&$.indexOf(":")===-1)return new x({functionName:$});var h=/((.*".+"[^@]*)?[^@]*)(?:@)/,re=$.match(h),ce=re&&re[1]?re[1]:void 0,Q=this.extractLocation($.replace(h,""));return new x({functionName:ce,fileName:Q[0],lineNumber:Q[1],columnNumber:Q[2],source:$})},this)},parseOpera:function(j){return!j.stacktrace||j.message.indexOf(` -`)>-1&&j.message.split(` -`).length>j.stacktrace.split(` -`).length?this.parseOpera9(j):j.stack?this.parseOpera11(j):this.parseOpera10(j)},parseOpera9:function(j){for(var $=/Line (\d+).*script (?:in )?(\S+)/i,h=j.message.split(` -`),re=[],ce=2,Q=h.length;ce/,"$2").replace(/\([^)]*\)/g,"")||void 0;Q.match(/\(([^)]*)\)/)&&(h=Q.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var Se=h===void 0||h==="[arguments not available]"?void 0:h.split(",");return new x({functionName:oe,args:Se,fileName:ce[0],lineNumber:ce[1],columnNumber:ce[2],source:$})},this)}}})=="function"?c.apply(u,g):c)===void 0||(i.exports=t)})()},function(i,u,f){var c,g,t;(function(C,A){"use strict";g=[],(t=typeof(c=function(){function x(oe){return oe.charAt(0).toUpperCase()+oe.substring(1)}function D(oe){return function(){return this[oe]}}var L=["isConstructor","isEval","isNative","isToplevel"],N=["columnNumber","lineNumber"],j=["fileName","functionName","source"],$=L.concat(N,j,["args"]);function h(oe){if(oe)for(var Se=0;Se<$.length;Se++)oe[$[Se]]!==void 0&&this["set"+x($[Se])](oe[$[Se]])}h.prototype={getArgs:function(){return this.args},setArgs:function(oe){if(Object.prototype.toString.call(oe)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=oe},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(oe){if(oe instanceof h)this.evalOrigin=oe;else{if(!(oe instanceof Object))throw new TypeError("Eval Origin must be an Object or StackFrame");this.evalOrigin=new h(oe)}},toString:function(){var oe=this.getFileName()||"",Se=this.getLineNumber()||"",me=this.getColumnNumber()||"",De=this.getFunctionName()||"";return this.getIsEval()?oe?"[eval] ("+oe+":"+Se+":"+me+")":"[eval]:"+Se+":"+me:De?De+" ("+oe+":"+Se+":"+me+")":oe+":"+Se+":"+me}},h.fromString=function(oe){var Se=oe.indexOf("("),me=oe.lastIndexOf(")"),De=oe.substring(0,Se),J=oe.substring(Se+1,me).split(","),Te=oe.substring(me+1);if(Te.indexOf("@")===0)var Oe=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(Te,""),Le=Oe[1],ot=Oe[2],ct=Oe[3];return new h({functionName:De,args:J||void 0,fileName:Le,lineNumber:ot||void 0,columnNumber:ct||void 0})};for(var re=0;re1?de-1:0),ve=1;ve=0&&de.splice(W,1)}}}])&&c(R.prototype,U),H&&c(R,H),F}(),t=f(2),C=f.n(t);try{var A=f(9).default,x=function(F){var R=new RegExp("".concat(F,": ([0-9]+)")),U=A.match(R);return parseInt(U[1],10)};x("comfortable-line-height-data"),x("compact-line-height-data")}catch(F){}function D(F){try{return sessionStorage.getItem(F)}catch(R){return null}}function L(F){try{sessionStorage.removeItem(F)}catch(R){}}function N(F,R){try{return sessionStorage.setItem(F,R)}catch(U){}}var j=function(F,R){return F===R},$=f(1),h=f.n($);function re(F){return F.ownerDocument?F.ownerDocument.defaultView:null}function ce(F){var R=re(F);return R?R.frameElement:null}function Q(F){var R=me(F);return oe([F.getBoundingClientRect(),{top:R.borderTop,left:R.borderLeft,bottom:R.borderBottom,right:R.borderRight,width:0,height:0}])}function oe(F){return F.reduce(function(R,U){return R==null?U:{top:R.top+U.top,left:R.left+U.left,width:R.width,height:R.height,bottom:R.bottom+U.bottom,right:R.right+U.right}})}function Se(F,R){var U=ce(F);if(U&&U!==R){for(var H=[F.getBoundingClientRect()],fe=U,ue=!1;fe;){var de=Q(fe);if(H.push(de),fe=ce(fe),ue)break;fe&&re(fe)===R&&(ue=!0)}return oe(H)}return F.getBoundingClientRect()}function me(F){var R=window.getComputedStyle(F);return{borderLeft:parseInt(R.borderLeftWidth,10),borderRight:parseInt(R.borderRightWidth,10),borderTop:parseInt(R.borderTopWidth,10),borderBottom:parseInt(R.borderBottomWidth,10),marginLeft:parseInt(R.marginLeft,10),marginRight:parseInt(R.marginRight,10),marginTop:parseInt(R.marginTop,10),marginBottom:parseInt(R.marginBottom,10),paddingLeft:parseInt(R.paddingLeft,10),paddingRight:parseInt(R.paddingRight,10),paddingTop:parseInt(R.paddingTop,10),paddingBottom:parseInt(R.paddingBottom,10)}}function De(F,R){var U;if(typeof Symbol=="undefined"||F[Symbol.iterator]==null){if(Array.isArray(F)||(U=function(ve,Fe){if(!!ve){if(typeof ve=="string")return J(ve,Fe);var Ge=Object.prototype.toString.call(ve).slice(8,-1);if(Ge==="Object"&&ve.constructor&&(Ge=ve.constructor.name),Ge==="Map"||Ge==="Set")return Array.from(ve);if(Ge==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Ge))return J(ve,Fe)}}(F))||R&&F&&typeof F.length=="number"){U&&(F=U);var H=0,fe=function(){};return{s:fe,n:function(){return H>=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function J(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);Ude.left+de.width&&(K=de.left+de.width-Ge-5),{style:{top:ve+="px",left:K+="px"}}}(R,U,{width:H.width,height:H.height});h()(this.tip.style,fe.style)}}]),F}(),Ue=function(){function F(){Te(this,F);var R=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=R;var U=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=U;var H=R.document;this.container=H.createElement("div"),this.container.style.zIndex="10000000",this.tip=new ct(H,this.container),this.rects=[],H.body.appendChild(this.container)}return Le(F,[{key:"remove",value:function(){this.tip.remove(),this.rects.forEach(function(R){R.remove()}),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:"inspect",value:function(R,U){for(var H=this,fe=R.filter(function(Xe){return Xe.nodeType===Node.ELEMENT_NODE});this.rects.length>fe.length;)this.rects.pop().remove();if(fe.length!==0){for(;this.rects.length1&&arguments[1]!==void 0?arguments[1]:j,je=void 0,Xe=[],rt=void 0,st=!1,xt=function(lt,Rt){return xe(lt,Xe[Rt])},wt=function(){for(var lt=arguments.length,Rt=Array(lt),yn=0;yn5&&arguments[5]!==void 0?arguments[5]:0,W=cl(F);switch(W){case"html_element":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.tagName,type:W};case"function":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:typeof F.name!="function"&&F.name?F.name:"function",type:W};case"string":return F.length<=500?F:F.slice(0,500)+"...";case"bigint":case"symbol":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.toString(),type:W};case"react_element":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:al(F)||"Unknown",type:W};case"array_buffer":case"data_view":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:W==="data_view"?"DataView":"ArrayBuffer",size:F.byteLength,type:W};case"array":return ue=fe(H),de>=2&&!ue?yo(W,!0,F,R,H):F.map(function(Ge,K){return Ds(Ge,R,U,H.concat([K]),fe,ue?1:de+1)});case"html_all_collection":case"typed_array":case"iterator":if(ue=fe(H),de>=2&&!ue)return yo(W,!0,F,R,H);var ve={unserializable:!0,type:W,readonly:!0,size:W==="typed_array"?F.length:void 0,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.constructor&&F.constructor.name!=="Object"?F.constructor.name:""};return r0(F[Symbol.iterator])&&Array.from(F).forEach(function(Ge,K){return ve[K]=Ds(Ge,R,U,H.concat([K]),fe,ue?1:de+1)}),U.push(H),ve;case"opaque_iterator":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F[Symbol.toStringTag],type:W};case"date":case"regexp":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.toString(),type:W};case"object":if(ue=fe(H),de>=2&&!ue)return yo(W,!0,F,R,H);var Fe={};return Es(F).forEach(function(Ge){var K=Ge.toString();Fe[K]=Ds(F[Ge],R,U,H.concat([K]),fe,ue?1:de+1)}),Fe;case"infinity":case"nan":case"undefined":return R.push(H),{type:W};default:return F}}function Mu(F){return(Mu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Gf(F){return function(R){if(Array.isArray(R))return iu(R)}(F)||function(R){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(R))return Array.from(R)}(F)||function(R,U){if(!!R){if(typeof R=="string")return iu(R,U);var H=Object.prototype.toString.call(R).slice(8,-1);if(H==="Object"&&R.constructor&&(H=R.constructor.name),H==="Map"||H==="Set")return Array.from(R);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return iu(R,U)}}(F)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function iu(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);UR.toString()?1:R.toString()>F.toString()?-1:0}function Es(F){for(var R=[],U=F,H=function(){var fe=[].concat(Gf(Object.keys(U)),Gf(Object.getOwnPropertySymbols(U))),ue=Object.getOwnPropertyDescriptors(U);fe.forEach(function(de){ue[de].enumerable&&R.push(de)}),U=Object.getPrototypeOf(U)};U!=null;)H();return R}function Uo(F){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",U=ou.get(F);if(U!=null)return U;var H=R;return typeof F.displayName=="string"?H=F.displayName:typeof F.name=="string"&&F.name!==""&&(H=F.name),ou.set(F,H),H}var sl=0;function Ss(){return++sl}function Cs(F){var R=ol.get(F);if(R!==void 0)return R;for(var U=new Array(F.length),H=0;H1&&arguments[1]!==void 0?arguments[1]:50;return F.length>R?F.substr(0,R)+"\u2026":F}function Mr(F,R){if(F!=null&&hasOwnProperty.call(F,Ci.type))return R?F[Ci.preview_long]:F[Ci.preview_short];switch(cl(F)){case"html_element":return"<".concat(Ui(F.tagName.toLowerCase())," />");case"function":return Ui("\u0192 ".concat(typeof F.name=="function"?"":F.name,"() {}"));case"string":return'"'.concat(F,'"');case"bigint":return Ui(F.toString()+"n");case"regexp":case"symbol":return Ui(F.toString());case"react_element":return"<".concat(Ui(al(F)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(F.byteLength,")");case"data_view":return"DataView(".concat(F.buffer.byteLength,")");case"array":if(R){for(var U="",H=0;H0&&(U+=", "),!((U+=Mr(F[H],!1)).length>50));H++);return"[".concat(Ui(U),"]")}var fe=hasOwnProperty.call(F,Ci.size)?F[Ci.size]:F.length;return"Array(".concat(fe,")");case"typed_array":var ue="".concat(F.constructor.name,"(").concat(F.length,")");if(R){for(var de="",W=0;W0&&(de+=", "),!((de+=F[W]).length>50));W++);return"".concat(ue," [").concat(Ui(de),"]")}return ue;case"iterator":var ve=F.constructor.name;if(R){for(var Fe=Array.from(F),Ge="",K=0;K0&&(Ge+=", "),Array.isArray(xe)){var je=Mr(xe[0],!0),Xe=Mr(xe[1],!1);Ge+="".concat(je," => ").concat(Xe)}else Ge+=Mr(xe,!1);if(Ge.length>50)break}return"".concat(ve,"(").concat(F.size,") {").concat(Ui(Ge),"}")}return"".concat(ve,"(").concat(F.size,")");case"opaque_iterator":return F[Symbol.toStringTag];case"date":return F.toString();case"object":if(R){for(var rt=Es(F).sort(ul),st="",xt=0;xt0&&(st+=", "),(st+="".concat(wt.toString(),": ").concat(Mr(F[wt],!1))).length>50)break}return"{".concat(Ui(st),"}")}return"{\u2026}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return F;default:try{return Ui(""+F)}catch(lt){return"unserializable"}}}var Ac=f(7);function of(F){return(of=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Ts(F,R){var U=Object.keys(F);if(Object.getOwnPropertySymbols){var H=Object.getOwnPropertySymbols(F);R&&(H=H.filter(function(fe){return Object.getOwnPropertyDescriptor(F,fe).enumerable})),U.push.apply(U,H)}return U}function xs(F){for(var R=1;R2&&arguments[2]!==void 0?arguments[2]:[];if(F!==null){var H=[],fe=[],ue=Ds(F,H,fe,U,R);return{data:ue,cleaned:H,unserializable:fe}}return null}function qo(F){var R,U,H=(R=F,U=new Set,JSON.stringify(R,function(de,W){if(of(W)==="object"&&W!==null){if(U.has(W))return;U.add(W)}return typeof W=="bigint"?W.toString()+"n":W})),fe=H===void 0?"undefined":H,ue=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;typeof ue=="function"?ue(fe).catch(function(de){}):Object(Ac.copy)(fe)}function kr(F,R){var U=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,H=R[U],fe=Array.isArray(F)?F.slice():xs({},F);return U+1===R.length?Array.isArray(fe)?fe.splice(H,1):delete fe[H]:fe[H]=kr(F[H],R,U+1),fe}function Fr(F,R,U){var H=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,fe=R[H],ue=Array.isArray(F)?F.slice():xs({},F);if(H+1===R.length){var de=U[H];ue[de]=ue[fe],Array.isArray(ue)?ue.splice(fe,1):delete ue[fe]}else ue[fe]=Fr(F[fe],R,U,H+1);return ue}function si(F,R,U){var H=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if(H>=R.length)return U;var fe=R[H],ue=Array.isArray(F)?F.slice():xs({},F);return ue[fe]=si(F[fe],R,U,H+1),ue}var H0=f(8);function b0(F,R){var U=Object.keys(F);if(Object.getOwnPropertySymbols){var H=Object.getOwnPropertySymbols(F);R&&(H=H.filter(function(fe){return Object.getOwnPropertyDescriptor(F,fe).enumerable})),U.push.apply(U,H)}return U}function Bt(F){for(var R=1;R=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function As(F,R){if(F){if(typeof F=="string")return uu(F,R);var U=Object.prototype.toString.call(F).slice(8,-1);return U==="Object"&&F.constructor&&(U=F.constructor.name),U==="Map"||U==="Set"?Array.from(F):U==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(U)?uu(F,R):void 0}}function uu(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);U0){var et=ue(X);if(et!=null){var Dt,bt=ks(du);try{for(bt.s();!(Dt=bt.n()).done;)if(Dt.value.test(et))return!0}catch(fn){bt.e(fn)}finally{bt.f()}}}if(Y!=null&&Yu.size>0){var Zt,qt=Y.fileName,Ut=ks(Yu);try{for(Ut.s();!(Zt=Ut.n()).done;)if(Zt.value.test(qt))return!0}catch(fn){Ut.e(fn)}finally{Ut.f()}}return!1}function Gr(X){var Y=X.type;switch(X.tag){case Xe:case ar:return 1;case je:case rn:return 5;case wt:return 6;case lt:return 11;case yn:return 7;case Rt:case sn:case xt:return 9;case Hn:case Cr:return 8;case He:return 12;case Qe:return 13;default:switch(de(Y)){case 60111:case"Symbol(react.concurrent_mode)":case"Symbol(react.async_mode)":return 9;case 60109:case"Symbol(react.provider)":return 2;case 60110:case"Symbol(react.context)":return 2;case 60108:case"Symbol(react.strict_mode)":return 9;case 60114:case"Symbol(react.profiler)":return 10;default:return 9}}}function ir(X){if(Co.has(X))return X;var Y=X.alternate;return Y!=null&&Co.has(Y)?Y:(Co.add(X),X)}window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null?qs(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):qs([{type:1,value:7,isEnabled:!0}]);var L0=new Map,Y0=new Map,Co=new Set,$u=new Map,Vo=new Map,Rr=-1;function Jn(X){if(!L0.has(X)){var Y=Ss();L0.set(X,Y),Y0.set(Y,X)}return L0.get(X)}function ai(X){switch(Gr(X)){case 1:if(N0!==null){var Y=Jn(ir(X)),ye=Vr(X);ye!==null&&N0.set(Y,ye)}}}var o0={};function Vr(X){switch(Gr(X)){case 1:var Y=X.stateNode,ye=o0,he=o0;return Y!=null&&(Y.constructor&&Y.constructor.contextType!=null?he=Y.context:(ye=Y.context)&&Object.keys(ye).length===0&&(ye=o0)),[ye,he];default:return null}}function ff(X){switch(Gr(X)){case 1:if(N0!==null){var Y=Jn(ir(X)),ye=N0.has(Y)?N0.get(Y):null,he=Vr(X);if(ye==null||he==null)return null;var We=Ru(ye,2),et=We[0],Dt=We[1],bt=Ru(he,2),Zt=bt[0],qt=bt[1];if(Zt!==o0)return $0(et,Zt);if(qt!==o0)return Dt!==qt}}return null}function cf(X,Y){if(X==null||Y==null)return!1;if(Y.hasOwnProperty("baseState")&&Y.hasOwnProperty("memoizedState")&&Y.hasOwnProperty("next")&&Y.hasOwnProperty("queue"))for(;Y!==null;){if(Y.memoizedState!==X.memoizedState)return!0;Y=Y.next,X=X.next}return!1}function $0(X,Y){if(X==null||Y==null||Y.hasOwnProperty("baseState")&&Y.hasOwnProperty("memoizedState")&&Y.hasOwnProperty("next")&&Y.hasOwnProperty("queue"))return null;var ye,he=[],We=ks(new Set([].concat(c0(Object.keys(X)),c0(Object.keys(Y)))));try{for(We.s();!(ye=We.n()).done;){var et=ye.value;X[et]!==Y[et]&&he.push(et)}}catch(Dt){We.e(Dt)}finally{We.f()}return he}function K0(X,Y){switch(Y.tag){case Xe:case je:case rt:case Hn:case Cr:return(zo(Y)&K)===K;default:return X.memoizedProps!==Y.memoizedProps||X.memoizedState!==Y.memoizedState||X.ref!==Y.ref}}var ae=[],Be=[],Ie=[],ht=[],mt=new Map,wn=0,Gn=null;function $t(X){ae.push(X)}function X0(X){if(ae.length!==0||Be.length!==0||Ie.length!==0||Gn!==null||u0){var Y=Be.length+Ie.length+(Gn===null?0:1),ye=new Array(3+wn+(Y>0?2+Y:0)+ae.length),he=0;if(ye[he++]=R,ye[he++]=Rr,ye[he++]=wn,mt.forEach(function(bt,Zt){ye[he++]=Zt.length;for(var qt=Cs(Zt),Ut=0;Ut0){ye[he++]=2,ye[he++]=Y;for(var We=Be.length-1;We>=0;We--)ye[he++]=Be[We];for(var et=0;et0?X.forEach(function(Y){F.emit("operations",Y)}):(Fn!==null&&(zr=!0),F.getFiberRoots(R).forEach(function(Y){T0(Rr=Jn(ir(Y.current)),Y.current),u0&&Y.memoizedInteractions!=null&&(uo={changeDescriptions:To?new Map:null,durations:[],commitTime:Os()-v0,interactions:Array.from(Y.memoizedInteractions).map(function(ye){return Bt(Bt({},ye),{},{timestamp:ye.timestamp-v0})}),maxActualDuration:0,priorityLevel:null}),$r(Y.current,null,!1,!1),X0(),Rr=-1}))},getBestMatchForTrackedPath:function(){if(Fn===null||pi===null)return null;for(var X=pi;X!==null&&F0(X);)X=X.return;return X===null?null:{id:Jn(ir(X)),isFullMatch:Br===Fn.length-1}},getDisplayNameForFiberID:function(X){var Y=Y0.get(X);return Y!=null?ue(Y):null},getFiberIDForNative:function(X){var Y=arguments.length>1&&arguments[1]!==void 0&&arguments[1],ye=U.findFiberByHostInstance(X);if(ye!=null){if(Y)for(;ye!==null&&F0(ye);)ye=ye.return;return Jn(ir(ye))}return null},getInstanceAndStyle:function(X){var Y=null,ye=null,he=J0(X);return he!==null&&(Y=he.stateNode,he.memoizedProps!==null&&(ye=he.memoizedProps.style)),{instance:Y,style:ye}},getOwnersList:function(X){var Y=J0(X);if(Y==null)return null;var ye=Y._debugOwner,he=[{displayName:ue(Y)||"Anonymous",id:X,type:Gr(Y)}];if(ye)for(var We=ye;We!==null;)he.unshift({displayName:ue(We)||"Anonymous",id:Jn(ir(We)),type:Gr(We)}),We=We._debugOwner||null;return he},getPathForElement:function(X){var Y=Y0.get(X);if(Y==null)return null;for(var ye=[];Y!==null;)ye.push(Ai(Y)),Y=Y.return;return ye.reverse(),ye},getProfilingData:function(){var X=[];if(pu===null)throw Error("getProfilingData() called before any profiling data was recorded");return pu.forEach(function(Y,ye){var he=[],We=[],et=new Map,Dt=new Map,bt=so!==null&&so.get(ye)||"Unknown";C0!=null&&C0.forEach(function(Zt,qt){di!=null&&di.get(qt)===ye&&We.push([qt,Zt])}),Y.forEach(function(Zt,qt){var Ut=Zt.changeDescriptions,fn=Zt.durations,_t=Zt.interactions,_r=Zt.maxActualDuration,Wr=Zt.priorityLevel,Ar=Zt.commitTime,z=[];_t.forEach(function(s0){et.has(s0.id)||et.set(s0.id,s0),z.push(s0.id);var t0=Dt.get(s0.id);t0!=null?t0.push(qt):Dt.set(s0.id,[qt])});for(var dr=[],Or=[],Qn=0;Qn1?kn.set(Ut,fn-1):kn.delete(Ut),wr.delete(Zt)}(Rr),Yr(ye,!1))}else T0(Rr,ye),$r(ye,null,!1,!1);if(u0&&We){var bt=pu.get(Rr);bt!=null?bt.push(uo):pu.set(Rr,[uo])}X0(),oo&&F.emit("traceUpdates",Hi),Rr=-1},handleCommitFiberUnmount:function(X){Yr(X,!1)},inspectElement:function(X,Y){if(Tr(X)){if(Y!=null){R0(Y);var ye=null;return Y[0]==="hooks"&&(ye="hooks"),{id:X,type:"hydrated-path",path:Y,value:qi(Ti(S0,Y),Nr(null,ye),Y)}}return{id:X,type:"no-change"}}if(El=!1,S0!==null&&S0.id===X||(Q0={}),(S0=af(X))===null)return{id:X,type:"not-found"};Y!=null&&R0(Y),function(We){var et=We.hooks,Dt=We.id,bt=We.props,Zt=Y0.get(Dt);if(Zt!=null){var qt=Zt.elementType,Ut=Zt.stateNode,fn=Zt.tag,_t=Zt.type;switch(fn){case Xe:case ar:case rn:H.$r=Ut;break;case je:H.$r={hooks:et,props:bt,type:_t};break;case wt:H.$r={props:bt,type:_t.render};break;case Hn:case Cr:H.$r={props:bt,type:qt!=null&&qt.type!=null?qt.type:_t};break;default:H.$r=null}}else console.warn('Could not find Fiber with id "'.concat(Dt,'"'))}(S0);var he=Bt({},S0);return he.context=qi(he.context,Nr("context",null)),he.hooks=qi(he.hooks,Nr("hooks","hooks")),he.props=qi(he.props,Nr("props",null)),he.state=qi(he.state,Nr("state",null)),{id:X,type:"full-data",value:he}},logElementToConsole:function(X){var Y=Tr(X)?S0:af(X);if(Y!==null){var ye=typeof console.groupCollapsed=="function";ye&&console.groupCollapsed("[Click to expand] %c<".concat(Y.displayName||"Component"," />"),"color: var(--dom-tag-name-color); font-weight: normal;"),Y.props!==null&&console.log("Props:",Y.props),Y.state!==null&&console.log("State:",Y.state),Y.hooks!==null&&console.log("Hooks:",Y.hooks);var he=zs(X);he!==null&&console.log("Nodes:",he),Y.source!==null&&console.log("Location:",Y.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),ye&&console.groupEnd()}else console.warn('Could not find Fiber with id "'.concat(X,'"'))},prepareViewAttributeSource:function(X,Y){Tr(X)&&(window.$attribute=Ti(S0,Y))},prepareViewElementSource:function(X){var Y=Y0.get(X);if(Y!=null){var ye=Y.elementType,he=Y.tag,We=Y.type;switch(he){case Xe:case ar:case rn:case je:H.$type=We;break;case wt:H.$type=We.render;break;case Hn:case Cr:H.$type=ye!=null&&ye.type!=null?ye.type:We;break;default:H.$type=null}}else console.warn('Could not find Fiber with id "'.concat(X,'"'))},overrideSuspense:function(X,Y){if(typeof Eo!="function"||typeof So!="function")throw new Error("Expected overrideSuspense() to not get called for earlier React versions.");Y?(B0.add(X),B0.size===1&&Eo(hu)):(B0.delete(X),B0.size===0&&Eo(Cl));var ye=Y0.get(X);ye!=null&&So(ye)},overrideValueAtPath:function(X,Y,ye,he,We){var et=J0(Y);if(et!==null){var Dt=et.stateNode;switch(X){case"context":switch(he=he.slice(1),et.tag){case Xe:he.length===0?Dt.context=We:fl(Dt.context,he,We),Dt.forceUpdate()}break;case"hooks":typeof p0=="function"&&p0(et,ye,he,We);break;case"props":switch(et.tag){case Xe:et.pendingProps=si(Dt.props,he,We),Dt.forceUpdate();break;default:typeof xi=="function"&&xi(et,he,We)}break;case"state":switch(et.tag){case Xe:fl(Dt.state,he,We),Dt.forceUpdate()}}}},renamePath:function(X,Y,ye,he,We){var et=J0(Y);if(et!==null){var Dt=et.stateNode;switch(X){case"context":switch(he=he.slice(1),We=We.slice(1),et.tag){case Xe:he.length===0||ll(Dt.context,he,We),Dt.forceUpdate()}break;case"hooks":typeof ci=="function"&&ci(et,ye,he,We);break;case"props":Dt===null?typeof qr=="function"&&qr(et,he,We):(et.pendingProps=Fr(Dt.props,he,We),Dt.forceUpdate());break;case"state":ll(Dt.state,he,We),Dt.forceUpdate()}}},renderer:U,setTraceUpdatesEnabled:function(X){oo=X},setTrackedPath:lo,startProfiling:Sl,stopProfiling:function(){u0=!1,To=!1},storeAsGlobal:function(X,Y,ye){if(Tr(X)){var he=Ti(S0,Y),We="$reactTemp".concat(ye);window[We]=he,console.log(We),console.log(he)}},updateComponentFilters:function(X){if(u0)throw Error("Cannot modify filter preferences while profiling");F.getFiberRoots(R).forEach(function(Y){Rr=Jn(ir(Y.current)),m0(Y.current),Yr(Y.current,!1),Rr=-1}),qs(X),kn.clear(),F.getFiberRoots(R).forEach(function(Y){T0(Rr=Jn(ir(Y.current)),Y.current),$r(Y.current,null,!1,!1),X0(Y),Rr=-1})}}}var _n;function Nu(F){return(Nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Wo(F,R,U){if(_n===void 0)try{throw Error()}catch(fe){var H=fe.stack.trim().match(/\n( *(at )?)/);_n=H&&H[1]||""}return` -`+_n+F}var su=!1;function Ps(F,R,U){if(!F||su)return"";var H,fe=Error.prepareStackTrace;Error.prepareStackTrace=void 0,su=!0;var ue=U.current;U.current=null;try{if(R){var de=function(){throw Error()};if(Object.defineProperty(de.prototype,"props",{set:function(){throw Error()}}),(typeof Reflect=="undefined"?"undefined":Nu(Reflect))==="object"&&Reflect.construct){try{Reflect.construct(de,[])}catch(xe){H=xe}Reflect.construct(F,[],de)}else{try{de.call()}catch(xe){H=xe}F.call(de.prototype)}}else{try{throw Error()}catch(xe){H=xe}F()}}catch(xe){if(xe&&H&&typeof xe.stack=="string"){for(var W=xe.stack.split(` -`),ve=H.stack.split(` -`),Fe=W.length-1,Ge=ve.length-1;Fe>=1&&Ge>=0&&W[Fe]!==ve[Ge];)Ge--;for(;Fe>=1&&Ge>=0;Fe--,Ge--)if(W[Fe]!==ve[Ge]){if(Fe!==1||Ge!==1)do if(Fe--,--Ge<0||W[Fe]!==ve[Ge])return` -`+W[Fe].replace(" at new "," at ");while(Fe>=1&&Ge>=0);break}}}finally{su=!1,Error.prepareStackTrace=fe,U.current=ue}var K=F?F.displayName||F.name:"";return K?Wo(K):""}function pl(F,R,U,H){return Ps(F,!1,H)}function Vf(F,R,U){var H=F.HostComponent,fe=F.LazyComponent,ue=F.SuspenseComponent,de=F.SuspenseListComponent,W=F.FunctionComponent,ve=F.IndeterminateComponent,Fe=F.SimpleMemoComponent,Ge=F.ForwardRef,K=F.Block,xe=F.ClassComponent;switch(R.tag){case H:return Wo(R.type);case fe:return Wo("Lazy");case ue:return Wo("Suspense");case de:return Wo("SuspenseList");case W:case ve:case Fe:return pl(R.type,0,0,U);case Ge:return pl(R.type.render,0,0,U);case K:return pl(R.type._render,0,0,U);case xe:return function(je,Xe,rt,st){return Ps(je,!0,st)}(R.type,0,0,U);default:return""}}function hl(F,R,U){try{var H="",fe=R;do H+=Vf(F,fe,U),fe=fe.return;while(fe);return H}catch(ue){return` -Error generating stack: `+ue.message+` -`+ue.stack}}function Bu(F,R){var U;if(typeof Symbol=="undefined"||F[Symbol.iterator]==null){if(Array.isArray(F)||(U=function(ve,Fe){if(!!ve){if(typeof ve=="string")return ju(ve,Fe);var Ge=Object.prototype.toString.call(ve).slice(8,-1);if(Ge==="Object"&&ve.constructor&&(Ge=ve.constructor.name),Ge==="Map"||Ge==="Set")return Array.from(ve);if(Ge==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Ge))return ju(ve,Fe)}}(F))||R&&F&&typeof F.length=="number"){U&&(F=U);var H=0,fe=function(){};return{s:fe,n:function(){return H>=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function ju(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);U0?Fe[Fe.length-1]:null,xe=K!==null&&(ro.test(K)||Ms.test(K));if(!xe){var je,Xe=Bu(ml.values());try{for(Xe.s();!(je=Xe.n()).done;){var rt=je.value,st=rt.currentDispatcherRef,xt=rt.getCurrentFiber,wt=rt.workTagMap,lt=xt();if(lt!=null){var Rt=hl(wt,lt,st);Rt!==""&&Fe.push(Rt);break}}}catch(yn){Xe.e(yn)}finally{Xe.f()}}}catch(yn){}ue.apply(void 0,Fe)};de.__REACT_DEVTOOLS_ORIGINAL_METHOD__=ue,Uu[fe]=de}catch(W){}})}}function O0(F){return(O0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function vl(F,R){for(var U=0;UF.length)&&(R=F.length);for(var U=0,H=new Array(R);U1?W-1:0),Fe=1;Fe0?K[K.length-1]:0),K.push(St),W.set(Ne,Fe(ft._topLevelWrapper));try{var Qt=He.apply(this,Qe);return K.pop(),Qt}catch(bn){throw K=[],bn}finally{if(K.length===0){var Cn=W.get(Ne);if(Cn===void 0)throw new Error("Expected to find root ID.");yn(Cn)}}},performUpdateIfNecessary:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);var St=ln(Ne);try{var Qt=He.apply(this,Qe),Cn=ln(Ne);return Ge(St,Cn)||Xe(Ne,ft,Cn),K.pop(),Qt}catch(p0){throw K=[],p0}finally{if(K.length===0){var bn=W.get(Ne);if(bn===void 0)throw new Error("Expected to find root ID.");yn(bn)}}},receiveComponent:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);var St=ln(Ne);try{var Qt=He.apply(this,Qe),Cn=ln(Ne);return Ge(St,Cn)||Xe(Ne,ft,Cn),K.pop(),Qt}catch(p0){throw K=[],p0}finally{if(K.length===0){var bn=W.get(Ne);if(bn===void 0)throw new Error("Expected to find root ID.");yn(bn)}}},unmountComponent:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);try{var St=He.apply(this,Qe);return K.pop(),function(Cn,bn){wt.push(bn),ue.delete(bn)}(0,ft),St}catch(Cn){throw K=[],Cn}finally{if(K.length===0){var Qt=W.get(Ne);if(Qt===void 0)throw new Error("Expected to find root ID.");yn(Qt)}}}}));var st=[],xt=new Map,wt=[],lt=0,Rt=null;function yn(He){if(st.length!==0||wt.length!==0||Rt!==null){var Qe=wt.length+(Rt===null?0:1),Ne=new Array(3+lt+(Qe>0?2+Qe:0)+st.length),ft=0;if(Ne[ft++]=R,Ne[ft++]=He,Ne[ft++]=lt,xt.forEach(function(Cn,bn){Ne[ft++]=bn.length;for(var p0=Cs(bn),h0=0;h00){Ne[ft++]=2,Ne[ft++]=Qe;for(var St=0;St"),"color: var(--dom-tag-name-color); font-weight: normal;"),Qe.props!==null&&console.log("Props:",Qe.props),Qe.state!==null&&console.log("State:",Qe.state),Qe.context!==null&&console.log("Context:",Qe.context);var ft=fe(He);ft!==null&&console.log("Node:",ft),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Ne&&console.groupEnd()}else console.warn('Could not find element with id "'.concat(He,'"'))},overrideSuspense:function(){throw new Error("overrideSuspense not supported by this renderer")},overrideValueAtPath:function(He,Qe,Ne,ft,St){var Qt=ue.get(Qe);if(Qt!=null){var Cn=Qt._instance;if(Cn!=null)switch(He){case"context":fl(Cn.context,ft,St),a0(Cn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var bn=Qt._currentElement;Qt._currentElement=V0(V0({},bn),{},{props:si(bn.props,ft,St)}),a0(Cn);break;case"state":fl(Cn.state,ft,St),a0(Cn)}}},renamePath:function(He,Qe,Ne,ft,St){var Qt=ue.get(Qe);if(Qt!=null){var Cn=Qt._instance;if(Cn!=null)switch(He){case"context":ll(Cn.context,ft,St),a0(Cn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var bn=Qt._currentElement;Qt._currentElement=V0(V0({},bn),{},{props:Fr(bn.props,ft,St)}),a0(Cn);break;case"state":ll(Cn.state,ft,St),a0(Cn)}}},prepareViewAttributeSource:function(He,Qe){var Ne=Cr(He);Ne!==null&&(window.$attribute=Ti(Ne,Qe))},prepareViewElementSource:function(He){var Qe=ue.get(He);if(Qe!=null){var Ne=Qe._currentElement;Ne!=null?H.$type=Ne.type:console.warn('Could not find element with id "'.concat(He,'"'))}else console.warn('Could not find instance with id "'.concat(He,'"'))},renderer:U,setTraceUpdatesEnabled:function(He){},setTrackedPath:function(He){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(He,Qe,Ne){var ft=Cr(He);if(ft!==null){var St=Ti(ft,Qe),Qt="$reactTemp".concat(Ne);window[Qt]=St,console.log(Qt),console.log(St)}},updateComponentFilters:function(He){}}}function nr(F,R){var U=!1,H={bottom:0,left:0,right:0,top:0},fe=R[F];if(fe!=null){for(var ue=0,de=Object.keys(H);ue0?"development":"production";var st=Function.prototype.toString;if(rt.Mount&&rt.Mount._renderNewRootComponent){var xt=st.call(rt.Mount._renderNewRootComponent);return xt.indexOf("function")!==0?"production":xt.indexOf("storedMeasure")!==-1?"development":xt.indexOf("should be a pure function")!==-1?xt.indexOf("NODE_ENV")!==-1||xt.indexOf("development")!==-1||xt.indexOf("true")!==-1?"development":xt.indexOf("nextElement")!==-1||xt.indexOf("nextComponent")!==-1?"unminified":"development":xt.indexOf("nextElement")!==-1||xt.indexOf("nextComponent")!==-1?"unminified":"outdated"}}catch(wt){}return"production"}(ve);try{var K=window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__!==!1,xe=window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__===!0;(K||xe)&&(zi(ve),Ho({appendComponentStack:K,breakOnConsoleErrors:xe}))}catch(rt){}var je=F.__REACT_DEVTOOLS_ATTACH__;if(typeof je=="function"){var Xe=je(W,Fe,ve,F);W.rendererInterfaces.set(Fe,Xe)}return W.emit("renderer",{id:Fe,renderer:ve,reactBuildType:Ge}),Fe},on:function(ve,Fe){ue[ve]||(ue[ve]=[]),ue[ve].push(Fe)},off:function(ve,Fe){if(ue[ve]){var Ge=ue[ve].indexOf(Fe);Ge!==-1&&ue[ve].splice(Ge,1),ue[ve].length||delete ue[ve]}},sub:function(ve,Fe){return W.on(ve,Fe),function(){return W.off(ve,Fe)}},supportsFiber:!0,checkDCE:function(ve){try{Function.prototype.toString.call(ve).indexOf("^_^")>-1&&(U=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")}))}catch(Fe){}},onCommitFiberUnmount:function(ve,Fe){var Ge=fe.get(ve);Ge!=null&&Ge.handleCommitFiberUnmount(Fe)},onCommitFiberRoot:function(ve,Fe,Ge){var K=W.getFiberRoots(ve),xe=Fe.current,je=K.has(Fe),Xe=xe.memoizedState==null||xe.memoizedState.element==null;je||Xe?je&&Xe&&K.delete(Fe):K.add(Fe);var rt=fe.get(ve);rt!=null&&rt.handleCommitFiberRoot(Fe,Ge)}};Object.defineProperty(F,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function(){return W}})})(window);var M0=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,au=[{type:1,value:7,isEnabled:!0}];function Lr(F){if(M0!=null){var R=F||{},U=R.host,H=U===void 0?"localhost":U,fe=R.nativeStyleEditorValidAttributes,ue=R.useHttps,de=ue!==void 0&&ue,W=R.port,ve=W===void 0?8097:W,Fe=R.websocket,Ge=R.resolveRNStyle,K=Ge===void 0?null:Ge,xe=R.isAppActive,je=de?"wss":"ws",Xe=null;if((xe===void 0?function(){return!0}:xe)()){var rt=null,st=[],xt=je+"://"+H+":"+ve,wt=Fe||new window.WebSocket(xt);wt.onclose=function(){rt!==null&&rt.emit("shutdown"),lt()},wt.onerror=function(){lt()},wt.onmessage=function(Rt){var yn;try{if(typeof Rt.data!="string")throw Error();yn=JSON.parse(Rt.data)}catch(sn){return void console.error("[React DevTools] Failed to parse JSON: "+Rt.data)}st.forEach(function(sn){try{sn(yn)}catch(ar){throw console.log("[React DevTools] Error calling listener",yn),console.log("error:",ar),ar}})},wt.onopen=function(){(rt=new Do({listen:function(rn){return st.push(rn),function(){var Hn=st.indexOf(rn);Hn>=0&&st.splice(Hn,1)}},send:function(rn,Hn,d0){wt.readyState===wt.OPEN?wt.send(JSON.stringify({event:rn,payload:Hn})):(rt!==null&&rt.shutdown(),lt())}})).addListener("inspectElement",function(rn){var Hn=rn.id,d0=rn.rendererID,Cr=Rt.rendererInterfaces[d0];if(Cr!=null){var He=Cr.findNativeNodesForFiberID(Hn);He!=null&&He[0]!=null&&Rt.emit("showNativeHighlight",He[0])}}),rt.addListener("updateComponentFilters",function(rn){au=rn}),window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null&&rt.send("overrideComponentFilters",au);var Rt=new I0(rt);if(Rt.addListener("shutdown",function(){M0.emit("shutdown")}),function(rn,Hn,d0){if(rn==null)return function(){};var Cr=[rn.sub("renderer-attached",function(Ne){var ft=Ne.id,St=(Ne.renderer,Ne.rendererInterface);Hn.setRendererInterface(ft,St),St.flushInitialOperations()}),rn.sub("unsupported-renderer-version",function(Ne){Hn.onUnsupportedRenderer(Ne)}),rn.sub("operations",Hn.onHookOperations),rn.sub("traceUpdates",Hn.onTraceUpdates)],He=function(Ne,ft){var St=rn.rendererInterfaces.get(Ne);St==null&&(typeof ft.findFiberByHostInstance=="function"?St=uf(rn,Ne,ft,d0):ft.ComponentTree&&(St=lf(rn,Ne,ft,d0)),St!=null&&rn.rendererInterfaces.set(Ne,St)),St!=null?rn.emit("renderer-attached",{id:Ne,renderer:ft,rendererInterface:St}):rn.emit("unsupported-renderer-version",Ne)};rn.renderers.forEach(function(Ne,ft){He(ft,Ne)}),Cr.push(rn.sub("renderer",function(Ne){var ft=Ne.id,St=Ne.renderer;He(ft,St)})),rn.emit("react-devtools",Hn),rn.reactDevtoolsAgent=Hn;var Qe=function(){Cr.forEach(function(Ne){return Ne()}),rn.rendererInterfaces.forEach(function(Ne){Ne.cleanup()}),rn.reactDevtoolsAgent=null};Hn.addListener("shutdown",Qe),Cr.push(function(){Hn.removeListener("shutdown",Qe)})}(M0,Rt,window),K!=null||M0.resolveRNStyle!=null)Gu(rt,Rt,K||M0.resolveRNStyle,fe||M0.nativeStyleEditorValidAttributes||null);else{var yn,sn,ar=function(){rt!==null&&Gu(rt,Rt,yn,sn)};M0.hasOwnProperty("resolveRNStyle")||Object.defineProperty(M0,"resolveRNStyle",{enumerable:!1,get:function(){return yn},set:function(rn){yn=rn,ar()}}),M0.hasOwnProperty("nativeStyleEditorValidAttributes")||Object.defineProperty(M0,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function(){return sn},set:function(rn){sn=rn,ar()}})}}}else lt()}function lt(){Xe===null&&(Xe=setTimeout(function(){return Lr(F)},2e3))}}}])})});var rS=Me(nS=>{"use strict";Object.defineProperty(nS,"__esModule",{value:!0});eS();var _j=tS();_j.connectToDevTools()});var lS=Me(x2=>{"use strict";var iS=x2&&x2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(x2,"__esModule",{value:!0});var oS=Ay(),yj=iS(lE()),uS=iS(hc()),no=Xy();process.env.DEV==="true"&&rS();var sS=i=>{i==null||i.unsetMeasureFunc(),i==null||i.freeRecursive()};x2.default=yj.default({schedulePassiveEffects:oS.unstable_scheduleCallback,cancelPassiveEffects:oS.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:i=>{if(i.isStaticDirty){i.isStaticDirty=!1,typeof i.onImmediateRender=="function"&&i.onImmediateRender();return}typeof i.onRender=="function"&&i.onRender()},getChildHostContext:(i,u)=>{let f=i.isInsideText,c=u==="ink-text"||u==="ink-virtual-text";return f===c?i:{isInsideText:c}},shouldSetTextContent:()=>!1,createInstance:(i,u,f,c)=>{if(c.isInsideText&&i==="ink-box")throw new Error(" can\u2019t be nested inside component");let g=i==="ink-text"&&c.isInsideText?"ink-virtual-text":i,t=no.createNode(g);for(let[C,A]of Object.entries(u))C!=="children"&&(C==="style"?no.setStyle(t,A):C==="internal_transform"?t.internal_transform=A:C==="internal_static"?t.internal_static=!0:no.setAttribute(t,C,A));return t},createTextInstance:(i,u,f)=>{if(!f.isInsideText)throw new Error(`Text string "${i}" must be rendered inside component`);return no.createTextNode(i)},resetTextContent:()=>{},hideTextInstance:i=>{no.setTextNodeValue(i,"")},unhideTextInstance:(i,u)=>{no.setTextNodeValue(i,u)},getPublicInstance:i=>i,hideInstance:i=>{var u;(u=i.yogaNode)===null||u===void 0||u.setDisplay(uS.default.DISPLAY_NONE)},unhideInstance:i=>{var u;(u=i.yogaNode)===null||u===void 0||u.setDisplay(uS.default.DISPLAY_FLEX)},appendInitialChild:no.appendChildNode,appendChild:no.appendChildNode,insertBefore:no.insertBeforeNode,finalizeInitialChildren:(i,u,f,c)=>(i.internal_static&&(c.isStaticDirty=!0,c.staticNode=i),!1),supportsMutation:!0,appendChildToContainer:no.appendChildNode,insertInContainerBefore:no.insertBeforeNode,removeChildFromContainer:(i,u)=>{no.removeChildNode(i,u),sS(u.yogaNode)},prepareUpdate:(i,u,f,c,g)=>{i.internal_static&&(g.isStaticDirty=!0);let t={},C=Object.keys(c);for(let A of C)if(c[A]!==f[A]){if(A==="style"&&typeof c.style=="object"&&typeof f.style=="object"){let D=c.style,L=f.style,N=Object.keys(D);for(let j of N){if(j==="borderStyle"||j==="borderColor"){if(typeof t.style!="object"){let $={};t.style=$}t.style.borderStyle=D.borderStyle,t.style.borderColor=D.borderColor}if(D[j]!==L[j]){if(typeof t.style!="object"){let $={};t.style=$}t.style[j]=D[j]}}continue}t[A]=c[A]}return t},commitUpdate:(i,u)=>{for(let[f,c]of Object.entries(u))f!=="children"&&(f==="style"?no.setStyle(i,c):f==="internal_transform"?i.internal_transform=c:f==="internal_static"?i.internal_static=!0:no.setAttribute(i,f,c))},commitTextUpdate:(i,u,f)=>{no.setTextNodeValue(i,f)},removeChild:(i,u)=>{no.removeChildNode(i,u),sS(u.yogaNode)}})});var cS=Me((Jb,fS)=>{"use strict";fS.exports=(i,u=1,f)=>{if(f=dt({indent:" ",includeEmptyLines:!1},f),typeof i!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof i}\``);if(typeof u!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof u}\``);if(typeof f.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof f.indent}\``);if(u===0)return i;let c=f.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return i.replace(c,f.indent.repeat(u))}});var aS=Me(k2=>{"use strict";var wj=k2&&k2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(k2,"__esModule",{value:!0});var Vh=wj(hc());k2.default=i=>i.getComputedWidth()-i.getComputedPadding(Vh.default.EDGE_LEFT)-i.getComputedPadding(Vh.default.EDGE_RIGHT)-i.getComputedBorder(Vh.default.EDGE_LEFT)-i.getComputedBorder(Vh.default.EDGE_RIGHT)});var pS=Me((Zb,dS)=>{dS.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var mS=Me((eG,m3)=>{"use strict";var hS=pS();m3.exports=hS;m3.exports.default=hS});var gS=Me((tG,vS)=>{"use strict";vS.exports=(i,u=process.argv)=>{let f=i.startsWith("-")?"":i.length===1?"-":"--",c=u.indexOf(f+i),g=u.indexOf("--");return c!==-1&&(g===-1||c{"use strict";var Dj=require("os"),yS=require("tty"),Pu=gS(),{env:oi}=process,qf;Pu("no-color")||Pu("no-colors")||Pu("color=false")||Pu("color=never")?qf=0:(Pu("color")||Pu("colors")||Pu("color=true")||Pu("color=always"))&&(qf=1);"FORCE_COLOR"in oi&&(oi.FORCE_COLOR==="true"?qf=1:oi.FORCE_COLOR==="false"?qf=0:qf=oi.FORCE_COLOR.length===0?1:Math.min(parseInt(oi.FORCE_COLOR,10),3));function v3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function g3(i,u){if(qf===0)return 0;if(Pu("color=16m")||Pu("color=full")||Pu("color=truecolor"))return 3;if(Pu("color=256"))return 2;if(i&&!u&&qf===void 0)return 0;let f=qf||0;if(oi.TERM==="dumb")return f;if(process.platform==="win32"){let c=Dj.release().split(".");return Number(c[0])>=10&&Number(c[2])>=10586?Number(c[2])>=14931?3:2:1}if("CI"in oi)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(c=>c in oi)||oi.CI_NAME==="codeship"?1:f;if("TEAMCITY_VERSION"in oi)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(oi.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in oi)return 1;if(oi.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in oi){let c=parseInt((oi.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(oi.TERM_PROGRAM){case"iTerm.app":return c>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(oi.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(oi.TERM)||"COLORTERM"in oi?1:f}function Ej(i){let u=g3(i,i&&i.isTTY);return v3(u)}_S.exports={supportsColor:Ej,stdout:v3(g3(!0,yS.isatty(1))),stderr:v3(g3(!0,yS.isatty(2)))}});var ES=Me((rG,DS)=>{"use strict";var Sj=(i,u,f)=>{let c=i.indexOf(u);if(c===-1)return i;let g=u.length,t=0,C="";do C+=i.substr(t,c-t)+u+f,t=c+g,c=i.indexOf(u,t);while(c!==-1);return C+=i.substr(t),C},Cj=(i,u,f,c)=>{let g=0,t="";do{let C=i[c-1]==="\r";t+=i.substr(g,(C?c-1:c)-g)+u+(C?`\r -`:` -`)+f,g=c+1,c=i.indexOf(` -`,g)}while(c!==-1);return t+=i.substr(g),t};DS.exports={stringReplaceAll:Sj,stringEncaseCRLFWithFirstIndex:Cj}});var kS=Me((iG,SS)=>{"use strict";var Tj=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CS=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,xj=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kj=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Aj=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function TS(i){let u=i[0]==="u",f=i[1]==="{";return u&&!f&&i.length===5||i[0]==="x"&&i.length===3?String.fromCharCode(parseInt(i.slice(1),16)):u&&f?String.fromCodePoint(parseInt(i.slice(2,-1),16)):Aj.get(i)||i}function Oj(i,u){let f=[],c=u.trim().split(/\s*,\s*/g),g;for(let t of c){let C=Number(t);if(!Number.isNaN(C))f.push(C);else if(g=t.match(xj))f.push(g[2].replace(kj,(A,x,D)=>x?TS(x):D));else throw new Error(`Invalid Chalk template style argument: ${t} (in style '${i}')`)}return f}function Ij(i){CS.lastIndex=0;let u=[],f;for(;(f=CS.exec(i))!==null;){let c=f[1];if(f[2]){let g=Oj(c,f[2]);u.push([c].concat(g))}else u.push([c])}return u}function xS(i,u){let f={};for(let g of u)for(let t of g.styles)f[t[0]]=g.inverse?null:t.slice(1);let c=i;for(let[g,t]of Object.entries(f))if(!!Array.isArray(t)){if(!(g in c))throw new Error(`Unknown Chalk style: ${g}`);c=t.length>0?c[g](...t):c[g]}return c}SS.exports=(i,u)=>{let f=[],c=[],g=[];if(u.replace(Tj,(t,C,A,x,D,L)=>{if(C)g.push(TS(C));else if(x){let N=g.join("");g=[],c.push(f.length===0?N:xS(i,f)(N)),f.push({inverse:A,styles:Ij(x)})}else if(D){if(f.length===0)throw new Error("Found extraneous } in Chalk template literal");c.push(xS(i,f)(g.join(""))),g=[],f.pop()}else g.push(L)}),c.push(g.join("")),f.length>0){let t=`Chalk template literal is missing ${f.length} closing bracket${f.length===1?"":"s"} (\`}\`)`;throw new Error(t)}return c.join("")}});var Jh=Me((oG,AS)=>{"use strict";var A2=Rh(),{stdout:_3,stderr:y3}=wS(),{stringReplaceAll:Pj,stringEncaseCRLFWithFirstIndex:Mj}=ES(),{isArray:Yh}=Array,OS=["ansi","ansi","ansi256","ansi16m"],ka=Object.create(null),Fj=(i,u={})=>{if(u.level&&!(Number.isInteger(u.level)&&u.level>=0&&u.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let f=_3?_3.level:0;i.level=u.level===void 0?f:u.level},IS=class{constructor(u){return PS(u)}},PS=i=>{let u={};return Fj(u,i),u.template=(...f)=>MS(u.template,...f),Object.setPrototypeOf(u,$h.prototype),Object.setPrototypeOf(u.template,u),u.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},u.template.Instance=IS,u.template};function $h(i){return PS(i)}for(let[i,u]of Object.entries(A2))ka[i]={get(){let f=Kh(this,w3(u.open,u.close,this._styler),this._isEmpty);return Object.defineProperty(this,i,{value:f}),f}};ka.visible={get(){let i=Kh(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:i}),i}};var LS=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let i of LS)ka[i]={get(){let{level:u}=this;return function(...f){let c=w3(A2.color[OS[u]][i](...f),A2.color.close,this._styler);return Kh(this,c,this._isEmpty)}}};for(let i of LS){let u="bg"+i[0].toUpperCase()+i.slice(1);ka[u]={get(){let{level:f}=this;return function(...c){let g=w3(A2.bgColor[OS[f]][i](...c),A2.bgColor.close,this._styler);return Kh(this,g,this._isEmpty)}}}}var Lj=Object.defineProperties(()=>{},zn(dt({},ka),{level:{enumerable:!0,get(){return this._generator.level},set(i){this._generator.level=i}}})),w3=(i,u,f)=>{let c,g;return f===void 0?(c=i,g=u):(c=f.openAll+i,g=u+f.closeAll),{open:i,close:u,openAll:c,closeAll:g,parent:f}},Kh=(i,u,f)=>{let c=(...g)=>Yh(g[0])&&Yh(g[0].raw)?RS(c,MS(c,...g)):RS(c,g.length===1?""+g[0]:g.join(" "));return Object.setPrototypeOf(c,Lj),c._generator=i,c._styler=u,c._isEmpty=f,c},RS=(i,u)=>{if(i.level<=0||!u)return i._isEmpty?"":u;let f=i._styler;if(f===void 0)return u;let{openAll:c,closeAll:g}=f;if(u.indexOf("")!==-1)for(;f!==void 0;)u=Pj(u,f.close,f.open),f=f.parent;let t=u.indexOf(` -`);return t!==-1&&(u=Mj(u,g,c,t)),c+u+g},D3,MS=(i,...u)=>{let[f]=u;if(!Yh(f)||!Yh(f.raw))return u.join(" ");let c=u.slice(1),g=[f.raw[0]];for(let t=1;t{"use strict";var Rj=O2&&O2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(O2,"__esModule",{value:!0});var I2=Rj(Jh()),Nj=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,Bj=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,Qh=(i,u)=>u==="foreground"?i:"bg"+i[0].toUpperCase()+i.slice(1);O2.default=(i,u,f)=>{if(!u)return i;if(u in I2.default){let g=Qh(u,f);return I2.default[g](i)}if(u.startsWith("#")){let g=Qh("hex",f);return I2.default[g](u)(i)}if(u.startsWith("ansi")){let g=Bj.exec(u);if(!g)return i;let t=Qh(g[1],f),C=Number(g[2]);return I2.default[t](C)(i)}if(u.startsWith("rgb")||u.startsWith("hsl")||u.startsWith("hsv")||u.startsWith("hwb")){let g=Nj.exec(u);if(!g)return i;let t=Qh(g[1],f),C=Number(g[2]),A=Number(g[3]),x=Number(g[4]);return I2.default[t](C,A,x)(i)}return i}});var BS=Me(P2=>{"use strict";var NS=P2&&P2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(P2,"__esModule",{value:!0});var jj=NS(mS()),S3=NS(E3());P2.default=(i,u,f,c)=>{if(typeof f.style.borderStyle=="string"){let g=f.yogaNode.getComputedWidth(),t=f.yogaNode.getComputedHeight(),C=f.style.borderColor,A=jj.default[f.style.borderStyle],x=S3.default(A.topLeft+A.horizontal.repeat(g-2)+A.topRight,C,"foreground"),D=(S3.default(A.vertical,C,"foreground")+` -`).repeat(t-2),L=S3.default(A.bottomLeft+A.horizontal.repeat(g-2)+A.bottomRight,C,"foreground");c.write(i,u,x,{transformers:[]}),c.write(i,u+1,D,{transformers:[]}),c.write(i+g-1,u+1,D,{transformers:[]}),c.write(i,u+t-1,L,{transformers:[]})}}});var US=Me(M2=>{"use strict";var _c=M2&&M2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(M2,"__esModule",{value:!0});var Uj=_c(hc()),qj=_c(jy()),zj=_c(cS()),Wj=_c(Yy()),Hj=_c(aS()),bj=_c(Ky()),Gj=_c(BS()),Vj=(i,u)=>{var f;let c=(f=i.childNodes[0])===null||f===void 0?void 0:f.yogaNode;if(c){let g=c.getComputedLeft(),t=c.getComputedTop();u=` -`.repeat(t)+zj.default(u,g)}return u},jS=(i,u,f)=>{var c;let{offsetX:g=0,offsetY:t=0,transformers:C=[],skipStaticElements:A}=f;if(A&&i.internal_static)return;let{yogaNode:x}=i;if(x){if(x.getDisplay()===Uj.default.DISPLAY_NONE)return;let D=g+x.getComputedLeft(),L=t+x.getComputedTop(),N=C;if(typeof i.internal_transform=="function"&&(N=[i.internal_transform,...C]),i.nodeName==="ink-text"){let j=bj.default(i);if(j.length>0){let $=qj.default(j),h=Hj.default(x);if($>h){let re=(c=i.style.textWrap)!==null&&c!==void 0?c:"wrap";j=Wj.default(j,h,re)}j=Vj(i,j),u.write(D,L,j,{transformers:N})}return}if(i.nodeName==="ink-box"&&Gj.default(D,L,i,u),i.nodeName==="ink-root"||i.nodeName==="ink-box")for(let j of i.childNodes)jS(j,u,{offsetX:D,offsetY:L,transformers:N,skipStaticElements:A})}};M2.default=jS});var zS=Me((fG,qS)=>{"use strict";qS.exports=i=>{i=Object.assign({onlyFirst:!1},i);let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,i.onlyFirst?void 0:"g")}});var HS=Me((cG,C3)=>{"use strict";var Yj=zS(),WS=i=>typeof i=="string"?i.replace(Yj(),""):i;C3.exports=WS;C3.exports.default=WS});var VS=Me((aG,bS)=>{"use strict";var GS="[\uD800-\uDBFF][\uDC00-\uDFFF]";bS.exports=i=>i&&i.exact?new RegExp(`^${GS}$`):new RegExp(GS,"g")});var $S=Me((dG,T3)=>{"use strict";var $j=HS(),Kj=VS(),YS=i=>$j(i).replace(Kj()," ").length;T3.exports=YS;T3.exports.default=YS});var QS=Me(F2=>{"use strict";var KS=F2&&F2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(F2,"__esModule",{value:!0});var XS=KS(Gy()),Xj=KS($S()),JS=class{constructor(u){this.writes=[];let{width:f,height:c}=u;this.width=f,this.height=c}write(u,f,c,g){let{transformers:t}=g;!c||this.writes.push({x:u,y:f,text:c,transformers:t})}get(){let u=[];for(let c=0;cc.trimRight()).join(` -`),height:u.length}}};F2.default=JS});var t5=Me(L2=>{"use strict";var x3=L2&&L2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(L2,"__esModule",{value:!0});var Jj=x3(hc()),ZS=x3(US()),e5=x3(QS());L2.default=(i,u)=>{var f;if(i.yogaNode.setWidth(u),i.yogaNode){i.yogaNode.calculateLayout(void 0,void 0,Jj.default.DIRECTION_LTR);let c=new e5.default({width:i.yogaNode.getComputedWidth(),height:i.yogaNode.getComputedHeight()});ZS.default(i,c,{skipStaticElements:!0});let g;((f=i.staticNode)===null||f===void 0?void 0:f.yogaNode)&&(g=new e5.default({width:i.staticNode.yogaNode.getComputedWidth(),height:i.staticNode.yogaNode.getComputedHeight()}),ZS.default(i.staticNode,g,{skipStaticElements:!1}));let{output:t,height:C}=c.get();return{output:t,outputHeight:C,staticOutput:g?`${g.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var o5=Me((mG,n5)=>{"use strict";var r5=require("stream"),i5=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],k3={},Qj=i=>{let u=new r5.PassThrough,f=new r5.PassThrough;u.write=g=>i("stdout",g),f.write=g=>i("stderr",g);let c=new console.Console(u,f);for(let g of i5)k3[g]=console[g],console[g]=c[g];return()=>{for(let g of i5)console[g]=k3[g];k3={}}};n5.exports=Qj});var O3=Me(A3=>{"use strict";Object.defineProperty(A3,"__esModule",{value:!0});A3.default=new WeakMap});var P3=Me(I3=>{"use strict";Object.defineProperty(I3,"__esModule",{value:!0});var Zj=lr(),u5=Zj.createContext({exit:()=>{}});u5.displayName="InternalAppContext";I3.default=u5});var F3=Me(M3=>{"use strict";Object.defineProperty(M3,"__esModule",{value:!0});var eU=lr(),s5=eU.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});s5.displayName="InternalStdinContext";M3.default=s5});var R3=Me(L3=>{"use strict";Object.defineProperty(L3,"__esModule",{value:!0});var tU=lr(),l5=tU.createContext({stdout:void 0,write:()=>{}});l5.displayName="InternalStdoutContext";L3.default=l5});var B3=Me(N3=>{"use strict";Object.defineProperty(N3,"__esModule",{value:!0});var nU=lr(),f5=nU.createContext({stderr:void 0,write:()=>{}});f5.displayName="InternalStderrContext";N3.default=f5});var Zh=Me(j3=>{"use strict";Object.defineProperty(j3,"__esModule",{value:!0});var rU=lr(),c5=rU.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});c5.displayName="InternalFocusContext";j3.default=c5});var d5=Me((EG,a5)=>{"use strict";var iU=/[|\\{}()[\]^$+*?.-]/g;a5.exports=i=>{if(typeof i!="string")throw new TypeError("Expected a string");return i.replace(iU,"\\$&")}});var v5=Me((SG,p5)=>{"use strict";var oU=d5(),h5=[].concat(require("module").builtinModules,"bootstrap_node","node").map(i=>new RegExp(`(?:\\(${i}\\.js:\\d+:\\d+\\)$|^\\s*at ${i}\\.js:\\d+:\\d+$)`));h5.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var em=class{constructor(u){u=dt({ignoredPackages:[]},u),"internals"in u||(u.internals=em.nodeInternals()),"cwd"in u||(u.cwd=process.cwd()),this._cwd=u.cwd.replace(/\\/g,"/"),this._internals=[].concat(u.internals,uU(u.ignoredPackages)),this._wrapCallSite=u.wrapCallSite||!1}static nodeInternals(){return[...h5]}clean(u,f=0){f=" ".repeat(f),Array.isArray(u)||(u=u.split(` -`)),!/^\s*at /.test(u[0])&&/^\s*at /.test(u[1])&&(u=u.slice(1));let c=!1,g=null,t=[];return u.forEach(C=>{if(C=C.replace(/\\/g,"/"),this._internals.some(x=>x.test(C)))return;let A=/^\s*at /.test(C);c?C=C.trimEnd().replace(/^(\s+)at /,"$1"):(C=C.trim(),A&&(C=C.slice(3))),C=C.replace(`${this._cwd}/`,""),C&&(A?(g&&(t.push(g),g=null),t.push(C)):(c=!0,g=C))}),t.map(C=>`${f}${C} -`).join("")}captureString(u,f=this.captureString){typeof u=="function"&&(f=u,u=Infinity);let{stackTraceLimit:c}=Error;u&&(Error.stackTraceLimit=u);let g={};Error.captureStackTrace(g,f);let{stack:t}=g;return Error.stackTraceLimit=c,this.clean(t)}capture(u,f=this.capture){typeof u=="function"&&(f=u,u=Infinity);let{prepareStackTrace:c,stackTraceLimit:g}=Error;Error.prepareStackTrace=(A,x)=>this._wrapCallSite?x.map(this._wrapCallSite):x,u&&(Error.stackTraceLimit=u);let t={};Error.captureStackTrace(t,f);let{stack:C}=t;return Object.assign(Error,{prepareStackTrace:c,stackTraceLimit:g}),C}at(u=this.at){let[f]=this.capture(1,u);if(!f)return{};let c={line:f.getLineNumber(),column:f.getColumnNumber()};m5(c,f.getFileName(),this._cwd),f.isConstructor()&&(c.constructor=!0),f.isEval()&&(c.evalOrigin=f.getEvalOrigin()),f.isNative()&&(c.native=!0);let g;try{g=f.getTypeName()}catch(A){}g&&g!=="Object"&&g!=="[object Object]"&&(c.type=g);let t=f.getFunctionName();t&&(c.function=t);let C=f.getMethodName();return C&&t!==C&&(c.method=C),c}parseLine(u){let f=u&&u.match(sU);if(!f)return null;let c=f[1]==="new",g=f[2],t=f[3],C=f[4],A=Number(f[5]),x=Number(f[6]),D=f[7],L=f[8],N=f[9],j=f[10]==="native",$=f[11]===")",h,re={};if(L&&(re.line=Number(L)),N&&(re.column=Number(N)),$&&D){let ce=0;for(let Q=D.length-1;Q>0;Q--)if(D.charAt(Q)===")")ce++;else if(D.charAt(Q)==="("&&D.charAt(Q-1)===" "&&(ce--,ce===-1&&D.charAt(Q-1)===" ")){let oe=D.slice(0,Q-1);D=D.slice(Q+1),g+=` (${oe}`;break}}if(g){let ce=g.match(lU);ce&&(g=ce[1],h=ce[2])}return m5(re,D,this._cwd),c&&(re.constructor=!0),t&&(re.evalOrigin=t,re.evalLine=A,re.evalColumn=x,re.evalFile=C&&C.replace(/\\/g,"/")),j&&(re.native=!0),g&&(re.function=g),h&&g!==h&&(re.method=h),re}};function m5(i,u,f){u&&(u=u.replace(/\\/g,"/"),u.startsWith(`${f}/`)&&(u=u.slice(f.length+1)),i.file=u)}function uU(i){if(i.length===0)return[];let u=i.map(f=>oU(f));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${u.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var sU=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),lU=/^(.*?) \[as (.*?)\]$/;p5.exports=em});var _5=Me((CG,g5)=>{"use strict";g5.exports=(i,u)=>i.replace(/^\t+/gm,f=>" ".repeat(f.length*(u||2)))});var w5=Me((TG,y5)=>{"use strict";var fU=_5(),cU=(i,u)=>{let f=[],c=i-u,g=i+u;for(let t=c;t<=g;t++)f.push(t);return f};y5.exports=(i,u,f)=>{if(typeof i!="string")throw new TypeError("Source code is missing.");if(!u||u<1)throw new TypeError("Line number must start from `1`.");if(i=fU(i).split(/\r?\n/),!(u>i.length))return f=dt({around:3},f),cU(u,f.around).filter(c=>i[c-1]!==void 0).map(c=>({line:c,value:i[c-1]}))}});var tm=Me(hs=>{"use strict";var aU=hs&&hs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),dU=hs&&hs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),pU=hs&&hs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&aU(u,i,f);return dU(u,i),u},hU=hs&&hs.__rest||function(i,u){var f={};for(var c in i)Object.prototype.hasOwnProperty.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var g=0,c=Object.getOwnPropertySymbols(i);g{var{children:f}=i,c=hU(i,["children"]);let g=Object.assign(Object.assign({},c),{marginLeft:c.marginLeft||c.marginX||c.margin||0,marginRight:c.marginRight||c.marginX||c.margin||0,marginTop:c.marginTop||c.marginY||c.margin||0,marginBottom:c.marginBottom||c.marginY||c.margin||0,paddingLeft:c.paddingLeft||c.paddingX||c.padding||0,paddingRight:c.paddingRight||c.paddingX||c.padding||0,paddingTop:c.paddingTop||c.paddingY||c.padding||0,paddingBottom:c.paddingBottom||c.paddingY||c.padding||0});return D5.default.createElement("ink-box",{ref:u,style:g},f)});U3.displayName="Box";U3.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};hs.default=U3});var W3=Me(R2=>{"use strict";var q3=R2&&R2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(R2,"__esModule",{value:!0});var mU=q3(lr()),Aa=q3(Jh()),E5=q3(E3()),z3=({color:i,backgroundColor:u,dimColor:f,bold:c,italic:g,underline:t,strikethrough:C,inverse:A,wrap:x,children:D})=>{if(D==null)return null;let L=N=>(f&&(N=Aa.default.dim(N)),i&&(N=E5.default(N,i,"foreground")),u&&(N=E5.default(N,u,"background")),c&&(N=Aa.default.bold(N)),g&&(N=Aa.default.italic(N)),t&&(N=Aa.default.underline(N)),C&&(N=Aa.default.strikethrough(N)),A&&(N=Aa.default.inverse(N)),N);return mU.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:x},internal_transform:L},D)};z3.displayName="Text";z3.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};R2.default=z3});var x5=Me(ms=>{"use strict";var vU=ms&&ms.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),gU=ms&&ms.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),_U=ms&&ms.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&vU(u,i,f);return gU(u,i),u},N2=ms&&ms.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ms,"__esModule",{value:!0});var S5=_U(require("fs")),ui=N2(lr()),C5=N2(v5()),yU=N2(w5()),ef=N2(tm()),il=N2(W3()),T5=new C5.default({cwd:process.cwd(),internals:C5.default.nodeInternals()}),wU=({error:i})=>{let u=i.stack?i.stack.split(` -`).slice(1):void 0,f=u?T5.parseLine(u[0]):void 0,c,g=0;if((f==null?void 0:f.file)&&(f==null?void 0:f.line)&&S5.existsSync(f.file)){let t=S5.readFileSync(f.file,"utf8");if(c=yU.default(t,f.line),c)for(let{line:C}of c)g=Math.max(g,String(C).length)}return ui.default.createElement(ef.default,{flexDirection:"column",padding:1},ui.default.createElement(ef.default,null,ui.default.createElement(il.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),ui.default.createElement(il.default,null," ",i.message)),f&&ui.default.createElement(ef.default,{marginTop:1},ui.default.createElement(il.default,{dimColor:!0},f.file,":",f.line,":",f.column)),f&&c&&ui.default.createElement(ef.default,{marginTop:1,flexDirection:"column"},c.map(({line:t,value:C})=>ui.default.createElement(ef.default,{key:t},ui.default.createElement(ef.default,{width:g+1},ui.default.createElement(il.default,{dimColor:t!==f.line,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0},String(t).padStart(g," "),":")),ui.default.createElement(il.default,{key:t,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0}," "+C)))),i.stack&&ui.default.createElement(ef.default,{marginTop:1,flexDirection:"column"},i.stack.split(` -`).slice(1).map(t=>{let C=T5.parseLine(t);return C?ui.default.createElement(ef.default,{key:t},ui.default.createElement(il.default,{dimColor:!0},"- "),ui.default.createElement(il.default,{dimColor:!0,bold:!0},C.function),ui.default.createElement(il.default,{dimColor:!0,color:"gray"}," ","(",C.file,":",C.line,":",C.column,")")):ui.default.createElement(ef.default,{key:t},ui.default.createElement(il.default,{dimColor:!0},"- "),ui.default.createElement(il.default,{dimColor:!0,bold:!0},t))})))};ms.default=wU});var A5=Me(vs=>{"use strict";var DU=vs&&vs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),EU=vs&&vs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),SU=vs&&vs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&DU(u,i,f);return EU(u,i),u},yc=vs&&vs.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(vs,"__esModule",{value:!0});var wc=SU(lr()),k5=yc(gy()),CU=yc(P3()),TU=yc(F3()),xU=yc(R3()),kU=yc(B3()),AU=yc(Zh()),OU=yc(x5()),IU=" ",PU="",MU="",H3=class extends wc.PureComponent{constructor(){super(...arguments);this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=u=>{let{stdin:f}=this.props;if(!this.isRawModeSupported())throw f===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(f.setEncoding("utf8"),u){this.rawModeEnabledCount===0&&(f.addListener("data",this.handleInput),f.resume(),f.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount==0&&(f.setRawMode(!1),f.removeListener("data",this.handleInput),f.pause())},this.handleInput=u=>{u===""&&this.props.exitOnCtrlC&&this.handleExit(),u===MU&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(u===IU&&this.focusNext(),u===PU&&this.focusPrevious())},this.handleExit=u=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(u)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(u=>{let f=u.focusables[0].id;return{activeFocusId:this.findNextFocusable(u)||f}})},this.focusPrevious=()=>{this.setState(u=>{let f=u.focusables[u.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(u)||f}})},this.addFocusable=(u,{autoFocus:f})=>{this.setState(c=>{let g=c.activeFocusId;return!g&&f&&(g=u),{activeFocusId:g,focusables:[...c.focusables,{id:u,isActive:!0}]}})},this.removeFocusable=u=>{this.setState(f=>({activeFocusId:f.activeFocusId===u?void 0:f.activeFocusId,focusables:f.focusables.filter(c=>c.id!==u)}))},this.activateFocusable=u=>{this.setState(f=>({focusables:f.focusables.map(c=>c.id!==u?c:{id:u,isActive:!0})}))},this.deactivateFocusable=u=>{this.setState(f=>({activeFocusId:f.activeFocusId===u?void 0:f.activeFocusId,focusables:f.focusables.map(c=>c.id!==u?c:{id:u,isActive:!1})}))},this.findNextFocusable=u=>{let f=u.focusables.findIndex(c=>c.id===u.activeFocusId);for(let c=f+1;c{let f=u.focusables.findIndex(c=>c.id===u.activeFocusId);for(let c=f-1;c>=0;c--)if(u.focusables[c].isActive)return u.focusables[c].id}}static getDerivedStateFromError(u){return{error:u}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return wc.default.createElement(CU.default.Provider,{value:{exit:this.handleExit}},wc.default.createElement(TU.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},wc.default.createElement(xU.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},wc.default.createElement(kU.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},wc.default.createElement(AU.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?wc.default.createElement(OU.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){k5.default.hide(this.props.stdout)}componentWillUnmount(){k5.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(u){this.handleExit(u)}};vs.default=H3;H3.displayName="InternalApp"});var M5=Me(gs=>{"use strict";var FU=gs&&gs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),LU=gs&&gs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),RU=gs&&gs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&FU(u,i,f);return LU(u,i),u},_s=gs&&gs.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(gs,"__esModule",{value:!0});var NU=_s(lr()),O5=AD(),BU=_s(WD()),jU=_s(ay()),UU=_s(KD()),qU=_s(JD()),nm=_s(lS()),zU=_s(t5()),WU=_s(vy()),HU=_s(o5()),bU=RU(Xy()),GU=_s(O3()),VU=_s(A5()),Oa=process.env.CI==="false"?!1:UU.default,I5=()=>{},P5=class{constructor(u){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:f,outputHeight:c,staticOutput:g}=zU.default(this.rootNode,this.options.stdout.columns||80),t=g&&g!==` -`;if(this.options.debug){t&&(this.fullStaticOutput+=g),this.options.stdout.write(this.fullStaticOutput+f);return}if(Oa){t&&this.options.stdout.write(g),this.lastOutput=f;return}if(t&&(this.fullStaticOutput+=g),c>=this.options.stdout.rows){this.options.stdout.write(jU.default.clearTerminal+this.fullStaticOutput+f),this.lastOutput=f;return}t&&(this.log.clear(),this.options.stdout.write(g),this.log(f)),!t&&f!==this.lastOutput&&this.throttledLog(f),this.lastOutput=f},qU.default(this),this.options=u,this.rootNode=bU.createNode("ink-root"),this.rootNode.onRender=u.debug?this.onRender:O5.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=BU.default.create(u.stdout),this.throttledLog=u.debug?this.log:O5.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=nm.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WU.default(this.unmount,{alwaysLast:!1}),process.env.DEV==="true"&&nm.default.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),u.patchConsole&&this.patchConsole(),Oa||(u.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{u.stdout.off("resize",this.onRender)})}render(u){let f=NU.default.createElement(VU.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},u);nm.default.updateContainer(f,this.container,null,I5)}writeToStdout(u){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(u+this.fullStaticOutput+this.lastOutput);return}if(Oa){this.options.stdout.write(u);return}this.log.clear(),this.options.stdout.write(u),this.log(this.lastOutput)}}writeToStderr(u){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(u),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Oa){this.options.stderr.write(u);return}this.log.clear(),this.options.stderr.write(u),this.log(this.lastOutput)}}unmount(u){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),Oa?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,nm.default.updateContainer(null,this.container,null,I5),GU.default.delete(this.options.stdout),u instanceof Error?this.rejectExitPromise(u):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((u,f)=>{this.resolveExitPromise=u,this.rejectExitPromise=f})),this.exitPromise}clear(){!Oa&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=HU.default((u,f)=>{u==="stdout"&&this.writeToStdout(f),u==="stderr"&&(f.startsWith("The above error occurred")||this.writeToStderr(f))}))}};gs.default=P5});var L5=Me(B2=>{"use strict";var F5=B2&&B2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(B2,"__esModule",{value:!0});var YU=F5(M5()),rm=F5(O3()),$U=require("stream"),JU=(i,u)=>{let f=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},KU(u)),c=XU(f.stdout,()=>new YU.default(f));return c.render(i),{rerender:c.render,unmount:()=>c.unmount(),waitUntilExit:c.waitUntilExit,cleanup:()=>rm.default.delete(f.stdout),clear:c.clear}};B2.default=JU;var KU=(i={})=>i instanceof $U.Stream?{stdout:i,stdin:process.stdin}:i,XU=(i,u)=>{let f;return rm.default.has(i)?f=rm.default.get(i):(f=u(),rm.default.set(i,f)),f}});var N5=Me(tf=>{"use strict";var QU=tf&&tf.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),ZU=tf&&tf.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),eq=tf&&tf.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&QU(u,i,f);return ZU(u,i),u};Object.defineProperty(tf,"__esModule",{value:!0});var j2=eq(lr()),R5=i=>{let{items:u,children:f,style:c}=i,[g,t]=j2.useState(0),C=j2.useMemo(()=>u.slice(g),[u,g]);j2.useLayoutEffect(()=>{t(u.length)},[u.length]);let A=C.map((D,L)=>f(D,g+L)),x=j2.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},c),[c]);return j2.default.createElement("ink-box",{internal_static:!0,style:x},A)};R5.displayName="Static";tf.default=R5});var j5=Me(U2=>{"use strict";var tq=U2&&U2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(U2,"__esModule",{value:!0});var nq=tq(lr()),B5=({children:i,transform:u})=>i==null?null:nq.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:u},i);B5.displayName="Transform";U2.default=B5});var q5=Me(q2=>{"use strict";var rq=q2&&q2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(q2,"__esModule",{value:!0});var iq=rq(lr()),U5=({count:i=1})=>iq.default.createElement("ink-text",null,` -`.repeat(i));U5.displayName="Newline";q2.default=U5});var H5=Me(z2=>{"use strict";var z5=z2&&z2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(z2,"__esModule",{value:!0});var oq=z5(lr()),uq=z5(tm()),W5=()=>oq.default.createElement(uq.default,{flexGrow:1});W5.displayName="Spacer";z2.default=W5});var im=Me(W2=>{"use strict";var sq=W2&&W2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(W2,"__esModule",{value:!0});var lq=lr(),fq=sq(F3()),cq=()=>lq.useContext(fq.default);W2.default=cq});var G5=Me(H2=>{"use strict";var aq=H2&&H2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(H2,"__esModule",{value:!0});var b5=lr(),dq=aq(im()),pq=(i,u={})=>{let{stdin:f,setRawMode:c,internal_exitOnCtrlC:g}=dq.default();b5.useEffect(()=>{if(u.isActive!==!1)return c(!0),()=>{c(!1)}},[u.isActive,c]),b5.useEffect(()=>{if(u.isActive===!1)return;let t=C=>{let A=String(C),x={upArrow:A==="",downArrow:A==="",leftArrow:A==="",rightArrow:A==="",pageDown:A==="[6~",pageUp:A==="[5~",return:A==="\r",escape:A==="",ctrl:!1,shift:!1,tab:A===" "||A==="",backspace:A==="\b",delete:A==="\x7F"||A==="[3~",meta:!1};A<=""&&!x.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),x.ctrl=!0),A.startsWith("")&&(A=A.slice(1),x.meta=!0);let D=A>="A"&&A<="Z",L=A>="\u0410"&&A<="\u042F";A.length===1&&(D||L)&&(x.shift=!0),x.tab&&A==="[Z"&&(x.shift=!0),(x.tab||x.backspace||x.delete)&&(A=""),(!(A==="c"&&x.ctrl)||!g)&&i(A,x)};return f==null||f.on("data",t),()=>{f==null||f.off("data",t)}},[u.isActive,f,g,i])};H2.default=pq});var V5=Me(b2=>{"use strict";var hq=b2&&b2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(b2,"__esModule",{value:!0});var mq=lr(),vq=hq(P3()),gq=()=>mq.useContext(vq.default);b2.default=gq});var Y5=Me(G2=>{"use strict";var _q=G2&&G2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(G2,"__esModule",{value:!0});var yq=lr(),wq=_q(R3()),Dq=()=>yq.useContext(wq.default);G2.default=Dq});var $5=Me(V2=>{"use strict";var Eq=V2&&V2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(V2,"__esModule",{value:!0});var Sq=lr(),Cq=Eq(B3()),Tq=()=>Sq.useContext(Cq.default);V2.default=Tq});var X5=Me(Y2=>{"use strict";var K5=Y2&&Y2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Y2,"__esModule",{value:!0});var $2=lr(),xq=K5(Zh()),kq=K5(im()),Aq=({isActive:i=!0,autoFocus:u=!1}={})=>{let{isRawModeSupported:f,setRawMode:c}=kq.default(),{activeId:g,add:t,remove:C,activate:A,deactivate:x}=$2.useContext(xq.default),D=$2.useMemo(()=>Math.random().toString().slice(2,7),[]);return $2.useEffect(()=>(t(D,{autoFocus:u}),()=>{C(D)}),[D,u]),$2.useEffect(()=>{i?A(D):x(D)},[i,D]),$2.useEffect(()=>{if(!(!f||!i))return c(!0),()=>{c(!1)}},[i]),{isFocused:Boolean(D)&&g===D}};Y2.default=Aq});var J5=Me(K2=>{"use strict";var Oq=K2&&K2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(K2,"__esModule",{value:!0});var Iq=lr(),Pq=Oq(Zh()),Mq=()=>{let i=Iq.useContext(Pq.default);return{enableFocus:i.enableFocus,disableFocus:i.disableFocus,focusNext:i.focusNext,focusPrevious:i.focusPrevious}};K2.default=Mq});var Q5=Me(b3=>{"use strict";Object.defineProperty(b3,"__esModule",{value:!0});b3.default=i=>{var u,f,c,g;return{width:(f=(u=i.yogaNode)===null||u===void 0?void 0:u.getComputedWidth())!==null&&f!==void 0?f:0,height:(g=(c=i.yogaNode)===null||c===void 0?void 0:c.getComputedHeight())!==null&&g!==void 0?g:0}}});var ys=Me(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});var Fq=L5();Object.defineProperty(ji,"render",{enumerable:!0,get:function(){return Fq.default}});var Lq=tm();Object.defineProperty(ji,"Box",{enumerable:!0,get:function(){return Lq.default}});var Rq=W3();Object.defineProperty(ji,"Text",{enumerable:!0,get:function(){return Rq.default}});var Nq=N5();Object.defineProperty(ji,"Static",{enumerable:!0,get:function(){return Nq.default}});var Bq=j5();Object.defineProperty(ji,"Transform",{enumerable:!0,get:function(){return Bq.default}});var jq=q5();Object.defineProperty(ji,"Newline",{enumerable:!0,get:function(){return jq.default}});var Uq=H5();Object.defineProperty(ji,"Spacer",{enumerable:!0,get:function(){return Uq.default}});var qq=G5();Object.defineProperty(ji,"useInput",{enumerable:!0,get:function(){return qq.default}});var zq=V5();Object.defineProperty(ji,"useApp",{enumerable:!0,get:function(){return zq.default}});var Wq=im();Object.defineProperty(ji,"useStdin",{enumerable:!0,get:function(){return Wq.default}});var Hq=Y5();Object.defineProperty(ji,"useStdout",{enumerable:!0,get:function(){return Hq.default}});var bq=$5();Object.defineProperty(ji,"useStderr",{enumerable:!0,get:function(){return bq.default}});var Gq=X5();Object.defineProperty(ji,"useFocus",{enumerable:!0,get:function(){return Gq.default}});var Vq=J5();Object.defineProperty(ji,"useFocusManager",{enumerable:!0,get:function(){return Vq.default}});var Yq=Q5();Object.defineProperty(ji,"measureElement",{enumerable:!0,get:function(){return Yq.default}})});var lC=Me(X2=>{"use strict";Object.defineProperty(X2,"__esModule",{value:!0});X2.UncontrolledTextInput=void 0;var oC=lr(),Y3=lr(),uC=ys(),Sc=Jh(),sC=({value:i,placeholder:u="",focus:f=!0,mask:c,highlightPastedText:g=!1,showCursor:t=!0,onChange:C,onSubmit:A})=>{let[{cursorOffset:x,cursorWidth:D},L]=Y3.useState({cursorOffset:(i||"").length,cursorWidth:0});Y3.useEffect(()=>{L(re=>{if(!f||!t)return re;let ce=i||"";return re.cursorOffset>ce.length-1?{cursorOffset:ce.length,cursorWidth:0}:re})},[i,f,t]);let N=g?D:0,j=c?c.repeat(i.length):i,$=j,h=u?Sc.grey(u):void 0;if(t&&f){h=u.length>0?Sc.inverse(u[0])+Sc.grey(u.slice(1)):Sc.inverse(" "),$=j.length>0?"":Sc.inverse(" ");let re=0;for(let ce of j)re>=x-N&&re<=x?$+=Sc.inverse(ce):$+=ce,re++;j.length>0&&x===j.length&&($+=Sc.inverse(" "))}return uC.useInput((re,ce)=>{if(ce.upArrow||ce.downArrow||ce.ctrl&&re==="c"||ce.tab||ce.shift&&ce.tab)return;if(ce.return){A&&A(i);return}let Q=x,oe=i,Se=0;ce.leftArrow?t&&Q--:ce.rightArrow?t&&Q++:ce.backspace||ce.delete?x>0&&(oe=i.slice(0,x-1)+i.slice(x,i.length),Q--):(oe=i.slice(0,x)+re+i.slice(x,i.length),Q+=re.length,re.length>1&&(Se=re.length)),x<0&&(Q=0),x>i.length&&(Q=i.length),L({cursorOffset:Q,cursorWidth:Se}),oe!==i&&C(oe)},{isActive:f}),oC.createElement(uC.Text,null,u?j.length>0?$:h:$)};X2.default=sC;X2.UncontrolledTextInput=i=>{let[u,f]=Y3.useState("");return oC.createElement(sC,Object.assign({},i,{value:u,onChange:f}))}});var cC=Me(pm=>{"use strict";Object.defineProperty(pm,"__esModule",{value:!0});function J2(i){let u=[...i.caches],f=u.shift();return f===void 0?fC():{get(c,g,t={miss:()=>Promise.resolve()}){return f.get(c,g,t).catch(()=>J2({caches:u}).get(c,g,t))},set(c,g){return f.set(c,g).catch(()=>J2({caches:u}).set(c,g))},delete(c){return f.delete(c).catch(()=>J2({caches:u}).delete(c))},clear(){return f.clear().catch(()=>J2({caches:u}).clear())}}}function fC(){return{get(i,u,f={miss:()=>Promise.resolve()}){return u().then(g=>Promise.all([g,f.miss(g)])).then(([g])=>g)},set(i,u){return Promise.resolve(u)},delete(i){return Promise.resolve()},clear(){return Promise.resolve()}}}pm.createFallbackableCache=J2;pm.createNullCache=fC});var dC=Me((fV,aC)=>{aC.exports=cC()});var pC=Me($3=>{"use strict";Object.defineProperty($3,"__esModule",{value:!0});function $q(i={serializable:!0}){let u={};return{get(f,c,g={miss:()=>Promise.resolve()}){let t=JSON.stringify(f);if(t in u)return Promise.resolve(i.serializable?JSON.parse(u[t]):u[t]);let C=c(),A=g&&g.miss||(()=>Promise.resolve());return C.then(x=>A(x)).then(()=>C)},set(f,c){return u[JSON.stringify(f)]=i.serializable?JSON.stringify(c):c,Promise.resolve(c)},delete(f){return delete u[JSON.stringify(f)],Promise.resolve()},clear(){return u={},Promise.resolve()}}}$3.createInMemoryCache=$q});var mC=Me((aV,hC)=>{hC.exports=pC()});var gC=Me(ws=>{"use strict";Object.defineProperty(ws,"__esModule",{value:!0});function Kq(i,u,f){let c={"x-algolia-api-key":f,"x-algolia-application-id":u};return{headers(){return i===K3.WithinHeaders?c:{}},queryParameters(){return i===K3.WithinQueryParameters?c:{}}}}function Xq(i){let u=0,f=()=>(u++,new Promise(c=>{setTimeout(()=>{c(i(f))},Math.min(100*u,1e3))}));return i(f)}function vC(i,u=(f,c)=>Promise.resolve()){return Object.assign(i,{wait(f){return vC(i.then(c=>Promise.all([u(c,f),c])).then(c=>c[1]))}})}function Jq(i){let u=i.length-1;for(u;u>0;u--){let f=Math.floor(Math.random()*(u+1)),c=i[u];i[u]=i[f],i[f]=c}return i}function Qq(i,u){return Object.keys(u!==void 0?u:{}).forEach(f=>{i[f]=u[f](i)}),i}function Zq(i,...u){let f=0;return i.replace(/%s/g,()=>encodeURIComponent(u[f++]))}var ez="4.2.0",tz=i=>()=>i.transporter.requester.destroy(),K3={WithinQueryParameters:0,WithinHeaders:1};ws.AuthMode=K3;ws.addMethods=Qq;ws.createAuth=Kq;ws.createRetryablePromise=Xq;ws.createWaitablePromise=vC;ws.destroy=tz;ws.encode=Zq;ws.shuffle=Jq;ws.version=ez});var Q2=Me((pV,_C)=>{_C.exports=gC()});var yC=Me(X3=>{"use strict";Object.defineProperty(X3,"__esModule",{value:!0});var nz={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};X3.MethodEnum=nz});var Z2=Me((mV,wC)=>{wC.exports=yC()});var RC=Me(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});var DC=Z2();function J3(i,u){let f=i||{},c=f.data||{};return Object.keys(f).forEach(g=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(g)===-1&&(c[g]=f[g])}),{data:Object.entries(c).length>0?c:void 0,timeout:f.timeout||u,headers:f.headers||{},queryParameters:f.queryParameters||{},cacheable:f.cacheable}}var hm={Read:1,Write:2,Any:3},Ia={Up:1,Down:2,Timeouted:3},EC=2*60*1e3;function Q3(i,u=Ia.Up){return zn(dt({},i),{status:u,lastUpdate:Date.now()})}function SC(i){return i.status===Ia.Up||Date.now()-i.lastUpdate>EC}function CC(i){return i.status===Ia.Timeouted&&Date.now()-i.lastUpdate<=EC}function Z3(i){return{protocol:i.protocol||"https",url:i.url,accept:i.accept||hm.Any}}function rz(i,u){return Promise.all(u.map(f=>i.get(f,()=>Promise.resolve(Q3(f))))).then(f=>{let c=f.filter(A=>SC(A)),g=f.filter(A=>CC(A)),t=[...c,...g],C=t.length>0?t.map(A=>Z3(A)):u;return{getTimeout(A,x){return(g.length===0&&A===0?1:g.length+3+A)*x},statelessHosts:C}})}var iz=({isTimedOut:i,status:u})=>!i&&~~u==0,oz=i=>{let u=i.status;return i.isTimedOut||iz(i)||~~(u/100)!=2&&~~(u/100)!=4},uz=({status:i})=>~~(i/100)==2,sz=(i,u)=>oz(i)?u.onRetry(i):uz(i)?u.onSucess(i):u.onFail(i);function PC(i,u,f,c){let g=[],t=AC(f,c),C=OC(i,c),A=f.method,x=f.method!==DC.MethodEnum.Get?{}:dt(dt({},f.data),c.data),D=dt(dt(dt({"x-algolia-agent":i.userAgent.value},i.queryParameters),x),c.queryParameters),L=0,N=(j,$)=>{let h=j.pop();if(h===void 0)throw IC(ew(g));let re={data:t,headers:C,method:A,url:kC(h,f.path,D),connectTimeout:$(L,i.timeouts.connect),responseTimeout:$(L,c.timeout)},ce=oe=>{let Se={request:re,response:oe,host:h,triesLeft:j.length};return g.push(Se),Se},Q={onSucess:oe=>TC(oe),onRetry(oe){let Se=ce(oe);return oe.isTimedOut&&L++,Promise.all([i.logger.info("Retryable failure",tw(Se)),i.hostsCache.set(h,Q3(h,oe.isTimedOut?Ia.Timeouted:Ia.Down))]).then(()=>N(j,$))},onFail(oe){throw ce(oe),xC(oe,ew(g))}};return i.requester.send(re).then(oe=>sz(oe,Q))};return rz(i.hostsCache,u).then(j=>N([...j.statelessHosts].reverse(),j.getTimeout))}function lz(i){let{hostsCache:u,logger:f,requester:c,requestsCache:g,responsesCache:t,timeouts:C,userAgent:A,hosts:x,queryParameters:D,headers:L}=i,N={hostsCache:u,logger:f,requester:c,requestsCache:g,responsesCache:t,timeouts:C,userAgent:A,headers:L,queryParameters:D,hosts:x.map(j=>Z3(j)),read(j,$){let h=J3($,N.timeouts.read),re=()=>PC(N,N.hosts.filter(oe=>(oe.accept&hm.Read)!=0),j,h);if((h.cacheable!==void 0?h.cacheable:j.cacheable)!==!0)return re();let Q={request:j,mappedRequestOptions:h,transporter:{queryParameters:N.queryParameters,headers:N.headers}};return N.responsesCache.get(Q,()=>N.requestsCache.get(Q,()=>N.requestsCache.set(Q,re()).then(oe=>Promise.all([N.requestsCache.delete(Q),oe]),oe=>Promise.all([N.requestsCache.delete(Q),Promise.reject(oe)])).then(([oe,Se])=>Se)),{miss:oe=>N.responsesCache.set(Q,oe)})},write(j,$){return PC(N,N.hosts.filter(h=>(h.accept&hm.Write)!=0),j,J3($,N.timeouts.write))}};return N}function fz(i){let u={value:`Algolia for JavaScript (${i})`,add(f){let c=`; ${f.segment}${f.version!==void 0?` (${f.version})`:""}`;return u.value.indexOf(c)===-1&&(u.value=`${u.value}${c}`),u}};return u}function TC(i){try{return JSON.parse(i.content)}catch(u){throw MC(u.message,i)}}function xC({content:i,status:u},f){let c=i;try{c=JSON.parse(i).message}catch(g){}return FC(c,u,f)}function cz(i,...u){let f=0;return i.replace(/%s/g,()=>encodeURIComponent(u[f++]))}function kC(i,u,f){let c=LC(f),g=`${i.protocol}://${i.url}/${u.charAt(0)==="/"?u.substr(1):u}`;return c.length&&(g+=`?${c}`),g}function LC(i){let u=f=>Object.prototype.toString.call(f)==="[object Object]"||Object.prototype.toString.call(f)==="[object Array]";return Object.keys(i).map(f=>cz("%s=%s",f,u(i[f])?JSON.stringify(i[f]):i[f])).join("&")}function AC(i,u){if(i.method===DC.MethodEnum.Get||i.data===void 0&&u.data===void 0)return;let f=Array.isArray(i.data)?i.data:dt(dt({},i.data),u.data);return JSON.stringify(f)}function OC(i,u){let f=dt(dt({},i.headers),u.headers),c={};return Object.keys(f).forEach(g=>{let t=f[g];c[g.toLowerCase()]=t}),c}function ew(i){return i.map(u=>tw(u))}function tw(i){let u=i.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return zn(dt({},i),{request:zn(dt({},i.request),{headers:dt(dt({},i.request.headers),u)})})}function FC(i,u,f){return{name:"ApiError",message:i,status:u,transporterStackTrace:f}}function MC(i,u){return{name:"DeserializationError",message:i,response:u}}function IC(i){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:i}}y0.CallEnum=hm;y0.HostStatusEnum=Ia;y0.createApiError=FC;y0.createDeserializationError=MC;y0.createMappedRequestOptions=J3;y0.createRetryError=IC;y0.createStatefulHost=Q3;y0.createStatelessHost=Z3;y0.createTransporter=lz;y0.createUserAgent=fz;y0.deserializeFailure=xC;y0.deserializeSuccess=TC;y0.isStatefulHostTimeouted=CC;y0.isStatefulHostUp=SC;y0.serializeData=AC;y0.serializeHeaders=OC;y0.serializeQueryParameters=LC;y0.serializeUrl=kC;y0.stackFrameWithoutCredentials=tw;y0.stackTraceWithoutCredentials=ew});var ed=Me((gV,NC)=>{NC.exports=RC()});var BC=Me(Hf=>{"use strict";Object.defineProperty(Hf,"__esModule",{value:!0});var Pa=Q2(),az=ed(),td=Z2(),dz=i=>{let u=i.region||"us",f=Pa.createAuth(Pa.AuthMode.WithinHeaders,i.appId,i.apiKey),c=az.createTransporter(zn(dt({hosts:[{url:`analytics.${u}.algolia.com`}]},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/json"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)})),g=i.appId;return Pa.addMethods({appId:g,transporter:c},i.methods)},pz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Post,path:"2/abtests",data:u},f),hz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Delete,path:Pa.encode("2/abtests/%s",u)},f),mz=i=>(u,f)=>i.transporter.read({method:td.MethodEnum.Get,path:Pa.encode("2/abtests/%s",u)},f),vz=i=>u=>i.transporter.read({method:td.MethodEnum.Get,path:"2/abtests"},u),gz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Post,path:Pa.encode("2/abtests/%s/stop",u)},f);Hf.addABTest=pz;Hf.createAnalyticsClient=dz;Hf.deleteABTest=hz;Hf.getABTest=mz;Hf.getABTests=vz;Hf.stopABTest=gz});var UC=Me((yV,jC)=>{jC.exports=BC()});var zC=Me(nd=>{"use strict";Object.defineProperty(nd,"__esModule",{value:!0});var nw=Q2(),_z=ed(),qC=Z2(),yz=i=>{let u=i.region||"us",f=nw.createAuth(nw.AuthMode.WithinHeaders,i.appId,i.apiKey),c=_z.createTransporter(zn(dt({hosts:[{url:`recommendation.${u}.algolia.com`}]},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/json"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)}));return nw.addMethods({appId:i.appId,transporter:c},i.methods)},wz=i=>u=>i.transporter.read({method:qC.MethodEnum.Get,path:"1/strategies/personalization"},u),Dz=i=>(u,f)=>i.transporter.write({method:qC.MethodEnum.Post,path:"1/strategies/personalization",data:u},f);nd.createRecommendationClient=yz;nd.getPersonalizationStrategy=wz;nd.setPersonalizationStrategy=Dz});var HC=Me((DV,WC)=>{WC.exports=zC()});var nT=Me(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});var Wt=Q2(),jo=ed(),Rn=Z2(),Ez=require("crypto");function mm(i){let u=f=>i.request(f).then(c=>{if(i.batch!==void 0&&i.batch(c.hits),!i.shouldStop(c))return c.cursor?u({cursor:c.cursor}):u({page:(f.page||0)+1})});return u({})}var Sz=i=>{let u=i.appId,f=Wt.createAuth(i.authMode!==void 0?i.authMode:Wt.AuthMode.WithinHeaders,u,i.apiKey),c=jo.createTransporter(zn(dt({hosts:[{url:`${u}-dsn.algolia.net`,accept:jo.CallEnum.Read},{url:`${u}.algolia.net`,accept:jo.CallEnum.Write}].concat(Wt.shuffle([{url:`${u}-1.algolianet.com`},{url:`${u}-2.algolianet.com`},{url:`${u}-3.algolianet.com`}]))},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/x-www-form-urlencoded"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)})),g={transporter:c,appId:u,addAlgoliaAgent(t,C){c.userAgent.add({segment:t,version:C})},clearCache(){return Promise.all([c.requestsCache.clear(),c.responsesCache.clear()]).then(()=>{})}};return Wt.addMethods(g,i.methods)};function bC(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function GC(){return{name:"ObjectNotFoundError",message:"Object not found."}}function VC(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Cz=i=>(u,f)=>{let A=f||{},{queryParameters:c}=A,g=Si(A,["queryParameters"]),t=dt({acl:u},c!==void 0?{queryParameters:c}:{}),C=(x,D)=>Wt.createRetryablePromise(L=>rd(i)(x.key,D).catch(N=>{if(N.status!==404)throw N;return L()}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:"1/keys",data:t},g),C)},Tz=i=>(u,f,c)=>{let g=jo.createMappedRequestOptions(c);return g.queryParameters["X-Algolia-User-ID"]=u,i.transporter.write({method:Rn.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:f}},g)},xz=i=>(u,f,c)=>i.transporter.write({method:Rn.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:u,cluster:f}},c),vm=i=>(u,f,c)=>{let g=(t,C)=>id(i)(u,{methods:{waitTask:z0}}).waitTask(t.taskID,C);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",u),data:{operation:"copy",destination:f}},c),g)},kz=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Rules]})),Az=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Settings]})),Oz=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Synonyms]})),Iz=i=>(u,f)=>{let c=(g,t)=>Wt.createRetryablePromise(C=>rd(i)(u,t).then(C).catch(A=>{if(A.status!==404)throw A}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/keys/%s",u)},f),c)},Pz=()=>(i,u)=>{let f=jo.serializeQueryParameters(u),c=Ez.createHmac("sha256",i).update(f).digest("hex");return Buffer.from(c+f).toString("base64")},rd=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/keys/%s",u)},f),Mz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/logs"},u),Fz=()=>i=>{let u=Buffer.from(i,"base64").toString("ascii"),f=/validUntil=(\d+)/,c=u.match(f);if(c===null)throw VC();return parseInt(c[1],10)-Math.round(new Date().getTime()/1e3)},Lz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping/top"},u),Rz=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/clusters/mapping/%s",u)},f),Nz=i=>u=>{let g=u||{},{retrieveMappings:f}=g,c=Si(g,["retrieveMappings"]);return f===!0&&(c.getClusters=!0),i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping/pending"},c)},id=i=>(u,f={})=>{let c={transporter:i.transporter,appId:i.appId,indexName:u};return Wt.addMethods(c,f.methods)},Bz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/keys"},u),jz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters"},u),Uz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/indexes"},u),qz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping"},u),zz=i=>(u,f,c)=>{let g=(t,C)=>id(i)(u,{methods:{waitTask:z0}}).waitTask(t.taskID,C);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",u),data:{operation:"move",destination:f}},c),g)},Wz=i=>(u,f)=>{let c=(g,t)=>Promise.all(Object.keys(g.taskID).map(C=>id(i)(C,{methods:{waitTask:z0}}).waitTask(g.taskID[C],t)));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:u}},f),c)},Hz=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:u}},f),bz=i=>(u,f)=>{let c=u.map(g=>zn(dt({},g),{params:jo.serializeQueryParameters(g.params||{})}));return i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:c},cacheable:!0},f)},Gz=i=>(u,f)=>Promise.all(u.map(c=>{let A=c.params,{facetName:g,facetQuery:t}=A,C=Si(A,["facetName","facetQuery"]);return id(i)(c.indexName,{methods:{searchForFacetValues:YC}}).searchForFacetValues(g,t,dt(dt({},f),C))})),Vz=i=>(u,f)=>{let c=jo.createMappedRequestOptions(f);return c.queryParameters["X-Algolia-User-ID"]=u,i.transporter.write({method:Rn.MethodEnum.Delete,path:"1/clusters/mapping"},c)},Yz=i=>(u,f)=>{let c=(g,t)=>Wt.createRetryablePromise(C=>rd(i)(u,t).catch(A=>{if(A.status!==404)throw A;return C()}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/keys/%s/restore",u)},f),c)},$z=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:u}},f),Kz=i=>(u,f)=>{let c=Object.assign({},f),L=f||{},{queryParameters:g}=L,t=Si(L,["queryParameters"]),C=g?{queryParameters:g}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],x=N=>Object.keys(c).filter(j=>A.indexOf(j)!==-1).every(j=>N[j]===c[j]),D=(N,j)=>Wt.createRetryablePromise($=>rd(i)(u,j).then(h=>x(h)?Promise.resolve():$()));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Put,path:Wt.encode("1/keys/%s",u),data:C},t),D)},$C=i=>(u,f)=>{let c=(g,t)=>z0(i)(g.taskID,t);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/batch",i.indexName),data:{requests:u}},f),c)},Xz=i=>u=>mm(zn(dt({},u),{shouldStop:f=>f.cursor===void 0,request:f=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/browse",i.indexName),data:f},u)})),Jz=i=>u=>{let f=dt({hitsPerPage:1e3},u);return mm(zn(dt({},f),{shouldStop:c=>c.hits.lengthzn(dt({},g),{hits:g.hits.map(t=>(delete t._highlightResult,t))}))}}))},Qz=i=>u=>{let f=dt({hitsPerPage:1e3},u);return mm(zn(dt({},f),{shouldStop:c=>c.hits.lengthzn(dt({},g),{hits:g.hits.map(t=>(delete t._highlightResult,t))}))}}))},_m=i=>(u,f,c)=>{let x=c||{},{batchSize:g}=x,t=Si(x,["batchSize"]),C={taskIDs:[],objectIDs:[]},A=(D=0)=>{let L=[],N;for(N=D;N({action:f,body:j})),t).then(j=>(C.objectIDs=C.objectIDs.concat(j.objectIDs),C.taskIDs.push(j.taskID),N++,A(N)))};return Wt.createWaitablePromise(A(),(D,L)=>Promise.all(D.taskIDs.map(N=>z0(i)(N,L))))},Zz=i=>u=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/clear",i.indexName)},u),(f,c)=>z0(i)(f.taskID,c)),eW=i=>u=>{let t=u||{},{forwardToReplicas:f}=t,c=Si(t,["forwardToReplicas"]),g=jo.createMappedRequestOptions(c);return f&&(g.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/clear",i.indexName)},g),(C,A)=>z0(i)(C.taskID,A))},tW=i=>u=>{let t=u||{},{forwardToReplicas:f}=t,c=Si(t,["forwardToReplicas"]),g=jo.createMappedRequestOptions(c);return f&&(g.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/clear",i.indexName)},g),(C,A)=>z0(i)(C.taskID,A))},nW=i=>(u,f)=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/deleteByQuery",i.indexName),data:u},f),(c,g)=>z0(i)(c.taskID,g)),rW=i=>u=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s",i.indexName)},u),(f,c)=>z0(i)(f.taskID,c)),iW=i=>(u,f)=>Wt.createWaitablePromise(JC(i)([u],f).then(c=>({taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),JC=i=>(u,f)=>{let c=u.map(g=>({objectID:g}));return _m(i)(c,Cc.DeleteObject,f)},oW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/rules/%s",i.indexName,u)},t),(A,x)=>z0(i)(A.taskID,x))},uW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/synonyms/%s",i.indexName,u)},t),(A,x)=>z0(i)(A.taskID,x))},sW=i=>u=>QC(i)(u).then(()=>!0).catch(f=>{if(f.status!==404)throw f;return!1}),lW=i=>(u,f)=>{let x=f||{},{query:c,paginate:g}=x,t=Si(x,["query","paginate"]),C=0,A=()=>ZC(i)(c||"",zn(dt({},t),{page:C})).then(D=>{for(let[L,N]of Object.entries(D.hits))if(u(N))return{object:N,position:parseInt(L,10),page:C};if(C++,g===!1||C>=D.nbPages)throw GC();return A()});return A()},fW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/%s",i.indexName,u)},f),cW=()=>(i,u)=>{for(let[f,c]of Object.entries(i.hits))if(c.objectID===u)return parseInt(f,10);return-1},aW=i=>(u,f)=>{let C=f||{},{attributesToRetrieve:c}=C,g=Si(C,["attributesToRetrieve"]),t=u.map(A=>dt({indexName:i.indexName,objectID:A},c?{attributesToRetrieve:c}:{}));return i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},g)},dW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/rules/%s",i.indexName,u)},f),QC=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/settings",i.indexName),data:{getVersion:2}},u),pW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/synonyms/%s",i.indexName,u)},f),eT=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/task/%s",i.indexName,u.toString())},f),hW=i=>(u,f)=>Wt.createWaitablePromise(tT(i)([u],f).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),tT=i=>(u,f)=>{let C=f||{},{createIfNotExists:c}=C,g=Si(C,["createIfNotExists"]),t=c?Cc.PartialUpdateObject:Cc.PartialUpdateObjectNoCreate;return _m(i)(u,t,g)},mW=i=>(u,f)=>{let h=f||{},{safe:c,autoGenerateObjectIDIfNotExist:g,batchSize:t}=h,C=Si(h,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),A=(re,ce,Q,oe)=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",re),data:{operation:Q,destination:ce}},oe),(Se,me)=>z0(i)(Se.taskID,me)),x=Math.random().toString(36).substring(7),D=`${i.indexName}_tmp_${x}`,L=rw({appId:i.appId,transporter:i.transporter,indexName:D}),N=[],j=A(i.indexName,D,"copy",zn(dt({},C),{scope:["settings","synonyms","rules"]}));N.push(j);let $=(c?j.wait(C):j).then(()=>{let re=L(u,zn(dt({},C),{autoGenerateObjectIDIfNotExist:g,batchSize:t}));return N.push(re),c?re.wait(C):re}).then(()=>{let re=A(D,i.indexName,"move",C);return N.push(re),c?re.wait(C):re}).then(()=>Promise.all(N)).then(([re,ce,Q])=>({objectIDs:ce.objectIDs,taskIDs:[re.taskID,...ce.taskIDs,Q.taskID]}));return Wt.createWaitablePromise($,(re,ce)=>Promise.all(N.map(Q=>Q.wait(ce))))},vW=i=>(u,f)=>iw(i)(u,zn(dt({},f),{clearExistingRules:!0})),gW=i=>(u,f)=>ow(i)(u,zn(dt({},f),{replaceExistingSynonyms:!0})),_W=i=>(u,f)=>Wt.createWaitablePromise(rw(i)([u],f).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),rw=i=>(u,f)=>{let C=f||{},{autoGenerateObjectIDIfNotExist:c}=C,g=Si(C,["autoGenerateObjectIDIfNotExist"]),t=c?Cc.AddObject:Cc.UpdateObject;if(t===Cc.UpdateObject){for(let A of u)if(A.objectID===void 0)return Wt.createWaitablePromise(Promise.reject(bC()))}return _m(i)(u,t,g)},yW=i=>(u,f)=>iw(i)([u],f),iw=i=>(u,f)=>{let A=f||{},{forwardToReplicas:c,clearExistingRules:g}=A,t=Si(A,["forwardToReplicas","clearExistingRules"]),C=jo.createMappedRequestOptions(t);return c&&(C.queryParameters.forwardToReplicas=1),g&&(C.queryParameters.clearExistingRules=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/batch",i.indexName),data:u},C),(x,D)=>z0(i)(x.taskID,D))},wW=i=>(u,f)=>ow(i)([u],f),ow=i=>(u,f)=>{let A=f||{},{forwardToReplicas:c,replaceExistingSynonyms:g}=A,t=Si(A,["forwardToReplicas","replaceExistingSynonyms"]),C=jo.createMappedRequestOptions(t);return c&&(C.queryParameters.forwardToReplicas=1),g&&(C.queryParameters.replaceExistingSynonyms=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/batch",i.indexName),data:u},C),(x,D)=>z0(i)(x.taskID,D))},ZC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/query",i.indexName),data:{query:u},cacheable:!0},f),YC=i=>(u,f,c)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/facets/%s/query",i.indexName,u),data:{facetQuery:f},cacheable:!0},c),KC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/search",i.indexName),data:{query:u}},f),XC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/search",i.indexName),data:{query:u}},f),DW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Put,path:Wt.encode("1/indexes/%s/settings",i.indexName),data:u},t),(A,x)=>z0(i)(A.taskID,x))},z0=i=>(u,f)=>Wt.createRetryablePromise(c=>eT(i)(u,f).then(g=>g.status!=="published"?c():void 0)),EW={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},Cc={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},gm={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},SW={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},CW={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};yt.ApiKeyACLEnum=EW;yt.BatchActionEnum=Cc;yt.ScopeEnum=gm;yt.StrategyEnum=SW;yt.SynonymEnum=CW;yt.addApiKey=Cz;yt.assignUserID=Tz;yt.assignUserIDs=xz;yt.batch=$C;yt.browseObjects=Xz;yt.browseRules=Jz;yt.browseSynonyms=Qz;yt.chunkedBatch=_m;yt.clearObjects=Zz;yt.clearRules=eW;yt.clearSynonyms=tW;yt.copyIndex=vm;yt.copyRules=kz;yt.copySettings=Az;yt.copySynonyms=Oz;yt.createBrowsablePromise=mm;yt.createMissingObjectIDError=bC;yt.createObjectNotFoundError=GC;yt.createSearchClient=Sz;yt.createValidUntilNotFoundError=VC;yt.deleteApiKey=Iz;yt.deleteBy=nW;yt.deleteIndex=rW;yt.deleteObject=iW;yt.deleteObjects=JC;yt.deleteRule=oW;yt.deleteSynonym=uW;yt.exists=sW;yt.findObject=lW;yt.generateSecuredApiKey=Pz;yt.getApiKey=rd;yt.getLogs=Mz;yt.getObject=fW;yt.getObjectPosition=cW;yt.getObjects=aW;yt.getRule=dW;yt.getSecuredApiKeyRemainingValidity=Fz;yt.getSettings=QC;yt.getSynonym=pW;yt.getTask=eT;yt.getTopUserIDs=Lz;yt.getUserID=Rz;yt.hasPendingMappings=Nz;yt.initIndex=id;yt.listApiKeys=Bz;yt.listClusters=jz;yt.listIndices=Uz;yt.listUserIDs=qz;yt.moveIndex=zz;yt.multipleBatch=Wz;yt.multipleGetObjects=Hz;yt.multipleQueries=bz;yt.multipleSearchForFacetValues=Gz;yt.partialUpdateObject=hW;yt.partialUpdateObjects=tT;yt.removeUserID=Vz;yt.replaceAllObjects=mW;yt.replaceAllRules=vW;yt.replaceAllSynonyms=gW;yt.restoreApiKey=Yz;yt.saveObject=_W;yt.saveObjects=rw;yt.saveRule=yW;yt.saveRules=iw;yt.saveSynonym=wW;yt.saveSynonyms=ow;yt.search=ZC;yt.searchForFacetValues=YC;yt.searchRules=KC;yt.searchSynonyms=XC;yt.searchUserIDs=$z;yt.setSettings=DW;yt.updateApiKey=Kz;yt.waitTask=z0});var iT=Me((SV,rT)=>{rT.exports=nT()});var oT=Me(ym=>{"use strict";Object.defineProperty(ym,"__esModule",{value:!0});function TW(){return{debug(i,u){return Promise.resolve()},info(i,u){return Promise.resolve()},error(i,u){return Promise.resolve()}}}var xW={Debug:1,Info:2,Error:3};ym.LogLevelEnum=xW;ym.createNullLogger=TW});var sT=Me((TV,uT)=>{uT.exports=oT()});var cT=Me(uw=>{"use strict";Object.defineProperty(uw,"__esModule",{value:!0});var lT=require("http"),fT=require("https"),kW=require("url");function AW(){let i={keepAlive:!0},u=new lT.Agent(i),f=new fT.Agent(i);return{send(c){return new Promise(g=>{let t=kW.parse(c.url),C=t.query===null?t.pathname:`${t.pathname}?${t.query}`,A=dt({agent:t.protocol==="https:"?f:u,hostname:t.hostname,path:C,method:c.method,headers:c.headers},t.port!==void 0?{port:t.port||""}:{}),x=(t.protocol==="https:"?fT:lT).request(A,j=>{let $="";j.on("data",h=>$+=h),j.on("end",()=>{clearTimeout(L),clearTimeout(N),g({status:j.statusCode||0,content:$,isTimedOut:!1})})}),D=(j,$)=>setTimeout(()=>{x.abort(),g({status:0,content:$,isTimedOut:!0})},j*1e3),L=D(c.connectTimeout,"Connection timeout"),N;x.on("error",j=>{clearTimeout(L),clearTimeout(N),g({status:0,content:j.message,isTimedOut:!1})}),x.once("response",()=>{clearTimeout(L),N=D(c.responseTimeout,"Socket timeout")}),c.data!==void 0&&x.write(c.data),x.end()})},destroy(){return u.destroy(),f.destroy(),Promise.resolve()}}}uw.createNodeHttpRequester=AW});var dT=Me((kV,aT)=>{aT.exports=cT()});var vT=Me((AV,pT)=>{"use strict";var hT=dC(),OW=mC(),Ma=UC(),sw=Q2(),lw=HC(),Mt=iT(),IW=sT(),PW=dT(),MW=ed();function mT(i,u,f){let c={appId:i,apiKey:u,timeouts:{connect:2,read:5,write:30},requester:PW.createNodeHttpRequester(),logger:IW.createNullLogger(),responsesCache:hT.createNullCache(),requestsCache:hT.createNullCache(),hostsCache:OW.createInMemoryCache(),userAgent:MW.createUserAgent(sw.version).add({segment:"Node.js",version:process.versions.node})};return Mt.createSearchClient(zn(dt(dt({},c),f),{methods:{search:Mt.multipleQueries,searchForFacetValues:Mt.multipleSearchForFacetValues,multipleBatch:Mt.multipleBatch,multipleGetObjects:Mt.multipleGetObjects,multipleQueries:Mt.multipleQueries,copyIndex:Mt.copyIndex,copySettings:Mt.copySettings,copyRules:Mt.copyRules,copySynonyms:Mt.copySynonyms,moveIndex:Mt.moveIndex,listIndices:Mt.listIndices,getLogs:Mt.getLogs,listClusters:Mt.listClusters,multipleSearchForFacetValues:Mt.multipleSearchForFacetValues,getApiKey:Mt.getApiKey,addApiKey:Mt.addApiKey,listApiKeys:Mt.listApiKeys,updateApiKey:Mt.updateApiKey,deleteApiKey:Mt.deleteApiKey,restoreApiKey:Mt.restoreApiKey,assignUserID:Mt.assignUserID,assignUserIDs:Mt.assignUserIDs,getUserID:Mt.getUserID,searchUserIDs:Mt.searchUserIDs,listUserIDs:Mt.listUserIDs,getTopUserIDs:Mt.getTopUserIDs,removeUserID:Mt.removeUserID,hasPendingMappings:Mt.hasPendingMappings,generateSecuredApiKey:Mt.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Mt.getSecuredApiKeyRemainingValidity,destroy:sw.destroy,initIndex:g=>t=>Mt.initIndex(g)(t,{methods:{batch:Mt.batch,delete:Mt.deleteIndex,getObject:Mt.getObject,getObjects:Mt.getObjects,saveObject:Mt.saveObject,saveObjects:Mt.saveObjects,search:Mt.search,searchForFacetValues:Mt.searchForFacetValues,waitTask:Mt.waitTask,setSettings:Mt.setSettings,getSettings:Mt.getSettings,partialUpdateObject:Mt.partialUpdateObject,partialUpdateObjects:Mt.partialUpdateObjects,deleteObject:Mt.deleteObject,deleteObjects:Mt.deleteObjects,deleteBy:Mt.deleteBy,clearObjects:Mt.clearObjects,browseObjects:Mt.browseObjects,getObjectPosition:Mt.getObjectPosition,findObject:Mt.findObject,exists:Mt.exists,saveSynonym:Mt.saveSynonym,saveSynonyms:Mt.saveSynonyms,getSynonym:Mt.getSynonym,searchSynonyms:Mt.searchSynonyms,browseSynonyms:Mt.browseSynonyms,deleteSynonym:Mt.deleteSynonym,clearSynonyms:Mt.clearSynonyms,replaceAllObjects:Mt.replaceAllObjects,replaceAllSynonyms:Mt.replaceAllSynonyms,searchRules:Mt.searchRules,getRule:Mt.getRule,deleteRule:Mt.deleteRule,saveRule:Mt.saveRule,saveRules:Mt.saveRules,replaceAllRules:Mt.replaceAllRules,browseRules:Mt.browseRules,clearRules:Mt.clearRules}}),initAnalytics:()=>g=>Ma.createAnalyticsClient(zn(dt(dt({},c),g),{methods:{addABTest:Ma.addABTest,getABTest:Ma.getABTest,getABTests:Ma.getABTests,stopABTest:Ma.stopABTest,deleteABTest:Ma.deleteABTest}})),initRecommendation:()=>g=>lw.createRecommendationClient(zn(dt(dt({},c),g),{methods:{getPersonalizationStrategy:lw.getPersonalizationStrategy,setPersonalizationStrategy:lw.setPersonalizationStrategy}}))}}))}mT.version=sw.version;pT.exports=mT});var _T=Me((OV,fw)=>{var gT=vT();fw.exports=gT;fw.exports.default=gT});var rf=Me(dw=>{"use strict";Object.defineProperty(dw,"__esModule",{value:!0});dw.default=kT;function kT(){}kT.prototype={diff:function(u,f){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},g=c.callback;typeof c=="function"&&(g=c,c={}),this.options=c;var t=this;function C(re){return g?(setTimeout(function(){g(void 0,re)},0),!0):re}u=this.castInput(u),f=this.castInput(f),u=this.removeEmpty(this.tokenize(u)),f=this.removeEmpty(this.tokenize(f));var A=f.length,x=u.length,D=1,L=A+x,N=[{newPos:-1,components:[]}],j=this.extractCommon(N[0],f,u,0);if(N[0].newPos+1>=A&&j+1>=x)return C([{value:this.join(f),count:f.length}]);function $(){for(var re=-1*D;re<=D;re+=2){var ce=void 0,Q=N[re-1],oe=N[re+1],Se=(oe?oe.newPos:0)-re;Q&&(N[re-1]=void 0);var me=Q&&Q.newPos+1=A&&Se+1>=x)return C(LW(t,ce.components,f,u,t.useLongestToken));N[re]=ce}D++}if(g)(function re(){setTimeout(function(){if(D>L)return g();$()||re()},0)})();else for(;D<=L;){var h=$();if(h)return h}},pushComponent:function(u,f,c){var g=u[u.length-1];g&&g.added===f&&g.removed===c?u[u.length-1]={count:g.count+1,added:f,removed:c}:u.push({count:1,added:f,removed:c})},extractCommon:function(u,f,c,g){for(var t=f.length,C=c.length,A=u.newPos,x=A-g,D=0;A+1$.length?re:$}),D.value=i.join(L)}else D.value=i.join(f.slice(A,A+D.count));A+=D.count,D.added||(x+=D.count)}}var j=u[C-1];return C>1&&typeof j.value=="string"&&(j.added||j.removed)&&i.equals("",j.value)&&(u[C-2].value+=j.value,u.pop()),u}function RW(i){return{newPos:i.newPos,components:i.components.slice(0)}}});var OT=Me(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});ld.diffChars=NW;ld.characterDiff=void 0;var jW=BW(rf());function BW(i){return i&&i.__esModule?i:{default:i}}var AT=new jW.default;ld.characterDiff=AT;function NW(i,u,f){return AT.diff(i,u,f)}});var hw=Me(pw=>{"use strict";Object.defineProperty(pw,"__esModule",{value:!0});pw.generateOptions=UW;function UW(i,u){if(typeof i=="function")u.callback=i;else if(i)for(var f in i)i.hasOwnProperty(f)&&(u[f]=i[f]);return u}});var MT=Me(Fa=>{"use strict";Object.defineProperty(Fa,"__esModule",{value:!0});Fa.diffWords=qW;Fa.diffWordsWithSpace=zW;Fa.wordDiff=void 0;var HW=WW(rf()),bW=hw();function WW(i){return i&&i.__esModule?i:{default:i}}var IT=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,PT=/\S/,fd=new HW.default;Fa.wordDiff=fd;fd.equals=function(i,u){return this.options.ignoreCase&&(i=i.toLowerCase(),u=u.toLowerCase()),i===u||this.options.ignoreWhitespace&&!PT.test(i)&&!PT.test(u)};fd.tokenize=function(i){for(var u=i.split(/(\s+|[()[\]{}'"]|\b)/),f=0;f{"use strict";Object.defineProperty(La,"__esModule",{value:!0});La.diffLines=GW;La.diffTrimmedLines=VW;La.lineDiff=void 0;var $W=YW(rf()),KW=hw();function YW(i){return i&&i.__esModule?i:{default:i}}var Dm=new $W.default;La.lineDiff=Dm;Dm.tokenize=function(i){var u=[],f=i.split(/(\n|\r\n)/);f[f.length-1]||f.pop();for(var c=0;c{"use strict";Object.defineProperty(cd,"__esModule",{value:!0});cd.diffSentences=XW;cd.sentenceDiff=void 0;var QW=JW(rf());function JW(i){return i&&i.__esModule?i:{default:i}}var mw=new QW.default;cd.sentenceDiff=mw;mw.tokenize=function(i){return i.split(/(\S.+?[.!?])(?=\s+|$)/)};function XW(i,u,f){return mw.diff(i,u,f)}});var LT=Me(ad=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});ad.diffCss=ZW;ad.cssDiff=void 0;var tH=eH(rf());function eH(i){return i&&i.__esModule?i:{default:i}}var vw=new tH.default;ad.cssDiff=vw;vw.tokenize=function(i){return i.split(/([{}:;,]|\s+)/)};function ZW(i,u,f){return vw.diff(i,u,f)}});var NT=Me(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.diffJson=nH;Ra.canonicalize=Sm;Ra.jsonDiff=void 0;var RT=rH(rf()),iH=Em();function rH(i){return i&&i.__esModule?i:{default:i}}function Cm(i){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Cm=function(f){return typeof f}:Cm=function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},Cm(i)}var oH=Object.prototype.toString,xc=new RT.default;Ra.jsonDiff=xc;xc.useLongestToken=!0;xc.tokenize=iH.lineDiff.tokenize;xc.castInput=function(i){var u=this.options,f=u.undefinedReplacement,c=u.stringifyReplacer,g=c===void 0?function(t,C){return typeof C=="undefined"?f:C}:c;return typeof i=="string"?i:JSON.stringify(Sm(i,null,null,g),g," ")};xc.equals=function(i,u){return RT.default.prototype.equals.call(xc,i.replace(/,([\r\n])/g,"$1"),u.replace(/,([\r\n])/g,"$1"))};function nH(i,u,f){return xc.diff(i,u,f)}function Sm(i,u,f,c,g){u=u||[],f=f||[],c&&(i=c(g,i));var t;for(t=0;t{"use strict";Object.defineProperty(dd,"__esModule",{value:!0});dd.diffArrays=uH;dd.arrayDiff=void 0;var lH=sH(rf());function sH(i){return i&&i.__esModule?i:{default:i}}var pd=new lH.default;dd.arrayDiff=pd;pd.tokenize=function(i){return i.slice()};pd.join=pd.removeEmpty=function(i){return i};function uH(i,u,f){return pd.diff(i,u,f)}});var Tm=Me(gw=>{"use strict";Object.defineProperty(gw,"__esModule",{value:!0});gw.parsePatch=fH;function fH(i){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},f=i.split(/\r\n|[\n\v\f\r\x85]/),c=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],g=[],t=0;function C(){var D={};for(g.push(D);t{"use strict";Object.defineProperty(_w,"__esModule",{value:!0});_w.default=cH;function cH(i,u,f){var c=!0,g=!1,t=!1,C=1;return function A(){if(c&&!t){if(g?C++:c=!1,i+C<=f)return C;t=!0}if(!g)return t||(c=!0),u<=i-C?-C++:(g=!0,A())}}});var zT=Me(xm=>{"use strict";Object.defineProperty(xm,"__esModule",{value:!0});xm.applyPatch=UT;xm.applyPatches=aH;var qT=Tm(),pH=dH(jT());function dH(i){return i&&i.__esModule?i:{default:i}}function UT(i,u){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof u=="string"&&(u=(0,qT.parsePatch)(u)),Array.isArray(u)){if(u.length>1)throw new Error("applyPatch only works with a single input.");u=u[0]}var c=i.split(/\r\n|[\n\v\f\r\x85]/),g=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],t=u.hunks,C=f.compareLine||function(Ot,Nt,Je,V){return Nt===V},A=0,x=f.fuzzFactor||0,D=0,L=0,N,j;function $(Ot,Nt){for(var Je=0;Je0?V[0]:" ",ge=V.length>0?V.substr(1):V;if(ne===" "||ne==="-"){if(!C(Nt+1,c[Nt],ne,ge)&&(A++,A>x))return!1;Nt++}}return!0}for(var h=0;h0?Le[0]:" ",ct=Le.length>0?Le.substr(1):Le,Ue=J.linedelimiters[Oe];if(ot===" ")Te++;else if(ot==="-")c.splice(Te,1),g.splice(Te,1);else if(ot==="+")c.splice(Te,0,ct),g.splice(Te,0,Ue),Te++;else if(ot==="\\"){var be=J.lines[Oe-1]?J.lines[Oe-1][0]:null;be==="+"?N=!0:be==="-"&&(j=!0)}}}if(N)for(;!c[c.length-1];)c.pop(),g.pop();else j&&(c.push(""),g.push(` -`));for(var At=0;At{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});hd.structuredPatch=WT;hd.createTwoFilesPatch=HT;hd.createPatch=hH;var mH=Em();function yw(i){return _H(i)||gH(i)||vH()}function vH(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function gH(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function _H(i){if(Array.isArray(i)){for(var u=0,f=new Array(i.length);u0?x(J.lines.slice(-C.context)):[],L-=j.length,N-=j.length)}(De=j).push.apply(De,yw(me.map(function(At){return(Se.added?"+":"-")+At}))),Se.added?h+=me.length:$+=me.length}else{if(L)if(me.length<=C.context*2&&oe=A.length-2&&me.length<=C.context){var ct=/\n$/.test(f),Ue=/\n$/.test(c),be=me.length==0&&j.length>ot.oldLines;!ct&&be&&j.splice(ot.oldLines,0,"\\ No newline at end of file"),(!ct&&!be||!Ue)&&j.push("\\ No newline at end of file")}D.push(ot),L=0,N=0,j=[]}$+=me.length,h+=me.length}},ce=0;ce{"use strict";Object.defineProperty(km,"__esModule",{value:!0});km.arrayEqual=yH;km.arrayStartsWith=bT;function yH(i,u){return i.length!==u.length?!1:bT(i,u)}function bT(i,u){if(u.length>i.length)return!1;for(var f=0;f{"use strict";Object.defineProperty(Am,"__esModule",{value:!0});Am.calcLineCount=VT;Am.merge=wH;var DH=ww(),EH=Tm(),Dw=GT();function Na(i){return TH(i)||CH(i)||SH()}function SH(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function CH(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function TH(i){if(Array.isArray(i)){for(var u=0,f=new Array(i.length);u{"use strict";Object.defineProperty(Cw,"__esModule",{value:!0});Cw.convertChangesToDMP=OH;function OH(i){for(var u=[],f,c,g=0;g{"use strict";Object.defineProperty(Tw,"__esModule",{value:!0});Tw.convertChangesToXML=IH;function IH(i){for(var u=[],f=0;f"):c.removed&&u.push(""),u.push(PH(c.value)),c.added?u.push(""):c.removed&&u.push("")}return u.join("")}function PH(i){var u=i;return u=u.replace(/&/g,"&"),u=u.replace(//g,">"),u=u.replace(/"/g,"""),u}});var f9=Me(w0=>{"use strict";Object.defineProperty(w0,"__esModule",{value:!0});Object.defineProperty(w0,"Diff",{enumerable:!0,get:function(){return MH.default}});Object.defineProperty(w0,"diffChars",{enumerable:!0,get:function(){return FH.diffChars}});Object.defineProperty(w0,"diffWords",{enumerable:!0,get:function(){return o9.diffWords}});Object.defineProperty(w0,"diffWordsWithSpace",{enumerable:!0,get:function(){return o9.diffWordsWithSpace}});Object.defineProperty(w0,"diffLines",{enumerable:!0,get:function(){return u9.diffLines}});Object.defineProperty(w0,"diffTrimmedLines",{enumerable:!0,get:function(){return u9.diffTrimmedLines}});Object.defineProperty(w0,"diffSentences",{enumerable:!0,get:function(){return LH.diffSentences}});Object.defineProperty(w0,"diffCss",{enumerable:!0,get:function(){return RH.diffCss}});Object.defineProperty(w0,"diffJson",{enumerable:!0,get:function(){return s9.diffJson}});Object.defineProperty(w0,"canonicalize",{enumerable:!0,get:function(){return s9.canonicalize}});Object.defineProperty(w0,"diffArrays",{enumerable:!0,get:function(){return NH.diffArrays}});Object.defineProperty(w0,"applyPatch",{enumerable:!0,get:function(){return l9.applyPatch}});Object.defineProperty(w0,"applyPatches",{enumerable:!0,get:function(){return l9.applyPatches}});Object.defineProperty(w0,"parsePatch",{enumerable:!0,get:function(){return BH.parsePatch}});Object.defineProperty(w0,"merge",{enumerable:!0,get:function(){return jH.merge}});Object.defineProperty(w0,"structuredPatch",{enumerable:!0,get:function(){return xw.structuredPatch}});Object.defineProperty(w0,"createTwoFilesPatch",{enumerable:!0,get:function(){return xw.createTwoFilesPatch}});Object.defineProperty(w0,"createPatch",{enumerable:!0,get:function(){return xw.createPatch}});Object.defineProperty(w0,"convertChangesToDMP",{enumerable:!0,get:function(){return UH.convertChangesToDMP}});Object.defineProperty(w0,"convertChangesToXML",{enumerable:!0,get:function(){return qH.convertChangesToXML}});var MH=zH(rf()),FH=OT(),o9=MT(),u9=Em(),LH=FT(),RH=LT(),s9=NT(),NH=BT(),l9=zT(),BH=Tm(),jH=n9(),xw=ww(),UH=r9(),qH=i9();function zH(i){return i&&i.__esModule?i:{default:i}}});var HH={};jR(HH,{default:()=>GH});var wT=Er(require("@yarnpkg/cli")),Tc=Er(require("@yarnpkg/core"));var Z5=Er(ys()),Dc=Er(lr()),om=(0,Dc.memo)(({active:i})=>{let u=(0,Dc.useMemo)(()=>i?"\u25C9":"\u25EF",[i]),f=(0,Dc.useMemo)(()=>i?"green":"yellow",[i]);return Dc.default.createElement(Z5.Text,{color:f},u)});var Wf=Er(ys()),Bo=Er(lr());var eC=Er(ys()),um=Er(lr());function zf({active:i},u,f){let{stdin:c}=(0,eC.useStdin)(),g=(0,um.useCallback)((t,C)=>u(t,C),f);(0,um.useEffect)(()=>{if(!(!i||!c))return c.on("keypress",g),()=>{c.off("keypress",g)}},[i,g,c])}var sm;(function(f){f.BEFORE="before",f.AFTER="after"})(sm||(sm={}));var tC=function({active:i},u,f){zf({active:i},(c,g)=>{g.name==="tab"&&(g.shift?u(sm.BEFORE):u(sm.AFTER))},f)};var lm=function(i,u,{active:f,minus:c,plus:g,set:t,loop:C=!0}){zf({active:f},(A,x)=>{let D=u.indexOf(i);switch(x.name){case c:{let L=D-1;if(C){t(u[(u.length+L)%u.length]);return}if(L<0)return;t(u[L])}break;case g:{let L=D+1;if(C){t(u[L%u.length]);return}if(L>=u.length)return;t(u[L])}break}},[u,i,g,t,C])};var fm=({active:i=!0,children:u=[],radius:f=10,size:c=1,loop:g=!0,onFocusRequest:t,willReachEnd:C})=>{let A=ce=>{if(ce.key===null)throw new Error("Expected all children to have a key");return ce.key},x=Bo.default.Children.map(u,ce=>A(ce)),D=x[0],[L,N]=(0,Bo.useState)(D),j=x.indexOf(L);(0,Bo.useEffect)(()=>{x.includes(L)||N(D)},[u]),(0,Bo.useEffect)(()=>{C&&j>=x.length-2&&C()},[j]),tC({active:i&&!!t},ce=>{t==null||t(ce)},[t]),lm(L,x,{active:i,minus:"up",plus:"down",set:N,loop:g});let $=j-f,h=j+f;h>x.length&&($-=h-x.length,h=x.length),$<0&&(h+=-$,$=0),h>=x.length&&(h=x.length-1);let re=[];for(let ce=$;ce<=h;++ce){let Q=x[ce],oe=i&&Q===L;re.push(Bo.default.createElement(Wf.Box,{key:Q,height:c},Bo.default.createElement(Wf.Box,{marginLeft:1,marginRight:1},Bo.default.createElement(Wf.Text,null,oe?Bo.default.createElement(Wf.Text,{color:"cyan",bold:!0},">"):" ")),Bo.default.createElement(Wf.Box,null,Bo.default.cloneElement(u[ce],{active:oe}))))}return Bo.default.createElement(Wf.Box,{flexDirection:"column",width:"100%"},re)};var cm=Er(lr());var nC=Er(ys()),nf=Er(lr()),rC=Er(require("readline")),G3=nf.default.createContext(null),iC=({children:i})=>{let{stdin:u,setRawMode:f}=(0,nC.useStdin)();(0,nf.useEffect)(()=>{f&&f(!0),u&&(0,rC.emitKeypressEvents)(u)},[u,f]);let[c,g]=(0,nf.useState)(new Map),t=(0,nf.useMemo)(()=>({getAll:()=>c,get:C=>c.get(C),set:(C,A)=>g(new Map([...c,[C,A]]))}),[c,g]);return nf.default.createElement(G3.Provider,{value:t,children:i})};function Ec(i,u){let f=(0,cm.useContext)(G3);if(f===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof i=="undefined")return f.getAll();let c=(0,cm.useCallback)(t=>{f.set(i,t)},[i,f.set]),g=f.get(i);return typeof g=="undefined"&&(g=u),[g,c]}var am=Er(ys()),V3=Er(lr());async function dm(i,u){let f,c=t=>{let{exit:C}=(0,am.useApp)();zf({active:!0},(A,x)=>{x.name==="return"&&(f=t,C())},[C,t])},{waitUntilExit:g}=(0,am.render)(V3.default.createElement(iC,null,V3.default.createElement(i,zn(dt({},u),{useSubmit:c}))));return await g(),f}var DT=Er(require("clipanion")),ET=Er(lC()),un=Er(ys()),Pt=Er(lr());var yT=Er(_T()),cw={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},FW=(0,yT.default)(cw.appId,cw.apiKey).initIndex(cw.indexName),aw=async(i,u=0)=>await FW.search(i,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:u,hitsPerPage:10});var od=["regular","dev","peer"],ud=class extends wT.BaseCommand{async execute(){let u=await Tc.Configuration.find(this.context.cwd,this.context.plugins),f=()=>Pt.default.createElement(un.Box,{flexDirection:"row"},Pt.default.createElement(un.Box,{flexDirection:"column",width:48},Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},""),"/",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to move between packages.")),Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to select a package.")),Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," again to change the target."))),Pt.default.createElement(un.Box,{flexDirection:"column"},Pt.default.createElement(un.Box,{marginLeft:1},Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),Pt.default.createElement(un.Box,{marginLeft:1},Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),c=()=>Pt.default.createElement(Pt.default.Fragment,null,Pt.default.createElement(un.Box,{width:15},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Owner")),Pt.default.createElement(un.Box,{width:11},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Version")),Pt.default.createElement(un.Box,{width:10},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Downloads"))),g=()=>Pt.default.createElement(un.Box,{width:17},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Target")),t=({hit:$,active:h})=>{let[re,ce]=Ec($.name,null);zf({active:h},(Se,me)=>{if(me.name!=="space")return;if(!re){ce(od[0]);return}let De=od.indexOf(re)+1;De===od.length?ce(null):ce(od[De])},[re,ce]);let Q=Tc.structUtils.parseIdent($.name),oe=Tc.structUtils.prettyIdent(u,Q);return Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Box,{width:45},Pt.default.createElement(un.Text,{bold:!0,wrap:"wrap"},oe)),Pt.default.createElement(un.Box,{width:14,marginLeft:1},Pt.default.createElement(un.Text,{bold:!0,wrap:"truncate"},$.owner.name)),Pt.default.createElement(un.Box,{width:10,marginLeft:1},Pt.default.createElement(un.Text,{italic:!0,wrap:"truncate"},$.version)),Pt.default.createElement(un.Box,{width:16,marginLeft:1},Pt.default.createElement(un.Text,null,$.humanDownloadsLast30Days)))},C=({name:$,active:h})=>{let[re]=Ec($,null),ce=Tc.structUtils.parseIdent($);return Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Box,{width:47},Pt.default.createElement(un.Text,{bold:!0}," - ",Tc.structUtils.prettyIdent(u,ce))),od.map(Q=>Pt.default.createElement(un.Box,{key:Q,width:14,marginLeft:1},Pt.default.createElement(un.Text,null," ",Pt.default.createElement(om,{active:re===Q})," ",Pt.default.createElement(un.Text,{bold:!0},Q)))))},A=()=>Pt.default.createElement(un.Box,{marginTop:1},Pt.default.createElement(un.Text,null,"Powered by Algolia.")),D=await dm(({useSubmit:$})=>{let h=Ec();$(h);let re=Array.from(h.keys()).filter(Le=>h.get(Le)!==null),[ce,Q]=(0,Pt.useState)(""),[oe,Se]=(0,Pt.useState)(0),[me,De]=(0,Pt.useState)([]),J=Le=>{Le.match(/\t| /)||Q(Le)},Te=async()=>{Se(0);let Le=await aw(ce);Le.query===ce&&De(Le.hits)},Oe=async()=>{let Le=await aw(ce,oe+1);Le.query===ce&&Le.page-1===oe&&(Se(Le.page),De([...me,...Le.hits]))};return(0,Pt.useEffect)(()=>{ce?Te():De([])},[ce]),Pt.default.createElement(un.Box,{flexDirection:"column"},Pt.default.createElement(f,null),Pt.default.createElement(un.Box,{flexDirection:"row",marginTop:1},Pt.default.createElement(un.Text,{bold:!0},"Search: "),Pt.default.createElement(un.Box,{width:41},Pt.default.createElement(ET.default,{value:ce,onChange:J,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),Pt.default.createElement(c,null)),me.length?Pt.default.createElement(fm,{radius:2,loop:!1,children:me.map(Le=>Pt.default.createElement(t,{key:Le.name,hit:Le,active:!1})),willReachEnd:Oe}):Pt.default.createElement(un.Text,{color:"gray"},"Start typing..."),Pt.default.createElement(un.Box,{flexDirection:"row",marginTop:1},Pt.default.createElement(un.Box,{width:49},Pt.default.createElement(un.Text,{bold:!0},"Selected:")),Pt.default.createElement(g,null)),re.length?re.map(Le=>Pt.default.createElement(C,{key:Le,name:Le,active:!1})):Pt.default.createElement(un.Text,{color:"gray"},"No selected packages..."),Pt.default.createElement(A,null))},{});if(typeof D=="undefined")return 1;let L=Array.from(D.keys()).filter($=>D.get($)==="regular"),N=Array.from(D.keys()).filter($=>D.get($)==="dev"),j=Array.from(D.keys()).filter($=>D.get($)==="peer");return L.length&&await this.cli.run(["add",...L]),N.length&&await this.cli.run(["add","--dev",...N]),j&&await this.cli.run(["add","--peer",...j]),0}};ud.paths=[["search"]],ud.usage=DT.Command.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});var ST=ud;var Im=Er(require("@yarnpkg/cli")),W0=Er(require("@yarnpkg/core"));var sd=Er(ys()),bf=Er(lr());var CT=Er(ys()),TT=Er(lr()),wm=({length:i,active:u})=>{if(i===0)return null;let f=i>1?` ${"-".repeat(i-1)}`:" ";return TT.default.createElement(CT.Text,{dimColor:!u},f)};var xT=function({active:i,skewer:u,options:f,value:c,onChange:g,sizes:t=[]}){let C=f.filter(({label:x})=>!!x).map(({value:x})=>x),A=f.findIndex(x=>x.value===c&&x.label!="");return lm(c,C,{active:i,minus:"left",plus:"right",set:g}),bf.default.createElement(bf.default.Fragment,null,f.map(({label:x},D)=>{let L=D===A,N=t[D]-1||0,j=x.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),$=Math.max(0,N-j.length-2);return x?bf.default.createElement(sd.Box,{key:x,width:N,marginLeft:1},bf.default.createElement(sd.Text,{wrap:"truncate"},bf.default.createElement(om,{active:L})," ",x),u?bf.default.createElement(wm,{active:i,length:$}):null):bf.default.createElement(sd.Box,{key:`spacer-${D}`,width:N,marginLeft:1})}))};var c9=Er(require("@yarnpkg/plugin-essentials")),a9=Er(require("clipanion")),d9=Er(f9()),tr=Er(ys()),pn=Er(lr()),p9=Er(require("semver")),h9=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,WH=10,md=class extends Im.BaseCommand{async execute(){let u=await W0.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:c}=await W0.Project.find(u,this.context.cwd),g=await W0.Cache.find(u);if(!c)throw new Im.WorkspaceRequiredError(f.cwd,this.context.cwd);await f.restoreInstallState({restoreResolutions:!1});let t=(Q,oe)=>{let Se=(0,d9.diffWords)(Q,oe),me="";for(let De of Se)De.added?me+=W0.formatUtils.pretty(u,De.value,"green"):De.removed||(me+=De.value);return me},C=(Q,oe)=>{if(Q===oe)return oe;let Se=W0.structUtils.parseRange(Q),me=W0.structUtils.parseRange(oe),De=Se.selector.match(h9),J=me.selector.match(h9);if(!De||!J)return t(Q,oe);let Te=["gray","red","yellow","green","magenta"],Oe=null,Le="";for(let ot=1;ot{let me=await c9.suggestUtils.fetchDescriptorFrom(Q,Se,{project:f,cache:g,preserveModifier:oe,workspace:c});return me!==null?me.range:Q.range},x=async Q=>{let oe=p9.default.valid(Q.range)?`^${Q.range}`:Q.range,[Se,me]=await Promise.all([A(Q,Q.range,oe).catch(()=>null),A(Q,Q.range,"latest").catch(()=>null)]),De=[{value:null,label:Q.range}];return Se&&Se!==Q.range?De.push({value:Se,label:C(Q.range,Se)}):De.push({value:null,label:""}),me&&me!==Se&&me!==Q.range?De.push({value:me,label:C(Q.range,me)}):De.push({value:null,label:""}),De},D=()=>pn.default.createElement(tr.Box,{flexDirection:"row"},pn.default.createElement(tr.Box,{flexDirection:"column",width:49},pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},""),"/",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to select packages.")),pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},""),"/",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to select versions."))),pn.default.createElement(tr.Box,{flexDirection:"column"},pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to install.")),pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),L=()=>pn.default.createElement(tr.Box,{flexDirection:"row",paddingTop:1,paddingBottom:1},pn.default.createElement(tr.Box,{width:50},pn.default.createElement(tr.Text,{bold:!0},pn.default.createElement(tr.Text,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Current")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Range")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Latest"))),N=({active:Q,descriptor:oe,suggestions:Se})=>{let[me,De]=Ec(oe.descriptorHash,null),J=W0.structUtils.stringifyIdent(oe),Te=Math.max(0,45-J.length);return pn.default.createElement(pn.default.Fragment,null,pn.default.createElement(tr.Box,null,pn.default.createElement(tr.Box,{width:45},pn.default.createElement(tr.Text,{bold:!0},W0.structUtils.prettyIdent(u,oe)),pn.default.createElement(wm,{active:Q,length:Te})),Se!==null?pn.default.createElement(xT,{active:Q,options:Se,value:me,skewer:!0,onChange:De,sizes:[17,17,17]}):pn.default.createElement(tr.Box,{marginLeft:2},pn.default.createElement(tr.Text,{color:"gray"},"Fetching suggestions..."))))},j=({dependencies:Q})=>{let[oe,Se]=(0,pn.useState)(null),me=(0,pn.useRef)(!0);return(0,pn.useEffect)(()=>()=>{me.current=!1}),(0,pn.useEffect)(()=>{Promise.all(Q.map(De=>x(De))).then(De=>{let J=Q.map((Te,Oe)=>{let Le=De[Oe];return[Te,Le]}).filter(([Te,Oe])=>Oe.filter(Le=>Le.label!=="").length>1);me.current&&Se(J)})},[]),oe?oe.length?pn.default.createElement(fm,{radius:WH,children:oe.map(([De,J])=>pn.default.createElement(N,{key:De.descriptorHash,active:!1,descriptor:De,suggestions:J}))}):pn.default.createElement(tr.Text,null,"No upgrades found"):pn.default.createElement(tr.Text,null,"Fetching suggestions...")},h=await dm(({useSubmit:Q})=>{Q(Ec());let oe=new Map;for(let me of f.workspaces)for(let De of["dependencies","devDependencies"])for(let J of me.manifest[De].values())f.tryWorkspaceByDescriptor(J)===null&&oe.set(J.descriptorHash,J);let Se=W0.miscUtils.sortMap(oe.values(),me=>W0.structUtils.stringifyDescriptor(me));return pn.default.createElement(tr.Box,{flexDirection:"column"},pn.default.createElement(D,null),pn.default.createElement(L,null),pn.default.createElement(j,{dependencies:Se}))},{});if(typeof h=="undefined")return 1;let re=!1;for(let Q of f.workspaces)for(let oe of["dependencies","devDependencies"]){let Se=Q.manifest[oe];for(let me of Se.values()){let De=h.get(me.descriptorHash);typeof De!="undefined"&&De!==null&&(Se.set(me.identHash,W0.structUtils.makeDescriptor(me,De)),re=!0)}}return re?(await W0.StreamReport.start({configuration:u,stdout:this.context.stdout,includeLogs:!this.context.quiet},async Q=>{await f.install({cache:g,report:Q})})).exitCode():0}};md.paths=[["upgrade-interactive"]],md.usage=a9.Command.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var m9=md;var bH={commands:[ST,m9]},GH=bH;return HH;})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-debug-tools.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -return plugin; -} -}; diff --git a/tgui/.yarn/releases/yarn-3.3.1.cjs b/tgui/.yarn/releases/yarn-3.3.1.cjs deleted file mode 100644 index 53a282e439a..00000000000 --- a/tgui/.yarn/releases/yarn-3.3.1.cjs +++ /dev/null @@ -1,823 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var dfe=Object.create;var jS=Object.defineProperty;var Cfe=Object.getOwnPropertyDescriptor;var mfe=Object.getOwnPropertyNames;var Efe=Object.getPrototypeOf,Ife=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var y=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ht=(r,e)=>{for(var t in e)jS(r,t,{get:e[t],enumerable:!0})},yfe=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of mfe(e))!Ife.call(r,n)&&n!==t&&jS(r,n,{get:()=>e[n],enumerable:!(i=Cfe(e,n))||i.enumerable});return r};var ne=(r,e,t)=>(t=r!=null?dfe(Efe(r)):{},yfe(e||!r||!r.__esModule?jS(t,"default",{value:r,enumerable:!0}):t,r));var aK=y((uZe,oK)=>{oK.exports=sK;sK.sync=Gfe;var iK=J("fs");function Hfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{uK.exports=lK;lK.sync=Yfe;var AK=J("fs");function lK(r,e,t){AK.stat(r,function(i,n){t(i,i?!1:cK(n,e))})}function Yfe(r,e){return cK(AK.statSync(r),e)}function cK(r,e){return r.isFile()&&jfe(r,e)}function jfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var hK=y((hZe,fK)=>{var fZe=J("fs"),OI;process.platform==="win32"||global.TESTING_WINDOWS?OI=aK():OI=gK();fK.exports=av;av.sync=qfe;function av(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){av(r,e||{},function(s,o){s?n(s):i(o)})})}OI(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function qfe(r,e){try{return OI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var yK=y((pZe,IK)=>{var _g=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",pK=J("path"),Jfe=_g?";":":",dK=hK(),CK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),mK=(r,e)=>{let t=e.colon||Jfe,i=r.match(/\//)||_g&&r.match(/\\/)?[""]:[..._g?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=_g?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=_g?n.split(t):[""];return _g&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},EK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=mK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(CK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=pK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];dK(c+p,{pathExt:s},(C,w)=>{if(!C&&w)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Wfe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=mK(r,e),s=[];for(let o=0;o{"use strict";var wK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};Av.exports=wK;Av.exports.default=wK});var vK=y((CZe,SK)=>{"use strict";var bK=J("path"),zfe=yK(),Vfe=BK();function QK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=zfe.sync(r.command,{path:t[Vfe({env:t})],pathExt:e?bK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=bK.resolve(n?r.options.cwd:"",o)),o}function Xfe(r){return QK(r)||QK(r,!0)}SK.exports=Xfe});var xK=y((mZe,cv)=>{"use strict";var lv=/([()\][%!^"`<>&|;, *?])/g;function _fe(r){return r=r.replace(lv,"^$1"),r}function Zfe(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(lv,"^$1"),e&&(r=r.replace(lv,"^$1")),r}cv.exports.command=_fe;cv.exports.argument=Zfe});var DK=y((EZe,PK)=>{"use strict";PK.exports=/^#!(.*)/});var RK=y((IZe,kK)=>{"use strict";var $fe=DK();kK.exports=(r="")=>{let e=r.match($fe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var NK=y((yZe,FK)=>{"use strict";var uv=J("fs"),ehe=RK();function the(r){let t=Buffer.alloc(150),i;try{i=uv.openSync(r,"r"),uv.readSync(i,t,0,150,0),uv.closeSync(i)}catch{}return ehe(t.toString())}FK.exports=the});var MK=y((wZe,OK)=>{"use strict";var rhe=J("path"),TK=vK(),LK=xK(),ihe=NK(),nhe=process.platform==="win32",she=/\.(?:com|exe)$/i,ohe=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function ahe(r){r.file=TK(r);let e=r.file&&ihe(r.file);return e?(r.args.unshift(r.file),r.command=e,TK(r)):r.file}function Ahe(r){if(!nhe)return r;let e=ahe(r),t=!she.test(e);if(r.options.forceShell||t){let i=ohe.test(e);r.command=rhe.normalize(r.command),r.command=LK.command(r.command),r.args=r.args.map(s=>LK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function lhe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Ahe(i)}OK.exports=lhe});var HK=y((BZe,KK)=>{"use strict";var gv=process.platform==="win32";function fv(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function che(r,e){if(!gv)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=UK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function UK(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawn"):null}function uhe(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawnSync"):null}KK.exports={hookChildProcess:che,verifyENOENT:UK,verifyENOENTSync:uhe,notFoundError:fv}});var dv=y((bZe,Zg)=>{"use strict";var GK=J("child_process"),hv=MK(),pv=HK();function YK(r,e,t){let i=hv(r,e,t),n=GK.spawn(i.command,i.args,i.options);return pv.hookChildProcess(n,i),n}function ghe(r,e,t){let i=hv(r,e,t),n=GK.spawnSync(i.command,i.args,i.options);return n.error=n.error||pv.verifyENOENTSync(n.status,i),n}Zg.exports=YK;Zg.exports.spawn=YK;Zg.exports.sync=ghe;Zg.exports._parse=hv;Zg.exports._enoent=pv});var qK=y((QZe,jK)=>{"use strict";function fhe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function uc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,uc)}fhe(uc,Error);uc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",re=de(">>",!1),me=">&",tt=de(">&",!1),Rt=">",It=de(">",!1),Ur="<<<",oi=de("<<<",!1),pi="<&",pr=de("<&",!1),di="<",ai=de("<",!1),Os=function(m){return{type:"argument",segments:[].concat(...m)}},dr=function(m){return m},Bi="$'",_n=de("$'",!1),pa="'",EA=de("'",!1),kg=function(m){return[{type:"text",text:m}]},Zn='""',IA=de('""',!1),da=function(){return{type:"text",text:""}},Jp='"',yA=de('"',!1),wA=function(m){return m},Br=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},Vl=function(m){return{type:"shell",shell:m,quoted:!0}},Rg=function(m){return{type:"variable",...m,quoted:!0}},Eo=function(m){return{type:"text",text:m}},Fg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},Wp=function(m){return{type:"shell",shell:m,quoted:!1}},zp=function(m){return{type:"variable",...m,quoted:!1}},Pr=function(m){return{type:"glob",pattern:m}},oe=/^[^']/,Io=Ye(["'"],!0,!1),kn=function(m){return m.join("")},Ng=/^[^$"]/,bt=Ye(["$",'"'],!0,!1),Xl=`\\ -`,Rn=de(`\\ -`,!1),$n=function(){return""},es="\\",ut=de("\\",!1),yo=/^[\\$"`]/,at=Ye(["\\","$",'"',"`"],!1,!1),ln=function(m){return m},S="\\a",Lt=de("\\a",!1),Tg=function(){return"a"},_l="\\b",Vp=de("\\b",!1),Xp=function(){return"\b"},_p=/^[Ee]/,Zp=Ye(["E","e"],!1,!1),$p=function(){return"\x1B"},G="\\f",yt=de("\\f",!1),BA=function(){return"\f"},Wi="\\n",Zl=de("\\n",!1),We=function(){return` -`},Ca="\\r",Lg=de("\\r",!1),uI=function(){return"\r"},ed="\\t",gI=de("\\t",!1),ar=function(){return" "},Fn="\\v",$l=de("\\v",!1),td=function(){return"\v"},Ms=/^[\\'"?]/,ma=Ye(["\\","'",'"',"?"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},ke="\\x",Og=de("\\x",!1),ec="\\u",Us=de("\\u",!1),tc="\\U",bA=de("\\U",!1),Mg=function(m){return String.fromCodePoint(parseInt(m,16))},Ug=/^[0-7]/,Ea=Ye([["0","7"]],!1,!1),Ia=/^[0-9a-fA-f]/,$e=Ye([["0","9"],["a","f"],["A","f"]],!1,!1),wo=rt(),QA="-",rc=de("-",!1),Ks="+",ic=de("+",!1),fI=".",rd=de(".",!1),Kg=function(m,Q,F){return{type:"number",value:(m==="-"?-1:1)*parseFloat(Q.join("")+"."+F.join(""))}},id=function(m,Q){return{type:"number",value:(m==="-"?-1:1)*parseInt(Q.join(""))}},hI=function(m){return{type:"variable",...m}},nc=function(m){return{type:"variable",name:m}},pI=function(m){return m},Hg="*",SA=de("*",!1),Nr="/",dI=de("/",!1),Hs=function(m,Q,F){return{type:Q==="*"?"multiplication":"division",right:F}},Gs=function(m,Q){return Q.reduce((F,K)=>({left:F,...K}),m)},Gg=function(m,Q,F){return{type:Q==="+"?"addition":"subtraction",right:F}},vA="$((",R=de("$((",!1),q="))",pe=de("))",!1),Ne=function(m){return m},xe="$(",qe=de("$(",!1),dt=function(m){return m},Ft="${",Nn=de("${",!1),vS=":-",AU=de(":-",!1),lU=function(m,Q){return{name:m,defaultValue:Q}},xS=":-}",cU=de(":-}",!1),uU=function(m){return{name:m,defaultValue:[]}},PS=":+",gU=de(":+",!1),fU=function(m,Q){return{name:m,alternativeValue:Q}},DS=":+}",hU=de(":+}",!1),pU=function(m){return{name:m,alternativeValue:[]}},kS=function(m){return{name:m}},dU="$",CU=de("$",!1),mU=function(m){return e.isGlobPattern(m)},EU=function(m){return m},RS=/^[a-zA-Z0-9_]/,FS=Ye([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),NS=function(){return O()},TS=/^[$@*?#a-zA-Z0-9_\-]/,LS=Ye(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),IU=/^[(){}<>$|&; \t"']/,Yg=Ye(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),OS=/^[<>&; \t"']/,MS=Ye(["<",">","&",";"," "," ",'"',"'"],!1,!1),CI=/^[ \t]/,mI=Ye([" "," "],!1,!1),b=0,Fe=0,xA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function O(){return r.substring(Fe,b)}function X(){return Et(Fe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Fi([At(m)],r.substring(Fe,b),Q)}function ye(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Tn(m,Q)}function de(m,Q){return{type:"literal",text:m,ignoreCase:Q}}function Ye(m,Q,F){return{type:"class",parts:m,inverted:Q,ignoreCase:F}}function rt(){return{type:"any"}}function wt(){return{type:"end"}}function At(m){return{type:"other",description:m}}function et(m){var Q=xA[m],F;if(Q)return Q;for(F=m-1;!xA[F];)F--;for(Q=xA[F],Q={line:Q.line,column:Q.column};Fd&&(d=b,E=[]),E.push(m))}function Tn(m,Q){return new uc(m,null,null,Q)}function Fi(m,Q,F){return new uc(uc.buildMessage(m,Q),m,Q,F)}function PA(){var m,Q;return m=b,Q=Kr(),Q===t&&(Q=null),Q!==t&&(Fe=m,Q=s(Q)),m=Q,m}function Kr(){var m,Q,F,K,ce;if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Fe=m,Q=o(Q,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K===t&&(K=null),K!==t?(Fe=m,Q=a(Q,K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function ts(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=Kr(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=l(F),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ya(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&Be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&Be(f))),m}function Hr(){var m,Q,F;return m=b,Q=yU(),Q!==t?(F=$ge(),F===t&&(F=null),F!==t?(Fe=m,Q=h(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function $ge(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=efe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Hr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=p(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function efe(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&Be(w)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&Be(v))),m}function yU(){var m,Q,F;return m=b,Q=ife(),Q!==t?(F=tfe(),F===t&&(F=null),F!==t?(Fe=m,Q=D(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function tfe(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=rfe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=yU(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=T(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function rfe(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&Be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&Be(V))),m}function EI(){var m,Q,F,K,ce,Qe;if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t)if(K=bU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(Fe=m,Q=A(Q,K),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ife(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===40?(F=ge,b++):(F=t,I===0&&Be(_)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===41?(ft=L,b++):(ft=t,I===0&&Be(N)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=ue(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===123?(F=we,b++):(F=t,I===0&&Be(Te)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===125?(ft=Pe,b++):(ft=t,I===0&&Be(Le)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=se(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){for(F=[],K=EI();K!==t;)F.push(K),K=EI();if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t){if(ce=[],Qe=BU(),Qe!==t)for(;Qe!==t;)ce.push(Qe),Qe=BU();else ce=t;if(ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=Ae(F,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=EI(),K!==t)for(;K!==t;)F.push(K),K=EI();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=be(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function wU(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=II(),K!==t)for(;K!==t;)F.push(K),K=II();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=fe(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function BU(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t?(F=nd(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();Q!==t?(F=II(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function nd(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(Ge.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ie)),F===t&&(F=null),F!==t?(K=nfe(),K!==t?(ce=II(),ce!==t?(Fe=m,Q=Y(F,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function nfe(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&Be(re)),m===t&&(r.substr(b,2)===me?(m=me,b+=2):(m=t,I===0&&Be(tt)),m===t&&(r.charCodeAt(b)===62?(m=Rt,b++):(m=t,I===0&&Be(It)),m===t&&(r.substr(b,3)===Ur?(m=Ur,b+=3):(m=t,I===0&&Be(oi)),m===t&&(r.substr(b,2)===pi?(m=pi,b+=2):(m=t,I===0&&Be(pr)),m===t&&(r.charCodeAt(b)===60?(m=di,b++):(m=t,I===0&&Be(ai))))))),m}function II(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(F=bU(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m}function bU(){var m,Q,F;if(m=b,Q=[],F=QU(),F!==t)for(;F!==t;)Q.push(F),F=QU();else Q=t;return Q!==t&&(Fe=m,Q=Os(Q)),m=Q,m}function QU(){var m,Q;return m=b,Q=sfe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=ofe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=Afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q))),m}function sfe(){var m,Q,F,K;return m=b,r.substr(b,2)===Bi?(Q=Bi,b+=2):(Q=t,I===0&&Be(_n)),Q!==t?(F=ufe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function ofe(){var m,Q,F,K;return m=b,r.charCodeAt(b)===39?(Q=pa,b++):(Q=t,I===0&&Be(EA)),Q!==t?(F=lfe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function afe(){var m,Q,F,K;if(m=b,r.substr(b,2)===Zn?(Q=Zn,b+=2):(Q=t,I===0&&Be(IA)),Q!==t&&(Fe=m,Q=da()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=Jp,b++):(Q=t,I===0&&Be(yA)),Q!==t){for(F=[],K=SU();K!==t;)F.push(K),K=SU();F!==t?(r.charCodeAt(b)===34?(K=Jp,b++):(K=t,I===0&&Be(yA)),K!==t?(Fe=m,Q=wA(F),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function Afe(){var m,Q,F;if(m=b,Q=[],F=vU(),F!==t)for(;F!==t;)Q.push(F),F=vU();else Q=t;return Q!==t&&(Fe=m,Q=wA(Q)),m=Q,m}function SU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Br(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Vl(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=Rg(Q)),m=Q,m===t&&(m=b,Q=cfe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q))),m}function vU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Fg(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Wp(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=zp(Q)),m=Q,m===t&&(m=b,Q=hfe(),Q!==t&&(Fe=m,Q=Pr(Q)),m=Q,m===t&&(m=b,Q=ffe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q)))),m}function lfe(){var m,Q,F;for(m=b,Q=[],oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));F!==t;)Q.push(F),oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function cfe(){var m,Q,F;if(m=b,Q=[],F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt))),F!==t)for(;F!==t;)Q.push(F),F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt)));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function xU(){var m,Q,F;return m=b,r.substr(b,2)===Xl?(Q=Xl,b+=2):(Q=t,I===0&&Be(Rn)),Q!==t&&(Fe=m,Q=$n()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(yo.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(at)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t)),m}function ufe(){var m,Q,F;for(m=b,Q=[],F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));F!==t;)Q.push(F),F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function PU(){var m,Q,F;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&Be(Lt)),Q!==t&&(Fe=m,Q=Tg()),m=Q,m===t&&(m=b,r.substr(b,2)===_l?(Q=_l,b+=2):(Q=t,I===0&&Be(Vp)),Q!==t&&(Fe=m,Q=Xp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(_p.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Zp)),F!==t?(Fe=m,Q=$p(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&Be(yt)),Q!==t&&(Fe=m,Q=BA()),m=Q,m===t&&(m=b,r.substr(b,2)===Wi?(Q=Wi,b+=2):(Q=t,I===0&&Be(Zl)),Q!==t&&(Fe=m,Q=We()),m=Q,m===t&&(m=b,r.substr(b,2)===Ca?(Q=Ca,b+=2):(Q=t,I===0&&Be(Lg)),Q!==t&&(Fe=m,Q=uI()),m=Q,m===t&&(m=b,r.substr(b,2)===ed?(Q=ed,b+=2):(Q=t,I===0&&Be(gI)),Q!==t&&(Fe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Fn?(Q=Fn,b+=2):(Q=t,I===0&&Be($l)),Q!==t&&(Fe=m,Q=td()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(Ms.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ma)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=gfe()))))))))),m}function gfe(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs,YS;return m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(F=US(),F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ke?(Q=ke,b+=2):(Q=t,I===0&&Be(Og)),Q!==t?(F=b,K=b,ce=US(),ce!==t?(Qe=Ln(),Qe!==t?(ce=[ce,Qe],K=ce):(b=K,K=t)):(b=K,K=t),K===t&&(K=US()),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ec?(Q=ec,b+=2):(Q=t,I===0&&Be(Us)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Qe,ft,Bt],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===tc?(Q=tc,b+=2):(Q=t,I===0&&Be(bA)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(Vr=Ln(),Vr!==t?(Ci=Ln(),Ci!==t?(rs=Ln(),rs!==t?(YS=Ln(),YS!==t?(ce=[ce,Qe,ft,Bt,Vr,Ci,rs,YS],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=Mg(F),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function US(){var m;return Ug.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Ea)),m}function Ln(){var m;return Ia.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be($e)),m}function ffe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t)),F!==t)for(;F!==t;)Q.push(F),F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function KS(){var m,Q,F,K,ce,Qe;if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;if(F!==t)if(r.charCodeAt(b)===46?(K=fI,b++):(K=t,I===0&&Be(rd)),K!==t){if(ce=[],Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie)),Qe!==t)for(;Qe!==t;)ce.push(Qe),Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie));else ce=t;ce!==t?(Fe=m,Q=Kg(Q,F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;F!==t?(Fe=m,Q=id(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=hI(Q)),m=Q,m===t&&(m=b,Q=sc(),Q!==t&&(Fe=m,Q=nc(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&Be(_)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.charCodeAt(b)===41?(Qe=L,b++):(Qe=t,I===0&&Be(N)),Qe!==t?(Fe=m,Q=pI(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function HS(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=KS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function DU(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=HS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function kU(){var m,Q,F,K,ce,Qe;if(m=b,r.substr(b,3)===vA?(Q=vA,b+=3):(Q=t,I===0&&Be(R)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.substr(b,2)===q?(Qe=q,b+=2):(Qe=t,I===0&&Be(pe)),Qe!==t?(Fe=m,Q=Ne(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function RU(){var m,Q,F,K;return m=b,r.substr(b,2)===xe?(Q=xe,b+=2):(Q=t,I===0&&Be(qe)),Q!==t?(F=Kr(),F!==t?(r.charCodeAt(b)===41?(K=L,b++):(K=t,I===0&&Be(N)),K!==t?(Fe=m,Q=dt(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function GS(){var m,Q,F,K,ce,Qe;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===vS?(K=vS,b+=2):(K=t,I===0&&Be(AU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=lU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===xS?(K=xS,b+=3):(K=t,I===0&&Be(cU)),K!==t?(Fe=m,Q=uU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===PS?(K=PS,b+=2):(K=t,I===0&&Be(gU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=fU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===DS?(K=DS,b+=3):(K=t,I===0&&Be(hU)),K!==t?(Fe=m,Q=pU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.charCodeAt(b)===125?(K=Pe,b++):(K=t,I===0&&Be(Le)),K!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=dU,b++):(Q=t,I===0&&Be(CU)),Q!==t?(F=sc(),F!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function hfe(){var m,Q,F;return m=b,Q=pfe(),Q!==t?(Fe=b,F=mU(Q),F?F=void 0:F=t,F!==t?(Fe=m,Q=EU(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function pfe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F!==t)for(;F!==t;)Q.push(F),F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t);else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function FU(){var m,Q,F;if(m=b,Q=[],RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS)),F!==t)for(;F!==t;)Q.push(F),RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function sc(){var m,Q,F;if(m=b,Q=[],TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS)),F!==t)for(;F!==t;)Q.push(F),TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function NU(){var m;return IU.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Yg)),m}function TU(){var m;return OS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(MS)),m}function Me(){var m,Q;if(m=[],CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI)),Q!==t)for(;Q!==t;)m.push(Q),CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b{"use strict";function phe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function fc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,fc)}phe(fc,Error);fc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ie))}function Le(ie,Y){return new fc(ie,null,null,Y)}function se(ie,Y,he){return new fc(fc.buildMessage(ie,Y),ie,Y,he)}function Ae(){var ie,Y,he,re;return ie=v,Y=be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Pe(o)),he!==t?(re=be(),re!==t?(D=ie,Y=a(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=be(),Y!==t&&(D=ie,Y=l(Y)),ie=Y),ie}function be(){var ie,Y,he,re;return ie=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Pe(u)),he!==t?(re=Ge(),re!==t?(D=ie,Y=g(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=fe(),Y!==t&&(D=ie,Y=f(Y)),ie=Y),ie}function fe(){var ie,Y,he,re,me;return ie=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Pe(u)),Y!==t?(he=le(),he!==t?(r.charCodeAt(v)===47?(re=s,v++):(re=t,$===0&&Pe(o)),re!==t?(me=le(),me!==t?(D=ie,Y=h(),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=le(),Y!==t&&(D=ie,Y=h()),ie=Y),ie}function le(){var ie,Y,he;if(ie=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}function Ge(){var ie,Y,he;if(ie=v,Y=[],w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B)),he!==t)for(;he!==t;)Y.push(he),w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function XK(r){return typeof r>"u"||r===null}function Che(r){return typeof r=="object"&&r!==null}function mhe(r){return Array.isArray(r)?r:XK(r)?[]:[r]}function Ehe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function md(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}md.prototype=Object.create(Error.prototype);md.prototype.constructor=md;md.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};_K.exports=md});var e2=y((YZe,$K)=>{"use strict";var ZK=pc();function wv(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}wv.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),ZK.repeat(" ",e)+i+a+s+` -`+ZK.repeat(" ",e+this.position-n+i.length)+"^"};wv.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: -`+t)),i};$K.exports=wv});var Ai=y((jZe,r2)=>{"use strict";var t2=tf(),whe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Bhe=["scalar","sequence","mapping"];function bhe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Qhe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(whe.indexOf(t)===-1)throw new t2('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=bhe(e.styleAliases||null),Bhe.indexOf(this.kind)===-1)throw new t2('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}r2.exports=Qhe});var dc=y((qZe,n2)=>{"use strict";var i2=pc(),jI=tf(),She=Ai();function Bv(r,e,t){var i=[];return r.include.forEach(function(n){t=Bv(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function vhe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var xhe=Ai();s2.exports=new xhe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var A2=y((WZe,a2)=>{"use strict";var Phe=Ai();a2.exports=new Phe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var c2=y((zZe,l2)=>{"use strict";var Dhe=Ai();l2.exports=new Dhe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var qI=y((VZe,u2)=>{"use strict";var khe=dc();u2.exports=new khe({explicit:[o2(),A2(),c2()]})});var f2=y((XZe,g2)=>{"use strict";var Rhe=Ai();function Fhe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function Nhe(){return null}function The(r){return r===null}g2.exports=new Rhe("tag:yaml.org,2002:null",{kind:"scalar",resolve:Fhe,construct:Nhe,predicate:The,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var p2=y((_Ze,h2)=>{"use strict";var Lhe=Ai();function Ohe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function Mhe(r){return r==="true"||r==="True"||r==="TRUE"}function Uhe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}h2.exports=new Lhe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Ohe,construct:Mhe,predicate:Uhe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var C2=y((ZZe,d2)=>{"use strict";var Khe=pc(),Hhe=Ai();function Ghe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function Yhe(r){return 48<=r&&r<=55}function jhe(r){return 48<=r&&r<=57}function qhe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var I2=y(($Ze,E2)=>{"use strict";var m2=pc(),zhe=Ai(),Vhe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Xhe(r){return!(r===null||!Vhe.test(r)||r[r.length-1]==="_")}function _he(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var Zhe=/^[-+]?[0-9]+e/;function $he(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(m2.isNegativeZero(r))return"-0.0";return t=r.toString(10),Zhe.test(t)?t.replace("e",".e"):t}function epe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||m2.isNegativeZero(r))}E2.exports=new zhe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Xhe,construct:_he,predicate:epe,represent:$he,defaultStyle:"lowercase"})});var bv=y((e$e,y2)=>{"use strict";var tpe=dc();y2.exports=new tpe({include:[qI()],implicit:[f2(),p2(),C2(),I2()]})});var Qv=y((t$e,w2)=>{"use strict";var rpe=dc();w2.exports=new rpe({include:[bv()]})});var S2=y((r$e,Q2)=>{"use strict";var ipe=Ai(),B2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),b2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function npe(r){return r===null?!1:B2.exec(r)!==null||b2.exec(r)!==null}function spe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=B2.exec(r),e===null&&(e=b2.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function ope(r){return r.toISOString()}Q2.exports=new ipe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:npe,construct:spe,instanceOf:Date,represent:ope})});var x2=y((i$e,v2)=>{"use strict";var ape=Ai();function Ape(r){return r==="<<"||r===null}v2.exports=new ape("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Ape})});var k2=y((n$e,D2)=>{"use strict";var Cc;try{P2=J,Cc=P2("buffer").Buffer}catch{}var P2,lpe=Ai(),Sv=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function cpe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=Sv;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function upe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=Sv,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),Cc?Cc.from?Cc.from(a):new Cc(a):a}function gpe(r){var e="",t=0,i,n,s=r.length,o=Sv;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function fpe(r){return Cc&&Cc.isBuffer(r)}D2.exports=new lpe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:cpe,construct:upe,predicate:fpe,represent:gpe})});var F2=y((s$e,R2)=>{"use strict";var hpe=Ai(),ppe=Object.prototype.hasOwnProperty,dpe=Object.prototype.toString;function Cpe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Epe=Ai(),Ipe=Object.prototype.toString;function ype(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Bpe=Ai(),bpe=Object.prototype.hasOwnProperty;function Qpe(r){if(r===null)return!0;var e,t=r;for(e in t)if(bpe.call(t,e)&&t[e]!==null)return!1;return!0}function Spe(r){return r!==null?r:{}}L2.exports=new Bpe("tag:yaml.org,2002:set",{kind:"mapping",resolve:Qpe,construct:Spe})});var nf=y((A$e,M2)=>{"use strict";var vpe=dc();M2.exports=new vpe({include:[Qv()],implicit:[S2(),x2()],explicit:[k2(),F2(),T2(),O2()]})});var K2=y((l$e,U2)=>{"use strict";var xpe=Ai();function Ppe(){return!0}function Dpe(){}function kpe(){return""}function Rpe(r){return typeof r>"u"}U2.exports=new xpe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Ppe,construct:Dpe,predicate:Rpe,represent:kpe})});var G2=y((c$e,H2)=>{"use strict";var Fpe=Ai();function Npe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function Tpe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Lpe(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function Ope(r){return Object.prototype.toString.call(r)==="[object RegExp]"}H2.exports=new Fpe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:Npe,construct:Tpe,predicate:Ope,represent:Lpe})});var q2=y((u$e,j2)=>{"use strict";var JI;try{Y2=J,JI=Y2("esprima")}catch{typeof window<"u"&&(JI=window.esprima)}var Y2,Mpe=Ai();function Upe(r){if(r===null)return!1;try{var e="("+r+")",t=JI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function Kpe(r){var e="("+r+")",t=JI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function Hpe(r){return r.toString()}function Gpe(r){return Object.prototype.toString.call(r)==="[object Function]"}j2.exports=new Mpe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Upe,construct:Kpe,predicate:Gpe,represent:Hpe})});var Ed=y((g$e,W2)=>{"use strict";var J2=dc();W2.exports=J2.DEFAULT=new J2({include:[nf()],explicit:[K2(),G2(),q2()]})});var gH=y((f$e,Id)=>{"use strict";var Qa=pc(),eH=tf(),Ype=e2(),tH=nf(),jpe=Ed(),NA=Object.prototype.hasOwnProperty,WI=1,rH=2,iH=3,zI=4,vv=1,qpe=2,z2=3,Jpe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Wpe=/[\x85\u2028\u2029]/,zpe=/[,\[\]\{\}]/,nH=/^(?:!|!!|![a-z\-]+!)$/i,sH=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function V2(r){return Object.prototype.toString.call(r)}function So(r){return r===10||r===13}function Ec(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function sf(r){return r===44||r===91||r===93||r===123||r===125}function Vpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Xpe(r){return r===120?2:r===117?4:r===85?8:0}function _pe(r){return 48<=r&&r<=57?r-48:-1}function X2(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` -`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function Zpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var oH=new Array(256),aH=new Array(256);for(mc=0;mc<256;mc++)oH[mc]=X2(mc)?1:0,aH[mc]=X2(mc);var mc;function $pe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||jpe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function AH(r,e){return new eH(e,new Ype(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function gt(r,e){throw AH(r,e)}function VI(r,e){r.onWarning&&r.onWarning.call(null,AH(r,e))}var _2={YAML:function(e,t,i){var n,s,o;e.version!==null&>(e,"duplication of %YAML directive"),i.length!==1&>(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&>(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&>(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&VI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&>(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],nH.test(n)||gt(e,"ill-formed tag handle (first argument) of the TAG directive"),NA.call(e.tagMap,n)&>(e,'there is a previously declared suffix for "'+n+'" tag handle'),sH.test(s)||gt(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function FA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=Qa.repeat(` -`,e-1))}function ede(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||sf(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&XI(r)||t&&sf(h))break;if(So(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,_r(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(FA(r,s,o,!1),Pv(r,r.line-l),s=o=r.position,a=!1),Ec(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return FA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function tde(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(FA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else So(t)?(FA(r,i,n,!0),Pv(r,_r(r,!1,e)),i=n=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);gt(r,"unexpected end of the stream within a single quoted scalar")}function rde(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return FA(r,t,r.position,!0),r.position++,!0;if(a===92){if(FA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),So(a))_r(r,!1,e);else if(a<256&&oH[a])r.result+=aH[a],r.position++;else if((o=Xpe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=Vpe(a))>=0?s=(s<<4)+o:gt(r,"expected hexadecimal character");r.result+=Zpe(s),r.position++}else gt(r,"unknown escape sequence");t=i=r.position}else So(a)?(FA(r,t,i,!0),Pv(r,_r(r,!1,e)),t=i=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}gt(r,"unexpected end of the stream within a double quoted scalar")}function ide(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,w;if(w=r.input.charCodeAt(r.position),w===91)l=93,g=!1,s=[];else if(w===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),w=r.input.charCodeAt(++r.position);w!==0;){if(_r(r,!0,e),w=r.input.charCodeAt(r.position),w===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||gt(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,w===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,_r(r,!0,e))),i=r.line,af(r,e,WI,!1,!0),p=r.tag,h=r.result,_r(r,!0,e),w=r.input.charCodeAt(r.position),(u||r.line===i)&&w===58&&(c=!0,w=r.input.charCodeAt(++r.position),_r(r,!0,e),af(r,e,WI,!1,!0),C=r.result),g?of(r,s,f,p,h,C):c?s.push(of(r,null,f,p,h,C)):s.push(h),_r(r,!0,e),w=r.input.charCodeAt(r.position),w===44?(t=!0,w=r.input.charCodeAt(++r.position)):t=!1}gt(r,"unexpected end of the stream within a flow collection")}function nde(r,e){var t,i,n=vv,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)vv===n?n=g===43?z2:qpe:gt(r,"repeat of a chomping mode identifier");else if((u=_pe(g))>=0)u===0?gt(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?gt(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Ec(g)){do g=r.input.charCodeAt(++r.position);while(Ec(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!So(g)&&g!==0)}for(;g!==0;){for(xv(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),So(g)){l++;continue}if(r.lineIndente)&&l!==0)gt(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(af(r,e,zI,!0,n)&&(p?f=r.result:h=r.result),p||(of(r,c,u,g,f,h,s,o),g=f=h=null),_r(r,!0,-1),w=r.input.charCodeAt(r.position)),r.lineIndent>e&&w!==0)gt(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):gt(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):gt(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function lde(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(_r(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&>(r,"directive name must not be less than one character in length");o!==0;){for(;Ec(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!So(o));break}if(So(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&xv(r),NA.call(_2,i)?_2[i](r,i,n):VI(r,'unknown document directive "'+i+'"')}if(_r(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,_r(r,!0,-1)):s&>(r,"directives end mark is expected"),af(r,r.lineIndent-1,zI,!1,!0),_r(r,!0,-1),r.checkLineBreaks&&Wpe.test(r.input.slice(e,r.position))&&VI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&XI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,_r(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=lH(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),cH(r,e,Qa.extend({schema:tH},t))}function ude(r,e){return uH(r,Qa.extend({schema:tH},e))}Id.exports.loadAll=cH;Id.exports.load=uH;Id.exports.safeLoadAll=cde;Id.exports.safeLoad=ude});var TH=y((h$e,Fv)=>{"use strict";var wd=pc(),Bd=tf(),gde=Ed(),fde=nf(),IH=Object.prototype.toString,yH=Object.prototype.hasOwnProperty,hde=9,yd=10,pde=13,dde=32,Cde=33,mde=34,wH=35,Ede=37,Ide=38,yde=39,wde=42,BH=44,Bde=45,bH=58,bde=61,Qde=62,Sde=63,vde=64,QH=91,SH=93,xde=96,vH=123,Pde=124,xH=125,Ti={};Ti[0]="\\0";Ti[7]="\\a";Ti[8]="\\b";Ti[9]="\\t";Ti[10]="\\n";Ti[11]="\\v";Ti[12]="\\f";Ti[13]="\\r";Ti[27]="\\e";Ti[34]='\\"';Ti[92]="\\\\";Ti[133]="\\N";Ti[160]="\\_";Ti[8232]="\\L";Ti[8233]="\\P";var Dde=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function kde(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Af(o))return _I;a=s>0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?DH:kH:t>9&&PH(r)?_I:c?FH:RH}function Ode(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&Dde.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return Fde(r,l)}switch(Lde(e,o,r.indent,s,a)){case DH:return e;case kH:return"'"+e.replace(/'/g,"''")+"'";case RH:return"|"+dH(e,r.indent)+CH(hH(e,n));case FH:return">"+dH(e,r.indent)+CH(hH(Mde(e,s),n));case _I:return'"'+Ude(e,s)+'"';default:throw new Bd("impossible error: invalid scalar style")}}()}function dH(r,e){var t=PH(r)?String(e):"",i=r[r.length-1]===` -`,n=i&&(r[r.length-2]===` -`||r===` -`),s=n?"+":i?"":"-";return t+s+` -`}function CH(r){return r[r.length-1]===` -`?r.slice(0,-1):r}function Mde(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` -`);return c=c!==-1?c:r.length,t.lastIndex=c,mH(r.slice(0,c),e)}(),n=r[0]===` -`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+mH(l,e),n=s}return i}function mH(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+r.slice(n,s),n=s+1),o=a;return l+=` -`,r.length-n>e&&o>n?l+=r.slice(n,o)+` -`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ude(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=fH((t-55296)*1024+i-56320+65536),s++;continue}n=Ti[t],e+=!n&&Af(t)?r[s]:n||fH(t)}return e}function Kde(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Ic(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function Yde(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Bd("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&yd===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=Dv(r,e)),Ic(r,e+1,u,!0,g)&&(r.dump&&yd===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function EH(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Ic(r,e,t,i,n,s){r.tag=null,r.dump=t,EH(r,t,!1)||EH(r,t,!0);var o=IH.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(Yde(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Gde(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(Hde(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Kde(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&Ode(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Bd("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function jde(r,e){var t=[],i=[],n,s;for(kv(r,t,i),n=0,s=i.length;n{"use strict";var ZI=gH(),LH=TH();function $I(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Tr.exports.Type=Ai();Tr.exports.Schema=dc();Tr.exports.FAILSAFE_SCHEMA=qI();Tr.exports.JSON_SCHEMA=bv();Tr.exports.CORE_SCHEMA=Qv();Tr.exports.DEFAULT_SAFE_SCHEMA=nf();Tr.exports.DEFAULT_FULL_SCHEMA=Ed();Tr.exports.load=ZI.load;Tr.exports.loadAll=ZI.loadAll;Tr.exports.safeLoad=ZI.safeLoad;Tr.exports.safeLoadAll=ZI.safeLoadAll;Tr.exports.dump=LH.dump;Tr.exports.safeDump=LH.safeDump;Tr.exports.YAMLException=tf();Tr.exports.MINIMAL_SCHEMA=qI();Tr.exports.SAFE_SCHEMA=nf();Tr.exports.DEFAULT_SCHEMA=Ed();Tr.exports.scan=$I("scan");Tr.exports.parse=$I("parse");Tr.exports.compose=$I("compose");Tr.exports.addConstructor=$I("addConstructor")});var UH=y((d$e,MH)=>{"use strict";var Jde=OH();MH.exports=Jde});var HH=y((C$e,KH)=>{"use strict";function Wde(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function yc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,yc)}Wde(yc,Error);yc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ne]:pe})))},H=function(R){return R},j=function(R){return R},$=Ms("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===vA*Gg},A=function(R){return R.length===(vA+1)*Gg},ae=function(){return vA++,!0},ge=function(){return vA--,!0},_=function(){return Lg()},L=Ms("pseudostring"),N=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Fn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),we=/^[^\r\n\t ,\][{}:#"']/,Te=Fn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Pe=function(){return Lg().replace(/^ *| *$/g,"")},Le="--",se=ar("--",!1),Ae=/^[a-zA-Z\/0-9]/,be=Fn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,le=Fn(["\r",` -`," "," ",":",","],!0,!1),Ge="null",ie=ar("null",!1),Y=function(){return null},he="true",re=ar("true",!1),me=function(){return!0},tt="false",Rt=ar("false",!1),It=function(){return!1},Ur=Ms("string"),oi='"',pi=ar('"',!1),pr=function(){return""},di=function(R){return R},ai=function(R){return R.join("")},Os=/^[^"\\\0-\x1F\x7F]/,dr=Fn(['"',"\\",["\0",""],"\x7F"],!0,!1),Bi='\\"',_n=ar('\\"',!1),pa=function(){return'"'},EA="\\\\",kg=ar("\\\\",!1),Zn=function(){return"\\"},IA="\\/",da=ar("\\/",!1),Jp=function(){return"/"},yA="\\b",wA=ar("\\b",!1),Br=function(){return"\b"},Vl="\\f",Rg=ar("\\f",!1),Eo=function(){return"\f"},Fg="\\n",Wp=ar("\\n",!1),zp=function(){return` -`},Pr="\\r",oe=ar("\\r",!1),Io=function(){return"\r"},kn="\\t",Ng=ar("\\t",!1),bt=function(){return" "},Xl="\\u",Rn=ar("\\u",!1),$n=function(R,q,pe,Ne){return String.fromCharCode(parseInt(`0x${R}${q}${pe}${Ne}`))},es=/^[0-9a-fA-F]/,ut=Fn([["0","9"],["a","f"],["A","F"]],!1,!1),yo=Ms("blank space"),at=/^[ \t]/,ln=Fn([" "," "],!1,!1),S=Ms("white space"),Lt=/^[ \t\n\r]/,Tg=Fn([" "," ",` -`,"\r"],!1,!1),_l=`\r -`,Vp=ar(`\r -`,!1),Xp=` -`,_p=ar(` -`,!1),Zp="\r",$p=ar("\r",!1),G=0,yt=0,BA=[{line:1,column:1}],Wi=0,Zl=[],We=0,Ca;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function Lg(){return r.substring(yt,G)}function uI(){return cn(yt,G)}function ed(R,q){throw q=q!==void 0?q:cn(yt,G),ec([Ms(R)],r.substring(yt,G),q)}function gI(R,q){throw q=q!==void 0?q:cn(yt,G),Og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Fn(R,q,pe){return{type:"class",parts:R,inverted:q,ignoreCase:pe}}function $l(){return{type:"any"}}function td(){return{type:"end"}}function Ms(R){return{type:"other",description:R}}function ma(R){var q=BA[R],pe;if(q)return q;for(pe=R-1;!BA[pe];)pe--;for(q=BA[pe],q={line:q.line,column:q.column};peWi&&(Wi=G,Zl=[]),Zl.push(R))}function Og(R,q){return new yc(R,null,null,q)}function ec(R,q,pe){return new yc(yc.buildMessage(R,q),R,q,pe)}function Us(){var R;return R=Mg(),R}function tc(){var R,q,pe;for(R=G,q=[],pe=bA();pe!==t;)q.push(pe),pe=bA();return q!==t&&(yt=R,q=s(q)),R=q,R}function bA(){var R,q,pe,Ne,xe;return R=G,q=Ia(),q!==t?(r.charCodeAt(G)===45?(pe=o,G++):(pe=t,We===0&&ke(a)),pe!==t?(Ne=Nr(),Ne!==t?(xe=Ea(),xe!==t?(yt=R,q=l(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Mg(){var R,q,pe;for(R=G,q=[],pe=Ug();pe!==t;)q.push(pe),pe=Ug();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ug(){var R,q,pe,Ne,xe,qe,dt,Ft,Nn;if(R=G,q=Nr(),q===t&&(q=null),q!==t){if(pe=G,r.charCodeAt(G)===35?(Ne=u,G++):(Ne=t,We===0&&ke(g)),Ne!==t){if(xe=[],qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t),qe!==t)for(;qe!==t;)xe.push(qe),qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t);else xe=t;xe!==t?(Ne=[Ne,xe],pe=Ne):(G=pe,pe=t)}else G=pe,pe=t;if(pe===t&&(pe=null),pe!==t){if(Ne=[],xe=Hs(),xe!==t)for(;xe!==t;)Ne.push(xe),xe=Hs();else Ne=t;Ne!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=Ia(),q!==t?(pe=rc(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Ia(),q!==t?(pe=Ks(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t)if(Ne=Nr(),Ne!==t)if(xe=fI(),xe!==t){if(qe=[],dt=Hs(),dt!==t)for(;dt!==t;)qe.push(dt),dt=Hs();else qe=t;qe!==t?(yt=R,q=w(pe,xe),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t){if(Ne=[],xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t),xe!==t)for(;xe!==t;)Ne.push(xe),xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t);else Ne=t;Ne!==t?(xe=Nr(),xe===t&&(xe=null),xe!==t?(r.charCodeAt(G)===58?(qe=p,G++):(qe=t,We===0&&ke(C)),qe!==t?(dt=Nr(),dt===t&&(dt=null),dt!==t?(Ft=Ea(),Ft!==t?(yt=R,q=T(pe,Ne,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ea(){var R,q,pe,Ne,xe,qe,dt;if(R=G,q=G,We++,pe=G,Ne=Gs(),Ne!==t?(xe=$e(),xe!==t?(r.charCodeAt(G)===45?(qe=o,G++):(qe=t,We===0&&ke(a)),qe!==t?(dt=Nr(),dt!==t?(Ne=[Ne,xe,qe,dt],pe=Ne):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t),We--,pe!==t?(G=q,q=void 0):q=t,q!==t?(pe=Hs(),pe!==t?(Ne=wo(),Ne!==t?(xe=tc(),xe!==t?(qe=QA(),qe!==t?(yt=R,q=H(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Gs(),q!==t?(pe=wo(),pe!==t?(Ne=Mg(),Ne!==t?(xe=QA(),xe!==t?(yt=R,q=H(Ne),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=ic(),q!==t){if(pe=[],Ne=Hs(),Ne!==t)for(;Ne!==t;)pe.push(Ne),Ne=Hs();else pe=t;pe!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function Ia(){var R,q,pe;for(We++,R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=Z(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),We--,R===t&&(q=t,We===0&&ke($)),R}function $e(){var R,q,pe;for(R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=A(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),R}function wo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function QA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function rc(){var R;return R=nc(),R===t&&(R=rd()),R}function Ks(){var R,q,pe;if(R=nc(),R===t){if(R=G,q=[],pe=Kg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Kg();else q=t;q!==t&&(yt=R,q=_()),R=q}return R}function ic(){var R;return R=id(),R===t&&(R=hI(),R===t&&(R=nc(),R===t&&(R=rd()))),R}function fI(){var R;return R=id(),R===t&&(R=nc(),R===t&&(R=Kg())),R}function rd(){var R,q,pe,Ne,xe,qe;if(We++,R=G,N.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ue)),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;return We--,R===t&&(q=t,We===0&&ke(L)),R}function Kg(){var R,q,pe,Ne,xe;if(R=G,r.substr(G,2)===Le?(q=Le,G+=2):(q=t,We===0&&ke(se)),q===t&&(q=null),q!==t)if(Ae.test(r.charAt(G))?(pe=r.charAt(G),G++):(pe=t,We===0&&ke(be)),pe!==t){for(Ne=[],fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));xe!==t;)Ne.push(xe),fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));Ne!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function id(){var R,q;return R=G,r.substr(G,4)===Ge?(q=Ge,G+=4):(q=t,We===0&&ke(ie)),q!==t&&(yt=R,q=Y()),R=q,R}function hI(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,We===0&&ke(re)),q!==t&&(yt=R,q=me()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,We===0&&ke(Rt)),q!==t&&(yt=R,q=It()),R=q),R}function nc(){var R,q,pe,Ne;return We++,R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(r.charCodeAt(G)===34?(pe=oi,G++):(pe=t,We===0&&ke(pi)),pe!==t?(yt=R,q=pr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(pe=pI(),pe!==t?(r.charCodeAt(G)===34?(Ne=oi,G++):(Ne=t,We===0&&ke(pi)),Ne!==t?(yt=R,q=di(pe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),We--,R===t&&(q=t,We===0&&ke(Ur)),R}function pI(){var R,q,pe;if(R=G,q=[],pe=Hg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Hg();else q=t;return q!==t&&(yt=R,q=ai(q)),R=q,R}function Hg(){var R,q,pe,Ne,xe,qe;return Os.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(dr)),R===t&&(R=G,r.substr(G,2)===Bi?(q=Bi,G+=2):(q=t,We===0&&ke(_n)),q!==t&&(yt=R,q=pa()),R=q,R===t&&(R=G,r.substr(G,2)===EA?(q=EA,G+=2):(q=t,We===0&&ke(kg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===IA?(q=IA,G+=2):(q=t,We===0&&ke(da)),q!==t&&(yt=R,q=Jp()),R=q,R===t&&(R=G,r.substr(G,2)===yA?(q=yA,G+=2):(q=t,We===0&&ke(wA)),q!==t&&(yt=R,q=Br()),R=q,R===t&&(R=G,r.substr(G,2)===Vl?(q=Vl,G+=2):(q=t,We===0&&ke(Rg)),q!==t&&(yt=R,q=Eo()),R=q,R===t&&(R=G,r.substr(G,2)===Fg?(q=Fg,G+=2):(q=t,We===0&&ke(Wp)),q!==t&&(yt=R,q=zp()),R=q,R===t&&(R=G,r.substr(G,2)===Pr?(q=Pr,G+=2):(q=t,We===0&&ke(oe)),q!==t&&(yt=R,q=Io()),R=q,R===t&&(R=G,r.substr(G,2)===kn?(q=kn,G+=2):(q=t,We===0&&ke(Ng)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Xl?(q=Xl,G+=2):(q=t,We===0&&ke(Rn)),q!==t?(pe=SA(),pe!==t?(Ne=SA(),Ne!==t?(xe=SA(),xe!==t?(qe=SA(),qe!==t?(yt=R,q=$n(pe,Ne,xe,qe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function SA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(ut)),R}function Nr(){var R,q;if(We++,R=[],at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln)),q!==t)for(;q!==t;)R.push(q),at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln));else R=t;return We--,R===t&&(q=t,We===0&&ke(yo)),R}function dI(){var R,q;if(We++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg));else R=t;return We--,R===t&&(q=t,We===0&&ke(S)),R}function Hs(){var R,q,pe,Ne,xe,qe;if(R=G,q=Gs(),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(q=[q,pe],R=q):(G=R,R=t)}else G=R,R=t;return R}function Gs(){var R;return r.substr(G,2)===_l?(R=_l,G+=2):(R=t,We===0&&ke(Vp)),R===t&&(r.charCodeAt(G)===10?(R=Xp,G++):(R=t,We===0&&ke(_p)),R===t&&(r.charCodeAt(G)===13?(R=Zp,G++):(R=t,We===0&&ke($p)))),R}let Gg=2,vA=0;if(Ca=n(),Ca!==t&&G===r.length)return Ca;throw Ca!==t&&G{"use strict";var $de=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=$de(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};Tv.exports=JH;Tv.exports.default=JH});var zH=y((B$e,eCe)=>{eCe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var wc=y(Mn=>{"use strict";var XH=zH(),vo=process.env;Object.defineProperty(Mn,"_vendors",{value:XH.map(function(r){return r.constant})});Mn.name=null;Mn.isPR=null;XH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return VH(i)});if(Mn[r.constant]=t,t)switch(Mn.name=r.name,typeof r.pr){case"string":Mn.isPR=!!vo[r.pr];break;case"object":"env"in r.pr?Mn.isPR=r.pr.env in vo&&vo[r.pr.env]!==r.pr.ne:"any"in r.pr?Mn.isPR=r.pr.any.some(function(i){return!!vo[i]}):Mn.isPR=VH(r.pr);break;default:Mn.isPR=null}});Mn.isCI=!!(vo.CI||vo.CONTINUOUS_INTEGRATION||vo.BUILD_NUMBER||vo.RUN_ID||Mn.name);function VH(r){return typeof r=="string"?!!vo[r]:Object.keys(r).every(function(e){return vo[e]===r[e]})}});var ry=y(Un=>{"use strict";Object.defineProperty(Un,"__esModule",{value:!0});var tCe=0,rCe=1,iCe=2,nCe="",sCe="\0",oCe=-1,aCe=/^(-h|--help)(?:=([0-9]+))?$/,ACe=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,lCe=/^-[a-zA-Z]{2,}$/,cCe=/^([^=]+)=([\s\S]*)$/,uCe=process.env.DEBUG_CLI==="1";Un.BATCH_REGEX=lCe;Un.BINDING_REGEX=cCe;Un.DEBUG=uCe;Un.END_OF_INPUT=sCe;Un.HELP_COMMAND_INDEX=oCe;Un.HELP_REGEX=aCe;Un.NODE_ERRORED=iCe;Un.NODE_INITIAL=tCe;Un.NODE_SUCCESS=rCe;Un.OPTION_REGEX=ACe;Un.START_OF_INPUT=nCe});var iy=y(Qd=>{"use strict";Object.defineProperty(Qd,"__esModule",{value:!0});var gCe=ry(),Lv=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},Ov=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i} - -${this.candidates.map(({usage:n})=>`$ ${n}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${i} -${Uv(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${Uv(e)}`}},Mv=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${Uv(e)}`}},Uv=r=>`While running ${r.filter(e=>e!==gCe.END_OF_INPUT).map(e=>{let t=JSON.stringify(e);return e.match(/\s/)||e.length===0||t!==`"${e}"`?t:e}).join(" ")}`;Qd.AmbiguousSyntaxError=Mv;Qd.UnknownSyntaxError=Ov;Qd.UsageError=Lv});var va=y(TA=>{"use strict";Object.defineProperty(TA,"__esModule",{value:!0});var _H=iy(),ZH=Symbol("clipanion/isOption");function fCe(r){return{...r,[ZH]:!0}}function hCe(r,e){return typeof r>"u"?[r,e]:typeof r=="object"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function Kv(r,e=!1){let t=r.replace(/^\.: /,"");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function $H(r,e){return e.length===1?new _H.UsageError(`${r}: ${Kv(e[0],!0)}`):new _H.UsageError(`${r}: -${e.map(t=>` -- ${Kv(t)}`).join("")}`)}function pCe(r,e,t){if(typeof t>"u")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw $H(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}TA.applyValidator=pCe;TA.cleanValidationError=Kv;TA.formatError=$H;TA.isOptionSymbol=ZH;TA.makeCommandOption=fCe;TA.rerouteArguments=hCe});var ns=y(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});var eG=/^[a-zA-Z_][a-zA-Z0-9_]*$/,tG=/^#[0-9a-f]{6}$/i,rG=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,iG=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,nG=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,Hv=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,sG=r=>()=>r;function Qt({test:r}){return sG(r)()}function Zr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function LA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:eG.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function Bc(r,e){return t=>{let i=r[e];return r[e]=t,Bc(r,e).bind(null,i)}}function oG(r,e){return t=>{r[e]=t}}function ny(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}var aG=()=>Qt({test:(r,e)=>!0});function dCe(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Zr(r)})`):!0})}var CCe=()=>Qt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Zr(r)})`):!0});function mCe(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Zr(i)})`)})}var ECe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),ICe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=ECe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Zr(r)})`)}return!0}}),yCe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Zr(r)})`)}return!0}}),wCe=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&Hv.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Zr(r)})`)}return!0}}),BCe=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Zr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=AG(r.length);return Qt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Zr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;aQt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Zr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Zr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:LA(n,l),coercion:Bc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),`Extraneous property (got ${Zr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:oG(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},vCe=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Zr(e)})`)}),xCe=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),PCe=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?Bc(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),DCe=r=>Qt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),kCe=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),RCe=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),FCe=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),AG=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),NCe=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sQt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),LCe=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),OCe=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),MCe=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),UCe=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),KCe=(r,e)=>Qt({test:(t,i)=>t>=r&&tQt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),GCe=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Zr(e)})`)}),YCe=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),jCe=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),qCe=()=>Qt({test:(r,e)=>nG.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Zr(r)})`)}),JCe=()=>Qt({test:(r,e)=>Hv.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Zr(r)})`)}),WCe=({alpha:r=!1})=>Qt({test:(e,t)=>(r?tG.test(e):rG.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Zr(e)})`)}),zCe=()=>Qt({test:(r,e)=>iG.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Zr(r)})`)}),VCe=(r=aG())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Zr(e)})`)}return r(i,t)}}),XCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},_Ce=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},ZCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(st.KeyRelationship||(st.KeyRelationship={}));var $Ce={[st.KeyRelationship.Forbids]:{expect:!1,message:"forbids using"},[st.KeyRelationship.Requires]:{expect:!0,message:"requires using"}},eme=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=$Ce[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${ny(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})};st.applyCascade=PCe;st.base64RegExp=iG;st.colorStringAlphaRegExp=rG;st.colorStringRegExp=tG;st.computeKey=LA;st.getPrintable=Zr;st.hasExactLength=AG;st.hasForbiddenKeys=_Ce;st.hasKeyRelationship=eme;st.hasMaxLength=FCe;st.hasMinLength=RCe;st.hasMutuallyExclusiveKeys=ZCe;st.hasRequiredKeys=XCe;st.hasUniqueItems=NCe;st.isArray=BCe;st.isAtLeast=OCe;st.isAtMost=MCe;st.isBase64=zCe;st.isBoolean=ICe;st.isDate=wCe;st.isDict=QCe;st.isEnum=mCe;st.isHexColor=WCe;st.isISO8601=JCe;st.isInExclusiveRange=KCe;st.isInInclusiveRange=UCe;st.isInstanceOf=vCe;st.isInteger=HCe;st.isJSON=VCe;st.isLiteral=dCe;st.isLowerCase=YCe;st.isNegative=TCe;st.isNullable=kCe;st.isNumber=yCe;st.isObject=SCe;st.isOneOf=xCe;st.isOptional=DCe;st.isPositive=LCe;st.isString=CCe;st.isTuple=bCe;st.isUUID4=qCe;st.isUnknown=aG;st.isUpperCase=jCe;st.iso8601RegExp=Hv;st.makeCoercionFn=Bc;st.makeSetter=oG;st.makeTrait=sG;st.makeValidator=Qt;st.matchesRegExp=GCe;st.plural=ny;st.pushError=pt;st.simpleKeyRegExp=eG;st.uuid4RegExp=nG});var bc=y(Gv=>{"use strict";Object.defineProperty(Gv,"__esModule",{value:!0});var lG=va();function tme(r){if(r&&r.__esModule)return r;var e=Object.create(null);return r&&Object.keys(r).forEach(function(t){if(t!=="default"){var i=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:function(){return r[t]}})}}),e.default=r,Object.freeze(e)}var Sd=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(function(){return tme(ns())}),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw lG.formatError("Invalid option schema",l);for(let[,g]of c)g()}else if(t!=null)throw new Error("Invalid command schema");let i=await this.execute();return typeof i<"u"?i:0}};Sd.isOption=lG.isOptionSymbol;Sd.Default=[];Gv.Command=Sd});var jv=y(vd=>{"use strict";Object.defineProperty(vd,"__esModule",{value:!0});var cG=80,Yv=Array(cG).fill("\u2501");for(let r=0;r<=24;++r)Yv[Yv.length-r]=`\x1B[38;5;${232+r}m\u2501`;var rme={header:r=>`\x1B[1m\u2501\u2501\u2501 ${r}${r.length`\x1B[1m${r}\x1B[22m`,error:r=>`\x1B[31m\x1B[1m${r}\x1B[22m\x1B[39m`,code:r=>`\x1B[36m${r}\x1B[39m`},ime={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function nme(r){let e=r.split(` -`),t=e.filter(n=>n.match(/\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(` -`)}function sme(r,{format:e,paragraphs:t}){return r=r.replace(/\r\n?/g,` -`),r=nme(r),r=r.replace(/^\n+|\n+$/g,""),r=r.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),r=r.replace(/\n(\n)?\n*/g,"$1"),t&&(r=r.split(/\n/).map(i=>{let n=i.match(/^\s*[*-][\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(` -`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,"g")).map((o,a)=>" ".repeat(s)+(a===0?"- ":" ")+o).join(` -`)}).join(` - -`)),r=r.replace(/(`+)((?:.|[\n])*?)\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\*\*)((?:.|[\n])*?)\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r} -`:""}vd.formatMarkdownish=sme;vd.richFormat=rme;vd.textFormat=ime});var ly=y(Ar=>{"use strict";Object.defineProperty(Ar,"__esModule",{value:!0});var lt=ry(),ay=iy();function Vi(r){lt.DEBUG&&console.log(r)}var uG={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:lt.HELP_COMMAND_INDEX};function qv(){return{nodes:[Li(),Li(),Li()]}}function gG(r){let e=qv(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(lt.NODE_INITIAL)}function hG(r,{prefix:e=""}={}){if(lt.DEBUG){Vi(`${e}Nodes are:`);for(let t=0;tl!==lt.NODE_ERRORED).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===lt.NODE_ERRORED))throw new ay.UnknownSyntaxError(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=pG(a)}if(i.length>0){Vi(" Results:");for(let s of i)Vi(` - ${s.node} -> ${JSON.stringify(s.state)}`)}else Vi(" No results");return i}function ome(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,lt.END_OF_INPUT)){for(let{to:t}of r.statics[lt.END_OF_INPUT])if(t===lt.NODE_SUCCESS)return!0}return!1}function ame(r,e,t){let i=t&&e.length>0?[""]:[],n=Jv(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],w=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=w[0];for(let{to:D,reducer:T}of C.statics[v])T==="pushPath"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=ome(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==lt.END_OF_INPUT||!f.startsWith("-")&&h.some(({reducer:p})=>p==="pushPath"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===lt.NODE_ERRORED)continue;let p=IG(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function Ame(r,e){let t=Jv(r,[...e,lt.END_OF_INPUT]);return dG(e,t.map(({state:i})=>i))}function pG(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function dG(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new ay.UnknownSyntaxError(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=CG(c);if(u.length>1)throw new ay.AmbiguousSyntaxError(r,u.map(g=>g.candidateUsage));return u[0]}function CG(r){let e=[],t=[];for(let i of r)i.selectedIndex===lt.HELP_COMMAND_INDEX?t.push(i):e.push(i);return t.length>0&&e.push({...uG,path:mG(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function mG(r,e,...t){return e===void 0?Array.from(r):mG(r.filter((i,n)=>i===e[n]),...t)}function Li(){return{dynamics:[],shortcuts:[],statics:{}}}function Wv(r){return r===lt.NODE_SUCCESS||r===lt.NODE_ERRORED}function sy(r,e=0){return{to:Wv(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function EG(r,e=0){let t=Li();for(let[i,n]of r.dynamics)t.dynamics.push([i,sy(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(sy(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>sy(s,e));return t}function Ei(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Qc(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function xo(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function xd(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function IG(r,e){let t=Array.isArray(r)?Pd[r[0]]:Pd[r];if(typeof t.suggest>"u")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var Pd={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(r,e)=>r.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&<.BATCH_REGEX.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(lt.BINDING_REGEX);return!r.ignoreOptions&&!!n&<.OPTION_REGEX.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&<.HELP_REGEX.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith("-")&<.OPTION_REGEX.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith("-")&&!lt.OPTION_REGEX.test(e)};Pd.isOption.suggest=(r,e,t=!0)=>t?null:[e];var oy={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(lt.BINDING_REGEX);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Po})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(lt.HELP_REGEX);return typeof i<"u"?{...r,options:[{name:"-c",value:String(t)},{name:"-i",value:i}]}:{...r,options:[{name:"-c",value:String(t)}]}},setError:(r,e,t)=>e===lt.END_OF_INPUT?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} ("${e}").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Po=Symbol(),Ay=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e="arg",required:t=!0}={}){if(!t&&this.arity.extra===Po)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!t&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!t&&this.arity.extra!==Po?this.arity.extra.push(e):this.arity.extra!==Po&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:t=0}={}){if(this.arity.extra===Po)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let i=0;i1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Po?i.push("..."):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(" "),options:n}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=qv(),t=lt.NODE_INITIAL,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=ss(e,Li()),xo(e,lt.NODE_INITIAL,lt.START_OF_INPUT,t,["setCandidateState",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?"always":"isNotOptionLike",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=ss(e,Li());Qc(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f0||!this.arity.proxy){let f=ss(e,Li());Ei(e,l,"isHelp",f,["useHelp",this.cliIndex]),xo(e,f,lt.END_OF_INPUT,lt.NODE_SUCCESS,["setSelectedIndex",lt.HELP_COMMAND_INDEX]),this.registerOptions(e,l)}this.arity.leading.length>0&&xo(e,l,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let c=l;for(let f=0;f0||f+1!==this.arity.leading.length)&&xo(e,h,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]),Ei(e,c,"isNotOptionLike",h,"pushPositional"),c=h}let u=c;if(this.arity.extra===Po||this.arity.extra.length>0){let f=ss(e,Li());if(Qc(e,c,f),this.arity.extra===Po){let h=ss(e,Li());this.arity.proxy||this.registerOptions(e,h),Ei(e,c,s,h,"pushExtraNoLimits"),Ei(e,h,s,h,"pushExtraNoLimits"),Qc(e,h,f)}else for(let h=0;h0&&xo(e,u,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let g=u;for(let f=0;fo.length>s.length?o:s,"");if(i.arity===0)for(let s of i.names)Ei(e,t,["isOption",s,i.hidden||s!==n],t,"pushTrue"),s.startsWith("--")&&!s.startsWith("--no-")&&Ei(e,t,["isNegatedOption",s],t,["pushFalse",s]);else{let s=ss(e,Li());for(let o of i.names)Ei(e,t,["isOption",o,i.hidden||o!==n],s,"pushUndefined");for(let o=0;o=0&&eAme(i,n),suggest:(n,s)=>ame(i,n,s)}}};Ar.CliBuilder=Dd;Ar.CommandBuilder=Ay;Ar.NoLimits=Po;Ar.aggregateHelpStates=CG;Ar.cloneNode=EG;Ar.cloneTransition=sy;Ar.debug=Vi;Ar.debugMachine=hG;Ar.execute=xd;Ar.injectNode=ss;Ar.isTerminalNode=Wv;Ar.makeAnyOfMachine=gG;Ar.makeNode=Li;Ar.makeStateMachine=qv;Ar.reducers=oy;Ar.registerDynamic=Ei;Ar.registerShortcut=Qc;Ar.registerStatic=xo;Ar.runMachineInternal=Jv;Ar.selectBestState=dG;Ar.simplifyMachine=fG;Ar.suggest=IG;Ar.tests=Pd;Ar.trimSmallerBranches=pG});var yG=y(zv=>{"use strict";Object.defineProperty(zv,"__esModule",{value:!0});var lme=bc(),kd=class extends lme.Command{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new kd(t);i.path=e.path;for(let n of e.options)switch(n.name){case"-c":i.commands.push(Number(n.value));break;case"-i":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}};zv.HelpCommand=kd});var vG=y(Vv=>{"use strict";Object.defineProperty(Vv,"__esModule",{value:!0});var cme=ry(),wG=bc(),ume=J("tty"),gme=ly(),hn=jv(),fme=yG();function hme(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var BG=hme(ume),bG=Symbol("clipanion/errorCommand");function pme(){return process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}var OA=class{constructor({binaryLabel:e,binaryName:t="...",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new gme.CliBuilder({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new OA(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c=="object"&&c!==null&&c[wG.Command.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<"u")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case cme.HELP_COMMAND_INDEX:return fme.HelpCommand.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[bG]=a,l}}break}}async run(e,t){var i;let n,s={...OA.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?dme(s):SG,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>"u")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<"u"?hn.formatMarkdownish(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<"u"?hn.formatMarkdownish(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<"u"?hn.formatMarkdownish(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<"u"?i.usage.examples.map(([f,h])=>[hn.formatMarkdownish(f,{format:this.format(e),paragraphs:!1}),h.replace(/\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n="$ "}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<"u";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof wG.Command?e.constructor:e,a="";if(o)if(i){let{description:l="",details:c="",examples:u=[]}=o.usage||{};l!==""&&(a+=hn.formatMarkdownish(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=` -`),(c!==""||u.length>0)&&(a+=`${this.format(t).header("Usage")} -`,a+=` -`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g} -`,f.length>0){a+=` -`,a+=`${hn.richFormat.header("Options")} -`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=` -`;for(let{definition:p,description:C}of f)a+=` ${this.format(t).bold(p.padEnd(h))} ${hn.formatMarkdownish(C,{format:this.format(t),paragraphs:!1})}`}if(c!==""&&(a+=` -`,a+=`${this.format(t).header("Details")} -`,a+=` -`,a+=hn.formatMarkdownish(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=` -`,a+=`${this.format(t).header("Examples")} -`;for(let[h,p]of u)a+=` -`,a+=hn.formatMarkdownish(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,` ${this.format(t).bold(n)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l} -`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>"u")continue;let p=typeof f.usage.category<"u"?hn.formatMarkdownish(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>"u"&&l.set(p,C=[]);let{usage:w}=this.getUsageByIndex(h);C.push({commandClass:f,usage:w})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,"en",{usage:"sort",caseFirst:"upper"})),u=typeof this.binaryLabel<"u",g=typeof this.binaryVersion<"u";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)} -`:a+=`${this.format(t).header(`${this.binaryVersion}`)} -`,a+=` ${this.format(t).bold(n)}${this.binaryName} -`):a+=`${this.format(t).bold(n)}${this.binaryName} -`;for(let f of c){let h=l.get(f).slice().sort((C,w)=>C.usage.localeCompare(w.usage,"en",{usage:"sort",caseFirst:"upper"})),p=f!==null?f.trim():"General commands";a+=` -`,a+=`${this.format(t).header(`${p}`)} -`;for(let{commandClass:C,usage:w}of h){let B=C.usage.description||"undocumented";a+=` -`,a+=` ${this.format(t).bold(w)} -`,a+=` ${hn.formatMarkdownish(B,{format:this.format(t),paragraphs:!1})}`}}a+=` -`,a+=hn.formatMarkdownish("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[bG])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o="",a=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");a==="Error"&&(a="Internal Error"),o+=`${this.format(n).error(a)}: ${e.message} -`;let l=e.clipanion;return typeof l<"u"?l.type==="usage"&&(o+=` -`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\n/,"")} -`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:OA.defaultContext.colorDepth>1)?hn.richFormat:hn.textFormat}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};OA.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:"getColorDepth"in BG.default.WriteStream.prototype?BG.default.WriteStream.prototype.getColorDepth():pme()};var QG;function dme(r){let e=QG;if(typeof e>"u"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return SG;let{AsyncLocalStorage:t}=J("async_hooks");e=QG=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function SG(r){return r()}Vv.Cli=OA});var xG=y(Xv=>{"use strict";Object.defineProperty(Xv,"__esModule",{value:!0});var Cme=bc(),cy=class extends Cme.Command{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};cy.paths=[["--clipanion=definitions"]];Xv.DefinitionsCommand=cy});var PG=y(_v=>{"use strict";Object.defineProperty(_v,"__esModule",{value:!0});var mme=bc(),uy=class extends mme.Command{async execute(){this.context.stdout.write(this.cli.usage())}};uy.paths=[["-h"],["--help"]];_v.HelpCommand=uy});var DG=y(Zv=>{"use strict";Object.defineProperty(Zv,"__esModule",{value:!0});var Eme=bc(),gy=class extends Eme.Command{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};gy.paths=[["-v"],["--version"]];Zv.VersionCommand=gy});var kG=y(Rd=>{"use strict";Object.defineProperty(Rd,"__esModule",{value:!0});var Ime=xG(),yme=PG(),wme=DG();Rd.DefinitionsCommand=Ime.DefinitionsCommand;Rd.HelpCommand=yme.HelpCommand;Rd.VersionCommand=wme.VersionCommand});var FG=y($v=>{"use strict";Object.defineProperty($v,"__esModule",{value:!0});var RG=va();function Bme(r,e,t){let[i,n]=RG.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return RG.makeCommandOption({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<"u"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}$v.Array=Bme});var TG=y(ex=>{"use strict";Object.defineProperty(ex,"__esModule",{value:!0});var NG=va();function bme(r,e,t){let[i,n]=NG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return NG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}ex.Boolean=bme});var OG=y(tx=>{"use strict";Object.defineProperty(tx,"__esModule",{value:!0});var LG=va();function Qme(r,e,t){let[i,n]=LG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return LG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}tx.Counter=Qme});var MG=y(rx=>{"use strict";Object.defineProperty(rx,"__esModule",{value:!0});var Sme=va();function vme(r={}){return Sme.makeCommandOption({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}rx.Proxy=vme});var UG=y(ix=>{"use strict";Object.defineProperty(ix,"__esModule",{value:!0});var xme=va(),Pme=ly();function Dme(r={}){return xme.makeCommandOption({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Pme.NoLimits||a.extra===!1&&oo)}})}ix.Rest=Dme});var KG=y(nx=>{"use strict";Object.defineProperty(nx,"__esModule",{value:!0});var Fd=va(),kme=ly();function Rme(r,e,t){let[i,n]=Fd.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return Fd.makeCommandOption({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f=="string"?Fd.applyValidator(g!=null?g:c,f,n.validator):f}})}function Fme(r={}){let{required:e=!0}=r;return Fd.makeCommandOption({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o{"use strict";Object.defineProperty(pn,"__esModule",{value:!0});var lf=va(),Tme=FG(),Lme=TG(),Ome=OG(),Mme=MG(),Ume=UG(),Kme=KG();pn.applyValidator=lf.applyValidator;pn.cleanValidationError=lf.cleanValidationError;pn.formatError=lf.formatError;pn.isOptionSymbol=lf.isOptionSymbol;pn.makeCommandOption=lf.makeCommandOption;pn.rerouteArguments=lf.rerouteArguments;pn.Array=Tme.Array;pn.Boolean=Lme.Boolean;pn.Counter=Ome.Counter;pn.Proxy=Mme.Proxy;pn.Rest=Ume.Rest;pn.String=Kme.String});var Xe=y(MA=>{"use strict";Object.defineProperty(MA,"__esModule",{value:!0});var Hme=iy(),Gme=bc(),Yme=jv(),jme=vG(),qme=kG(),Jme=HG();MA.UsageError=Hme.UsageError;MA.Command=Gme.Command;MA.formatMarkdownish=Yme.formatMarkdownish;MA.Cli=jme.Cli;MA.Builtins=qme;MA.Option=Jme});var YG=y((J$e,GG)=>{"use strict";GG.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var cf=y((W$e,sx)=>{"use strict";var Wme=YG(),jG=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Wme(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};sx.exports=jG;sx.exports.default=jG});var Nd=y((V$e,qG)=>{var zme="2.0.0",Vme=Number.MAX_SAFE_INTEGER||9007199254740991,Xme=16;qG.exports={SEMVER_SPEC_VERSION:zme,MAX_LENGTH:256,MAX_SAFE_INTEGER:Vme,MAX_SAFE_COMPONENT_LENGTH:Xme}});var Td=y((X$e,JG)=>{var _me=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};JG.exports=_me});var Sc=y((KA,WG)=>{var{MAX_SAFE_COMPONENT_LENGTH:ox}=Nd(),Zme=Td();KA=WG.exports={};var $me=KA.re=[],_e=KA.src=[],Ze=KA.t={},eEe=0,St=(r,e,t)=>{let i=eEe++;Zme(i,e),Ze[r]=i,_e[i]=e,$me[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${_e[Ze.NUMERICIDENTIFIER]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${_e[Ze.NUMERICIDENTIFIERLOOSE]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${_e[Ze.PRERELEASEIDENTIFIER]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${_e[Ze.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${_e[Ze.BUILDIDENTIFIER]}(?:\\.${_e[Ze.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${_e[Ze.MAINVERSION]}${_e[Ze.PRERELEASE]}?${_e[Ze.BUILD]}?`);St("FULL",`^${_e[Ze.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${_e[Ze.MAINVERSIONLOOSE]}${_e[Ze.PRERELEASELOOSE]}?${_e[Ze.BUILD]}?`);St("LOOSE",`^${_e[Ze.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${_e[Ze.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${_e[Ze.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:${_e[Ze.PRERELEASE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:${_e[Ze.PRERELEASELOOSE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${ox}})(?:\\.(\\d{1,${ox}}))?(?:\\.(\\d{1,${ox}}))?(?:$|[^\\d])`);St("COERCERTL",_e[Ze.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${_e[Ze.LONETILDE]}\\s+`,!0);KA.tildeTrimReplace="$1~";St("TILDE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${_e[Ze.LONECARET]}\\s+`,!0);KA.caretTrimReplace="$1^";St("CARET",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]}|${_e[Ze.XRANGEPLAIN]})`,!0);KA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${_e[Ze.XRANGEPLAIN]})\\s+-\\s+(${_e[Ze.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${_e[Ze.XRANGEPLAINLOOSE]})\\s+-\\s+(${_e[Ze.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var Ld=y((_$e,zG)=>{var tEe=["includePrerelease","loose","rtl"],rEe=r=>r?typeof r!="object"?{loose:!0}:tEe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};zG.exports=rEe});var hy=y((Z$e,_G)=>{var VG=/^[0-9]+$/,XG=(r,e)=>{let t=VG.test(r),i=VG.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rXG(e,r);_G.exports={compareIdentifiers:XG,rcompareIdentifiers:iEe}});var Oi=y(($$e,tY)=>{var py=Td(),{MAX_LENGTH:ZG,MAX_SAFE_INTEGER:dy}=Nd(),{re:$G,t:eY}=Sc(),nEe=Ld(),{compareIdentifiers:Od}=hy(),Kn=class{constructor(e,t){if(t=nEe(t),e instanceof Kn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>ZG)throw new TypeError(`version is longer than ${ZG} characters`);py("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?$G[eY.LOOSE]:$G[eY.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>dy||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dy||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dy||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};tY.exports=Kn});var vc=y((eet,sY)=>{var{MAX_LENGTH:sEe}=Nd(),{re:rY,t:iY}=Sc(),nY=Oi(),oEe=Ld(),aEe=(r,e)=>{if(e=oEe(e),r instanceof nY)return r;if(typeof r!="string"||r.length>sEe||!(e.loose?rY[iY.LOOSE]:rY[iY.FULL]).test(r))return null;try{return new nY(r,e)}catch{return null}};sY.exports=aEe});var aY=y((tet,oY)=>{var AEe=vc(),lEe=(r,e)=>{let t=AEe(r,e);return t?t.version:null};oY.exports=lEe});var lY=y((ret,AY)=>{var cEe=vc(),uEe=(r,e)=>{let t=cEe(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};AY.exports=uEe});var uY=y((iet,cY)=>{var gEe=Oi(),fEe=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new gEe(r,t).inc(e,i).version}catch{return null}};cY.exports=fEe});var os=y((net,fY)=>{var gY=Oi(),hEe=(r,e,t)=>new gY(r,t).compare(new gY(e,t));fY.exports=hEe});var Cy=y((set,hY)=>{var pEe=os(),dEe=(r,e,t)=>pEe(r,e,t)===0;hY.exports=dEe});var CY=y((oet,dY)=>{var pY=vc(),CEe=Cy(),mEe=(r,e)=>{if(CEe(r,e))return null;{let t=pY(r),i=pY(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};dY.exports=mEe});var EY=y((aet,mY)=>{var EEe=Oi(),IEe=(r,e)=>new EEe(r,e).major;mY.exports=IEe});var yY=y((Aet,IY)=>{var yEe=Oi(),wEe=(r,e)=>new yEe(r,e).minor;IY.exports=wEe});var BY=y((cet,wY)=>{var BEe=Oi(),bEe=(r,e)=>new BEe(r,e).patch;wY.exports=bEe});var QY=y((uet,bY)=>{var QEe=vc(),SEe=(r,e)=>{let t=QEe(r,e);return t&&t.prerelease.length?t.prerelease:null};bY.exports=SEe});var vY=y((get,SY)=>{var vEe=os(),xEe=(r,e,t)=>vEe(e,r,t);SY.exports=xEe});var PY=y((fet,xY)=>{var PEe=os(),DEe=(r,e)=>PEe(r,e,!0);xY.exports=DEe});var my=y((het,kY)=>{var DY=Oi(),kEe=(r,e,t)=>{let i=new DY(r,t),n=new DY(e,t);return i.compare(n)||i.compareBuild(n)};kY.exports=kEe});var FY=y((pet,RY)=>{var REe=my(),FEe=(r,e)=>r.sort((t,i)=>REe(t,i,e));RY.exports=FEe});var TY=y((det,NY)=>{var NEe=my(),TEe=(r,e)=>r.sort((t,i)=>NEe(i,t,e));NY.exports=TEe});var Md=y((Cet,LY)=>{var LEe=os(),OEe=(r,e,t)=>LEe(r,e,t)>0;LY.exports=OEe});var Ey=y((met,OY)=>{var MEe=os(),UEe=(r,e,t)=>MEe(r,e,t)<0;OY.exports=UEe});var ax=y((Eet,MY)=>{var KEe=os(),HEe=(r,e,t)=>KEe(r,e,t)!==0;MY.exports=HEe});var Iy=y((Iet,UY)=>{var GEe=os(),YEe=(r,e,t)=>GEe(r,e,t)>=0;UY.exports=YEe});var yy=y((yet,KY)=>{var jEe=os(),qEe=(r,e,t)=>jEe(r,e,t)<=0;KY.exports=qEe});var Ax=y((wet,HY)=>{var JEe=Cy(),WEe=ax(),zEe=Md(),VEe=Iy(),XEe=Ey(),_Ee=yy(),ZEe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return JEe(r,t,i);case"!=":return WEe(r,t,i);case">":return zEe(r,t,i);case">=":return VEe(r,t,i);case"<":return XEe(r,t,i);case"<=":return _Ee(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};HY.exports=ZEe});var YY=y((Bet,GY)=>{var $Ee=Oi(),eIe=vc(),{re:wy,t:By}=Sc(),tIe=(r,e)=>{if(r instanceof $Ee)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(wy[By.COERCE]);else{let i;for(;(i=wy[By.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),wy[By.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;wy[By.COERCERTL].lastIndex=-1}return t===null?null:eIe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};GY.exports=tIe});var qY=y((bet,jY)=>{"use strict";jY.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var Ud=y((Qet,JY)=>{"use strict";JY.exports=Ht;Ht.Node=xc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var sIe=Ud(),Pc=Symbol("max"),Pa=Symbol("length"),uf=Symbol("lengthCalculator"),Hd=Symbol("allowStale"),Dc=Symbol("maxAge"),xa=Symbol("dispose"),WY=Symbol("noDisposeOnSet"),Ii=Symbol("lruList"),zs=Symbol("cache"),VY=Symbol("updateAgeOnGet"),lx=()=>1,ux=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[Pc]=e.max||1/0,i=e.length||lx;if(this[uf]=typeof i!="function"?lx:i,this[Hd]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Dc]=e.maxAge||0,this[xa]=e.dispose,this[WY]=e.noDisposeOnSet||!1,this[VY]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[Pc]=e||1/0,Kd(this)}get max(){return this[Pc]}set allowStale(e){this[Hd]=!!e}get allowStale(){return this[Hd]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Dc]=e,Kd(this)}get maxAge(){return this[Dc]}set lengthCalculator(e){typeof e!="function"&&(e=lx),e!==this[uf]&&(this[uf]=e,this[Pa]=0,this[Ii].forEach(t=>{t.length=this[uf](t.value,t.key),this[Pa]+=t.length})),Kd(this)}get lengthCalculator(){return this[uf]}get length(){return this[Pa]}get itemCount(){return this[Ii].length}rforEach(e,t){t=t||this;for(let i=this[Ii].tail;i!==null;){let n=i.prev;zY(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[Ii].head;i!==null;){let n=i.next;zY(this,e,i,t),i=n}}keys(){return this[Ii].toArray().map(e=>e.key)}values(){return this[Ii].toArray().map(e=>e.value)}reset(){this[xa]&&this[Ii]&&this[Ii].length&&this[Ii].forEach(e=>this[xa](e.key,e.value)),this[zs]=new Map,this[Ii]=new sIe,this[Pa]=0}dump(){return this[Ii].map(e=>by(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Ii]}set(e,t,i){if(i=i||this[Dc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[uf](t,e);if(this[zs].has(e)){if(s>this[Pc])return gf(this,this[zs].get(e)),!1;let l=this[zs].get(e).value;return this[xa]&&(this[WY]||this[xa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Pa]+=s-l.length,l.length=s,this.get(e),Kd(this),!0}let o=new gx(e,t,s,n,i);return o.length>this[Pc]?(this[xa]&&this[xa](e,t),!1):(this[Pa]+=o.length,this[Ii].unshift(o),this[zs].set(e,this[Ii].head),Kd(this),!0)}has(e){if(!this[zs].has(e))return!1;let t=this[zs].get(e).value;return!by(this,t)}get(e){return cx(this,e,!0)}peek(e){return cx(this,e,!1)}pop(){let e=this[Ii].tail;return e?(gf(this,e),e.value):null}del(e){gf(this,this[zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[zs].forEach((e,t)=>cx(this,t,!1))}},cx=(r,e,t)=>{let i=r[zs].get(e);if(i){let n=i.value;if(by(r,n)){if(gf(r,i),!r[Hd])return}else t&&(r[VY]&&(i.value.now=Date.now()),r[Ii].unshiftNode(i));return n.value}},by=(r,e)=>{if(!e||!e.maxAge&&!r[Dc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[Dc]&&t>r[Dc]},Kd=r=>{if(r[Pa]>r[Pc])for(let e=r[Ii].tail;r[Pa]>r[Pc]&&e!==null;){let t=e.prev;gf(r,e),e=t}},gf=(r,e)=>{if(e){let t=e.value;r[xa]&&r[xa](t.key,t.value),r[Pa]-=t.length,r[zs].delete(t.key),r[Ii].removeNode(e)}},gx=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},zY=(r,e,t,i)=>{let n=t.value;by(r,n)&&(gf(r,t),r[Hd]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};XY.exports=ux});var as=y((xet,tj)=>{var kc=class{constructor(e,t){if(t=aIe(t),e instanceof kc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new kc(e.raw,t);if(e instanceof fx)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!$Y(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&gIe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=ZY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[Qi.HYPHENRANGELOOSE]:Mi[Qi.HYPHENRANGE];e=e.replace(o,wIe(this.options.includePrerelease)),jr("hyphen replace",e),e=e.replace(Mi[Qi.COMPARATORTRIM],lIe),jr("comparator trim",e,Mi[Qi.COMPARATORTRIM]),e=e.replace(Mi[Qi.TILDETRIM],cIe),e=e.replace(Mi[Qi.CARETTRIM],uIe),e=e.split(/\s+/).join(" ");let a=s?Mi[Qi.COMPARATORLOOSE]:Mi[Qi.COMPARATOR],l=e.split(" ").map(f=>fIe(f,this.options)).join(" ").split(/\s+/).map(f=>yIe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new fx(f,this.options)),c=l.length,u=new Map;for(let f of l){if($Y(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return ZY.set(i,g),g}intersects(e,t){if(!(e instanceof kc))throw new TypeError("a Range is required");return this.set.some(i=>ej(i,t)&&e.set.some(n=>ej(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new AIe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",gIe=r=>r.value==="",ej=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},fIe=(r,e)=>(jr("comp",r,e),r=dIe(r,e),jr("caret",r),r=hIe(r,e),jr("tildes",r),r=mIe(r,e),jr("xrange",r),r=IIe(r,e),jr("stars",r),r),Xi=r=>!r||r.toLowerCase()==="x"||r==="*",hIe=(r,e)=>r.trim().split(/\s+/).map(t=>pIe(t,e)).join(" "),pIe=(r,e)=>{let t=e.loose?Mi[Qi.TILDELOOSE]:Mi[Qi.TILDE];return r.replace(t,(i,n,s,o,a)=>{jr("tilde",r,i,n,s,o,a);let l;return Xi(n)?l="":Xi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Xi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(jr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,jr("tilde return",l),l})},dIe=(r,e)=>r.trim().split(/\s+/).map(t=>CIe(t,e)).join(" "),CIe=(r,e)=>{jr("caret",r,e);let t=e.loose?Mi[Qi.CARETLOOSE]:Mi[Qi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{jr("caret",r,n,s,o,a,l);let c;return Xi(s)?c="":Xi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Xi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(jr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(jr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),jr("caret return",c),c})},mIe=(r,e)=>(jr("replaceXRanges",r,e),r.split(/\s+/).map(t=>EIe(t,e)).join(" ")),EIe=(r,e)=>{r=r.trim();let t=e.loose?Mi[Qi.XRANGELOOSE]:Mi[Qi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{jr("xRange",r,i,n,s,o,a,l);let c=Xi(s),u=c||Xi(o),g=u||Xi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),jr("xRange return",i),i})},IIe=(r,e)=>(jr("replaceStars",r,e),r.trim().replace(Mi[Qi.STAR],"")),yIe=(r,e)=>(jr("replaceGTE0",r,e),r.trim().replace(Mi[e.includePrerelease?Qi.GTE0PRE:Qi.GTE0],"")),wIe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Xi(i)?t="":Xi(n)?t=`>=${i}.0.0${r?"-0":""}`:Xi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Xi(c)?l="":Xi(u)?l=`<${+c+1}.0.0-0`:Xi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),BIe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Gd=y((Pet,oj)=>{var Yd=Symbol("SemVer ANY"),ff=class{static get ANY(){return Yd}constructor(e,t){if(t=bIe(t),e instanceof ff){if(e.loose===!!t.loose)return e;e=e.value}px("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Yd?this.value="":this.value=this.operator+this.semver.version,px("comp",this)}parse(e){let t=this.options.loose?rj[ij.COMPARATORLOOSE]:rj[ij.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new nj(i[2],this.options.loose):this.semver=Yd}toString(){return this.value}test(e){if(px("Comparator.test",e,this.options.loose),this.semver===Yd||e===Yd)return!0;if(typeof e=="string")try{e=new nj(e,this.options)}catch{return!1}return hx(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof ff))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new sj(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new sj(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=hx(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=hx(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};oj.exports=ff;var bIe=Ld(),{re:rj,t:ij}=Sc(),hx=Ax(),px=Td(),nj=Oi(),sj=as()});var jd=y((Det,aj)=>{var QIe=as(),SIe=(r,e,t)=>{try{e=new QIe(e,t)}catch{return!1}return e.test(r)};aj.exports=SIe});var lj=y((ket,Aj)=>{var vIe=as(),xIe=(r,e)=>new vIe(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));Aj.exports=xIe});var uj=y((Ret,cj)=>{var PIe=Oi(),DIe=as(),kIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new DIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new PIe(i,t))}),i};cj.exports=kIe});var fj=y((Fet,gj)=>{var RIe=Oi(),FIe=as(),NIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new FIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new RIe(i,t))}),i};gj.exports=NIe});var dj=y((Net,pj)=>{var dx=Oi(),TIe=as(),hj=Md(),LIe=(r,e)=>{r=new TIe(r,e);let t=new dx("0.0.0");if(r.test(t)||(t=new dx("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new dx(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||hj(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||hj(t,s))&&(t=s)}return t&&r.test(t)?t:null};pj.exports=LIe});var mj=y((Tet,Cj)=>{var OIe=as(),MIe=(r,e)=>{try{return new OIe(r,e).range||"*"}catch{return null}};Cj.exports=MIe});var Qy=y((Let,wj)=>{var UIe=Oi(),yj=Gd(),{ANY:KIe}=yj,HIe=as(),GIe=jd(),Ej=Md(),Ij=Ey(),YIe=yy(),jIe=Iy(),qIe=(r,e,t,i)=>{r=new UIe(r,i),e=new HIe(e,i);let n,s,o,a,l;switch(t){case">":n=Ej,s=YIe,o=Ij,a=">",l=">=";break;case"<":n=Ij,s=jIe,o=Ej,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(GIe(r,e,i))return!1;for(let c=0;c{h.semver===KIe&&(h=new yj(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};wj.exports=qIe});var bj=y((Oet,Bj)=>{var JIe=Qy(),WIe=(r,e,t)=>JIe(r,e,">",t);Bj.exports=WIe});var Sj=y((Met,Qj)=>{var zIe=Qy(),VIe=(r,e,t)=>zIe(r,e,"<",t);Qj.exports=VIe});var Pj=y((Uet,xj)=>{var vj=as(),XIe=(r,e,t)=>(r=new vj(r,t),e=new vj(e,t),r.intersects(e));xj.exports=XIe});var kj=y((Ket,Dj)=>{var _Ie=jd(),ZIe=os();Dj.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>ZIe(u,g,t));for(let u of o)_Ie(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var Rj=as(),Sy=Gd(),{ANY:Cx}=Sy,qd=jd(),mx=os(),$Ie=(r,e,t={})=>{if(r===e)return!0;r=new Rj(r,t),e=new Rj(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=eye(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},eye=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===Cx){if(e.length===1&&e[0].semver===Cx)return!0;t.includePrerelease?r=[new Sy(">=0.0.0-0")]:r=[new Sy(">=0.0.0")]}if(e.length===1&&e[0].semver===Cx){if(t.includePrerelease)return!0;e=[new Sy(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=Fj(n,h,t):h.operator==="<"||h.operator==="<="?s=Nj(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=mx(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!qd(h,String(n),t)||s&&!qd(h,String(s),t))return null;for(let p of e)if(!qd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=Fj(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!qd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=Nj(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!qd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},Fj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},Nj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};Tj.exports=$Ie});var $r=y((Get,Oj)=>{var Ex=Sc();Oj.exports={re:Ex.re,src:Ex.src,tokens:Ex.t,SEMVER_SPEC_VERSION:Nd().SEMVER_SPEC_VERSION,SemVer:Oi(),compareIdentifiers:hy().compareIdentifiers,rcompareIdentifiers:hy().rcompareIdentifiers,parse:vc(),valid:aY(),clean:lY(),inc:uY(),diff:CY(),major:EY(),minor:yY(),patch:BY(),prerelease:QY(),compare:os(),rcompare:vY(),compareLoose:PY(),compareBuild:my(),sort:FY(),rsort:TY(),gt:Md(),lt:Ey(),eq:Cy(),neq:ax(),gte:Iy(),lte:yy(),cmp:Ax(),coerce:YY(),Comparator:Gd(),Range:as(),satisfies:jd(),toComparators:lj(),maxSatisfying:uj(),minSatisfying:fj(),minVersion:dj(),validRange:mj(),outside:Qy(),gtr:bj(),ltr:Sj(),intersects:Pj(),simplifyRange:kj(),subset:Lj()}});var Ix=y(vy=>{"use strict";Object.defineProperty(vy,"__esModule",{value:!0});vy.VERSION=void 0;vy.VERSION="9.1.0"});var Gt=y((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof xy=="object"&&xy.exports?xy.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:Mj,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var w={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(w,"global");break;case"i":o(w,"ignoreCase");break;case"m":o(w,"multiLine");break;case"u":o(w,"unicode");break;case"y":o(w,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:w,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var w=this.disjunction();return this.consumeChar(")"),{type:C,value:w,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,w=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(w),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` -`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` -`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var w=this.classAtom(),B=w.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(w){C.push(w)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` -`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var w=p[C];p.hasOwnProperty(C)&&(w.type!==void 0?this.visit(w):Array.isArray(w)&&w.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var ky=y(hf=>{"use strict";Object.defineProperty(hf,"__esModule",{value:!0});hf.clearRegExpParserCache=hf.getRegExpAst=void 0;var tye=Py(),Dy={},rye=new tye.RegExpParser;function iye(r){var e=r.toString();if(Dy.hasOwnProperty(e))return Dy[e];var t=rye.pattern(e);return Dy[e]=t,t}hf.getRegExpAst=iye;function nye(){Dy={}}hf.clearRegExpParserCache=nye});var Yj=y(dn=>{"use strict";var sye=dn&&dn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dn,"__esModule",{value:!0});dn.canMatchCharCode=dn.firstCharOptimizedIndices=dn.getOptimizedStartCodesIndices=dn.failedOptimizationPrefixMsg=void 0;var Kj=Py(),As=Gt(),Hj=ky(),Da=wx(),Gj="Complement Sets are not supported for first char optimization";dn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: -`;function oye(r,e){e===void 0&&(e=!1);try{var t=(0,Hj.getRegExpAst)(r),i=Fy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===Gj)e&&(0,As.PRINT_WARNING)(""+dn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > -`)+` Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,As.PRINT_ERROR)(dn.failedOptimizationPrefixMsg+` -`+(" Failed parsing: < "+r.toString()+` > -`)+(" Using the regexp-to-ast library version: "+Kj.VERSION+` -`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}dn.getOptimizedStartCodesIndices=oye;function Fy(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=Da.minOptimizationVal)for(var f=u.from>=Da.minOptimizationVal?u.from:Da.minOptimizationVal,h=u.to,p=(0,Da.charCodeToOptimizedIndex)(f),C=(0,Da.charCodeToOptimizedIndex)(h),w=p;w<=C;w++)e[w]=w}}});break;case"Group":Fy(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&yx(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,As.values)(e)}dn.firstCharOptimizedIndices=Fy;function Ry(r,e,t){var i=(0,Da.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&aye(r,e)}function aye(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,Da.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,Da.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function Uj(r,e){return(0,As.find)(r.value,function(t){if(typeof t=="number")return(0,As.contains)(e,t);var i=t;return(0,As.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function yx(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,As.isArray)(r.value)?(0,As.every)(r.value,yx):yx(r.value):!1}var Aye=function(r){sye(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,As.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?Uj(t,this.targetCharCodes)===void 0&&(this.found=!0):Uj(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(Kj.BaseRegExpVisitor);function lye(r,e){if(e instanceof RegExp){var t=(0,Hj.getRegExpAst)(e),i=new Aye(r);return i.visit(t),i.found}else return(0,As.find)(e,function(n){return(0,As.contains)(r,n.charCodeAt(0))})!==void 0}dn.canMatchCharCode=lye});var wx=y(Je=>{"use strict";var jj=Je&&Je.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Je,"__esModule",{value:!0});Je.charCodeToOptimizedIndex=Je.minOptimizationVal=Je.buildLineBreakIssueMessage=Je.LineTerminatorOptimizedTester=Je.isShortPattern=Je.isCustomPattern=Je.cloneEmptyGroups=Je.performWarningRuntimeChecks=Je.performRuntimeChecks=Je.addStickyFlag=Je.addStartOfInput=Je.findUnreachablePatterns=Je.findModesThatDoNotExist=Je.findInvalidGroupType=Je.findDuplicatePatterns=Je.findUnsupportedFlags=Je.findStartOfInputAnchor=Je.findEmptyMatchRegExps=Je.findEndOfInputAnchor=Je.findInvalidPatterns=Je.findMissingPatterns=Je.validatePatterns=Je.analyzeTokenTypes=Je.enableSticky=Je.disableSticky=Je.SUPPORT_STICKY=Je.MODES=Je.DEFAULT_MODE=void 0;var qj=Py(),ir=Jd(),Se=Gt(),pf=Yj(),Jj=ky(),Do="PATTERN";Je.DEFAULT_MODE="defaultMode";Je.MODES="modes";Je.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function cye(){Je.SUPPORT_STICKY=!1}Je.disableSticky=cye;function uye(){Je.SUPPORT_STICKY=!0}Je.enableSticky=uye;function gye(r,e){e=(0,Se.defaults)(e,{useSticky:Je.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){wye()});var i;t("Reject Lexer.NA",function(){i=(0,Se.reject)(r,function(v){return v[Do]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,Se.map)(i,function(v){var D=v[Do];if((0,Se.isRegExp)(D)){var T=D.source;return T.length===1&&T!=="^"&&T!=="$"&&T!=="."&&!D.ignoreCase?T:T.length===2&&T[0]==="\\"&&!(0,Se.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],T[1])?T[1]:e.useSticky?Qx(D):bx(D)}else{if((0,Se.isFunction)(D))return n=!0,{exec:D};if((0,Se.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Qx(j):bx(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,Se.map)(i,function(v){return v.tokenTypeIdx}),a=(0,Se.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,Se.isString)(D))return D;if((0,Se.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,Se.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,Se.isArray)(D)?(0,Se.map)(D,function(H){return(0,Se.indexOf)(i,H)}):[(0,Se.indexOf)(i,D)];return T}}),c=(0,Se.map)(i,function(v){return v.PUSH_MODE}),u=(0,Se.map)(i,function(v){return(0,Se.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=oq(e.lineTerminatorCharacters);g=(0,Se.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,Se.map)(i,function(D){if((0,Se.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(nq(D,v)===!1)return(0,pf.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,Se.map)(i,vx),h=(0,Se.map)(s,iq),p=(0,Se.reduce)(i,function(v,D){var T=D.GROUP;return(0,Se.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,Se.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var w=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,Se.reduce)(i,function(v,D,T){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=Sx(H);Bx(v,j,C[T])}else if((0,Se.isArray)(D.START_CHARS_HINT)){var $;(0,Se.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=Sx(Z);$!==A&&($=A,Bx(v,A,C[T]))})}else if((0,Se.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)w=!1,e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. -`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,pf.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,Se.isEmpty)(V)&&(w=!1),(0,Se.forEach)(V,function(W){Bx(v,W,C[T])})}else e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. -`)+` This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),w=!1;return v},[])}),t("ArrayPacking",function(){B=(0,Se.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:w}}Je.analyzeTokenTypes=gye;function fye(r,e){var t=[],i=Wj(r);t=t.concat(i.errors);var n=zj(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(hye(s)),t=t.concat(eq(s)),t=t.concat(tq(s,e)),t=t.concat(rq(s)),t}Je.validatePatterns=fye;function hye(r){var e=[],t=(0,Se.filter)(r,function(i){return(0,Se.isRegExp)(i[Do])});return e=e.concat(Vj(t)),e=e.concat(_j(t)),e=e.concat(Zj(t)),e=e.concat($j(t)),e=e.concat(Xj(t)),e}function Wj(r){var e=(0,Se.filter)(r,function(n){return!(0,Se.has)(n,Do)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findMissingPatterns=Wj;function zj(r){var e=(0,Se.filter)(r,function(n){var s=n[Do];return!(0,Se.isRegExp)(s)&&!(0,Se.isFunction)(s)&&!(0,Se.has)(s,"exec")&&!(0,Se.isString)(s)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findInvalidPatterns=zj;var pye=/[^\\][\$]/;function Vj(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return pye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findEndOfInputAnchor=Vj;function Xj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n.test("")}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Je.findEmptyMatchRegExps=Xj;var dye=/[^\\[][\^]|^\^/;function _j(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return dye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findStartOfInputAnchor=_j;function Zj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Je.findUnsupportedFlags=Zj;function $j(r){var e=[],t=(0,Se.map)(r,function(s){return(0,Se.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,Se.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,Se.compact)(t);var i=(0,Se.filter)(t,function(s){return s.length>1}),n=(0,Se.map)(i,function(s){var o=(0,Se.map)(s,function(l){return l.name}),a=(0,Se.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Je.findDuplicatePatterns=$j;function eq(r){var e=(0,Se.filter)(r,function(i){if(!(0,Se.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,Se.isString)(n)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Je.findInvalidGroupType=eq;function tq(r,e){var t=(0,Se.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,Se.contains)(e,n.PUSH_MODE)}),i=(0,Se.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Je.findModesThatDoNotExist=tq;function rq(r){var e=[],t=(0,Se.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,Se.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,Se.isRegExp)(o)&&mye(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,Se.forEach)(r,function(i,n){(0,Se.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Je.findUnreachablePatterns=rq;function Cye(r,e){if((0,Se.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,Se.isFunction)(e))return e(r,0,[],{});if((0,Se.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function mye(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,Se.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function bx(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Je.addStartOfInput=bx;function Qx(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Je.addStickyFlag=Qx;function Eye(r,e,t){var i=[];return(0,Se.has)(r,Je.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.DEFAULT_MODE+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,Se.has)(r,Je.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.MODES+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,Se.has)(r,Je.MODES)&&(0,Se.has)(r,Je.DEFAULT_MODE)&&!(0,Se.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Je.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,Se.has)(r,Je.MODES)&&(0,Se.forEach)(r.modes,function(n,s){(0,Se.forEach)(n,function(o,a){(0,Se.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> -`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Je.performRuntimeChecks=Eye;function Iye(r,e,t){var i=[],n=!1,s=(0,Se.compact)((0,Se.flatten)((0,Se.mapValues)(r.modes,function(l){return l}))),o=(0,Se.reject)(s,function(l){return l[Do]===ir.Lexer.NA}),a=oq(t);return e&&(0,Se.forEach)(o,function(l){var c=nq(l,a);if(c!==!1){var u=sq(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,Se.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,pf.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. - This Lexer has been defined to track line and column information, - But none of the Token Types can be identified as matching a line terminator. - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Je.performWarningRuntimeChecks=Iye;function yye(r){var e={},t=(0,Se.keys)(r);return(0,Se.forEach)(t,function(i){var n=r[i];if((0,Se.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Je.cloneEmptyGroups=yye;function vx(r){var e=r.PATTERN;if((0,Se.isRegExp)(e))return!1;if((0,Se.isFunction)(e))return!0;if((0,Se.has)(e,"exec"))return!0;if((0,Se.isString)(e))return!1;throw Error("non exhaustive match")}Je.isCustomPattern=vx;function iq(r){return(0,Se.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Je.isShortPattern=iq;Je.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type -`)+(" Root cause: "+e.errMsg+`. -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. -`+(" The problem is in the <"+r.name+`> Token Type -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Je.buildLineBreakIssueMessage=sq;function oq(r){var e=(0,Se.map)(r,function(t){return(0,Se.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Bx(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Je.minOptimizationVal=256;var Ny=[];function Sx(r){return r255?255+~~(r/255):r}}});var df=y(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var ei=Gt();function Bye(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Bye;function bye(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=bye;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Qye(r){var e=aq(r);Aq(e),cq(e),lq(e),(0,ei.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Qye;function aq(r){for(var e=(0,ei.cloneArr)(r),t=r,i=!0;i;){t=(0,ei.compact)((0,ei.flatten)((0,ei.map)(t,function(s){return s.CATEGORIES})));var n=(0,ei.difference)(t,e);e=e.concat(n),(0,ei.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=aq;function Aq(r){(0,ei.forEach)(r,function(e){uq(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),xx(e)&&!(0,ei.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),xx(e)||(e.CATEGORIES=[]),gq(e)||(e.categoryMatches=[]),fq(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=Aq;function lq(r){(0,ei.forEach)(r,function(e){e.categoryMatches=[],(0,ei.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=lq;function cq(r){(0,ei.forEach)(r,function(e){Px([],e)})}Nt.assignCategoriesMapProp=cq;function Px(r,e){(0,ei.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,ei.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,ei.contains)(i,t)||Px(i,t)})}Nt.singleAssignCategoriesToksMap=Px;function uq(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=uq;function xx(r){return(0,ei.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=xx;function gq(r){return(0,ei.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=gq;function fq(r){return(0,ei.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=fq;function Sye(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.isTokenType=Sye});var Dx=y(Ty=>{"use strict";Object.defineProperty(Ty,"__esModule",{value:!0});Ty.defaultLexerErrorProvider=void 0;Ty.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var Jd=y(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});Rc.Lexer=Rc.LexerDefinitionErrorType=void 0;var Vs=wx(),nr=Gt(),vye=df(),xye=Dx(),Pye=ky(),Dye;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(Dye=Rc.LexerDefinitionErrorType||(Rc.LexerDefinitionErrorType={}));var Wd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:xye.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(Wd);var kye=function(){function r(e,t){var i=this;if(t===void 0&&(t=Wd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(Wd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===Wd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=Vs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===Wd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[Vs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[Vs.DEFAULT_MODE]=Vs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,Vs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,vye.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,Vs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(Vs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,Pye.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,w,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,Vs.cloneEmptyGroups)(this.emptyGroups),_=this.trackStartLines,L=this.config.lineTerminatorsPattern,N=0,ue=[],we=[],Te=[],Pe=[];Object.freeze(Pe);var Le=void 0;function se(){return ue}function Ae(dr){var Bi=(0,Vs.charCodeToOptimizedIndex)(dr),_n=we[Bi];return _n===void 0?Pe:_n}var be=function(dr){if(Te.length===1&&dr.tokenType.PUSH_MODE===void 0){var Bi=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(dr);Z.push({offset:dr.startOffset,line:dr.startLine!==void 0?dr.startLine:void 0,column:dr.startColumn!==void 0?dr.startColumn:void 0,length:dr.image.length,message:Bi})}else{Te.pop();var _n=(0,nr.last)(Te);ue=i.patternIdxToConfig[_n],we=i.charCodeToPatternIdxToConfig[_n],N=ue.length;var pa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;we&&pa?Le=Ae:Le=se}};function fe(dr){Te.push(dr),we=this.charCodeToPatternIdxToConfig[dr],ue=this.patternIdxToConfig[dr],N=ue.length,N=ue.length;var Bi=this.canModeBeOptimized[dr]&&this.config.safeMode===!1;we&&Bi?Le=Ae:Le=se}fe.call(this,t);for(var le;jc.length){c=a,u=g,le=tt;break}}}break}}if(c!==null){if(f=c.length,h=le.group,h!==void 0&&(p=le.tokenTypeIdx,C=this.createTokenInstance(c,j,p,le.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),_===!0&&le.canLineTerminator===!0){var It=0,Ur=void 0,oi=void 0;L.lastIndex=0;do Ur=L.test(c),Ur===!0&&(oi=L.lastIndex-1,It++);while(Ur===!0);It!==0&&(A=A+It,ae=f-oi,this.updateTokenEndLineColumnLocation(C,h,oi,It,A,ae,f))}this.handleModes(le,be,fe,C)}else{for(var pi=j,pr=A,di=ae,ai=!1;!ai&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();Rc.Lexer=kye});var HA=y(Si=>{"use strict";Object.defineProperty(Si,"__esModule",{value:!0});Si.tokenMatcher=Si.createTokenInstance=Si.EOF=Si.createToken=Si.hasTokenLabel=Si.tokenName=Si.tokenLabel=void 0;var Xs=Gt(),Rye=Jd(),kx=df();function Fye(r){return wq(r)?r.LABEL:r.name}Si.tokenLabel=Fye;function Nye(r){return r.name}Si.tokenName=Nye;function wq(r){return(0,Xs.isString)(r.LABEL)&&r.LABEL!==""}Si.hasTokenLabel=wq;var Tye="parent",hq="categories",pq="label",dq="group",Cq="push_mode",mq="pop_mode",Eq="longer_alt",Iq="line_breaks",yq="start_chars_hint";function Bq(r){return Lye(r)}Si.createToken=Bq;function Lye(r){var e=r.pattern,t={};if(t.name=r.name,(0,Xs.isUndefined)(e)||(t.PATTERN=e),(0,Xs.has)(r,Tye))throw`The parent property is no longer supported. -See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Xs.has)(r,hq)&&(t.CATEGORIES=r[hq]),(0,kx.augmentTokenTypes)([t]),(0,Xs.has)(r,pq)&&(t.LABEL=r[pq]),(0,Xs.has)(r,dq)&&(t.GROUP=r[dq]),(0,Xs.has)(r,mq)&&(t.POP_MODE=r[mq]),(0,Xs.has)(r,Cq)&&(t.PUSH_MODE=r[Cq]),(0,Xs.has)(r,Eq)&&(t.LONGER_ALT=r[Eq]),(0,Xs.has)(r,Iq)&&(t.LINE_BREAKS=r[Iq]),(0,Xs.has)(r,yq)&&(t.START_CHARS_HINT=r[yq]),t}Si.EOF=Bq({name:"EOF",pattern:Rye.Lexer.NA});(0,kx.augmentTokenTypes)([Si.EOF]);function Oye(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Si.createTokenInstance=Oye;function Mye(r,e){return(0,kx.tokenStructuredMatcher)(r,e)}Si.tokenMatcher=Mye});var Cn=y(Wt=>{"use strict";var ka=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var lr=Gt(),Uye=HA(),ko=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,lr.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=ko;var bq=function(r){ka(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(ko);Wt.NonTerminal=bq;var Qq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Rule=Qq;var Sq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Alternative=Sq;var vq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Option=vq;var xq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatory=xq;var Pq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatoryWithSeparator=Pq;var Dq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Repetition=Dq;var kq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionWithSeparator=kq;var Rq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(ko);Wt.Alternation=Rq;var Ly=function(){function r(e){this.idx=1,(0,lr.assign)(this,(0,lr.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=Ly;function Kye(r){return(0,lr.map)(r,zd)}Wt.serializeGrammar=Kye;function zd(r){function e(s){return(0,lr.map)(s,zd)}if(r instanceof bq){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,lr.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof Sq)return{type:"Alternative",definition:e(r.definition)};if(r instanceof vq)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof xq)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof Pq)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof kq)return{type:"RepetitionWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Dq)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof Rq)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof Ly){var i={type:"Terminal",name:r.terminalType.name,label:(0,Uye.tokenLabel)(r.terminalType),idx:r.idx};(0,lr.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,lr.isRegExp)(n)?n.source:n),i}else{if(r instanceof Qq)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=zd});var My=y(Oy=>{"use strict";Object.defineProperty(Oy,"__esModule",{value:!0});Oy.RestWalker=void 0;var Rx=Gt(),mn=Cn(),Hye=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Rx.forEach)(e.definition,function(n,s){var o=(0,Rx.drop)(e.definition,s+1);if(n instanceof mn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof mn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof mn.Alternative)i.walkFlat(n,o,t);else if(n instanceof mn.Option)i.walkOption(n,o,t);else if(n instanceof mn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof mn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof mn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof mn.Repetition)i.walkMany(n,o,t);else if(n instanceof mn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Rx.forEach)(e.definition,function(o){var a=new mn.Alternative({definition:[o]});n.walk(a,s)})},r}();Oy.RestWalker=Hye;function Fq(r,e,t){var i=[new mn.Option({definition:[new mn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Cf=y(Uy=>{"use strict";Object.defineProperty(Uy,"__esModule",{value:!0});Uy.GAstVisitor=void 0;var Ro=Cn(),Gye=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Ro.NonTerminal:return this.visitNonTerminal(t);case Ro.Alternative:return this.visitAlternative(t);case Ro.Option:return this.visitOption(t);case Ro.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Ro.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Ro.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Ro.Repetition:return this.visitRepetition(t);case Ro.Alternation:return this.visitAlternation(t);case Ro.Terminal:return this.visitTerminal(t);case Ro.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();Uy.GAstVisitor=Gye});var Xd=y(Ui=>{"use strict";var Yye=Ui&&Ui.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.collectMethods=Ui.DslMethodsCollectorVisitor=Ui.getProductionDslName=Ui.isBranchingProd=Ui.isOptionalProd=Ui.isSequenceProd=void 0;var Vd=Gt(),Qr=Cn(),jye=Cf();function qye(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Ui.isSequenceProd=qye;function Fx(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,Vd.some)(r.definition,function(i){return Fx(i,e)}):r instanceof Qr.NonTerminal&&(0,Vd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,Vd.every)(r.definition,function(i){return Fx(i,e)})):!1}Ui.isOptionalProd=Fx;function Jye(r){return r instanceof Qr.Alternation}Ui.isBranchingProd=Jye;function Wye(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Ui.getProductionDslName=Wye;var Nq=function(r){Yye(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(jye.GAstVisitor);Ui.DslMethodsCollectorVisitor=Nq;var Ky=new Nq;function zye(r){Ky.reset(),r.accept(Ky);var e=Ky.dslMethods;return Ky.reset(),e}Ui.collectMethods=zye});var Tx=y(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.firstForTerminal=Fo.firstForBranching=Fo.firstForSequence=Fo.first=void 0;var Hy=Gt(),Tq=Cn(),Nx=Xd();function Gy(r){if(r instanceof Tq.NonTerminal)return Gy(r.referencedRule);if(r instanceof Tq.Terminal)return Mq(r);if((0,Nx.isSequenceProd)(r))return Lq(r);if((0,Nx.isBranchingProd)(r))return Oq(r);throw Error("non exhaustive match")}Fo.first=Gy;function Lq(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Nx.isOptionalProd)(s),e=e.concat(Gy(s)),i=i+1,n=t.length>i;return(0,Hy.uniq)(e)}Fo.firstForSequence=Lq;function Oq(r){var e=(0,Hy.map)(r.definition,function(t){return Gy(t)});return(0,Hy.uniq)((0,Hy.flatten)(e))}Fo.firstForBranching=Oq;function Mq(r){return[r.terminalType]}Fo.firstForTerminal=Mq});var Lx=y(Yy=>{"use strict";Object.defineProperty(Yy,"__esModule",{value:!0});Yy.IN=void 0;Yy.IN="_~IN~_"});var Yq=y(ls=>{"use strict";var Vye=ls&&ls.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(ls,"__esModule",{value:!0});ls.buildInProdFollowPrefix=ls.buildBetweenProdsFollowPrefix=ls.computeAllProdsFollows=ls.ResyncFollowsWalker=void 0;var Xye=My(),_ye=Tx(),Uq=Gt(),Kq=Lx(),Zye=Cn(),Hq=function(r){Vye(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=Gq(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new Zye.Alternative({definition:o}),l=(0,_ye.first)(a);this.follows[s]=l},e}(Xye.RestWalker);ls.ResyncFollowsWalker=Hq;function $ye(r){var e={};return(0,Uq.forEach)(r,function(t){var i=new Hq(t).startWalking();(0,Uq.assign)(e,i)}),e}ls.computeAllProdsFollows=$ye;function Gq(r,e){return r.name+e+Kq.IN}ls.buildBetweenProdsFollowPrefix=Gq;function ewe(r){var e=r.terminalType.name;return e+r.idx+Kq.IN}ls.buildInProdFollowPrefix=ewe});var _d=y(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.defaultGrammarValidatorErrorProvider=Ra.defaultGrammarResolverErrorProvider=Ra.defaultParserErrorProvider=void 0;var mf=HA(),twe=Gt(),_s=Gt(),Ox=Cn(),jq=Xd();Ra.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,mf.hasTokenLabel)(e),o=s?"--> "+(0,mf.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,_s.first)(t).image,l=` -but found: '`+a+"'";if(n)return o+n+l;var c=(0,_s.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,_s.map)(c,function(h){return"["+(0,_s.map)(h,function(p){return(0,mf.tokenLabel)(p)}).join(", ")+"]"}),g=(0,_s.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: -`+g.join(` -`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,_s.first)(t).image,a=` -but found: '`+o+"'";if(i)return s+i+a;var l=(0,_s.map)(e,function(u){return"["+(0,_s.map)(u,function(g){return(0,mf.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: - `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ra.defaultParserErrorProvider);Ra.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+r.name+"<-";return t}};Ra.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Ox.Terminal?u.terminalType.name:u instanceof Ox.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,_s.first)(e),s=n.idx,o=(0,jq.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` - appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` -`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. -`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. -`)+`To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix -`+("in inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,jq.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. -This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. -`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: -`+(" inside <"+r.topLevelRule.name+`> Rule. - has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=twe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. -`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) -`)+(`without consuming any Tokens. The grammar path that causes this is: - `+i+` -`)+` To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Ox.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Wq=y(GA=>{"use strict";var rwe=GA&&GA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(GA,"__esModule",{value:!0});GA.GastRefResolverVisitor=GA.resolveGrammar=void 0;var iwe=Hn(),qq=Gt(),nwe=Cf();function swe(r,e){var t=new Jq(r,e);return t.resolveRefs(),t.errors}GA.resolveGrammar=swe;var Jq=function(r){rwe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,qq.forEach)((0,qq.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:iwe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(nwe.GAstVisitor);GA.GastRefResolverVisitor=Jq});var $d=y(Lr=>{"use strict";var Fc=Lr&&Lr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Lr,"__esModule",{value:!0});Lr.nextPossibleTokensAfter=Lr.possiblePathsFrom=Lr.NextTerminalAfterAtLeastOneSepWalker=Lr.NextTerminalAfterAtLeastOneWalker=Lr.NextTerminalAfterManySepWalker=Lr.NextTerminalAfterManyWalker=Lr.AbstractNextTerminalAfterProductionWalker=Lr.NextAfterTokenWalker=Lr.AbstractNextPossibleTokensWalker=void 0;var zq=My(),Ut=Gt(),owe=Tx(),Dt=Cn(),Vq=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Ut.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Ut.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Ut.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(zq.RestWalker);Lr.AbstractNextPossibleTokensWalker=Vq;var awe=function(r){Fc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new Dt.Alternative({definition:s});this.possibleTokTypes=(0,owe.first)(o),this.found=!0}},e}(Vq);Lr.NextAfterTokenWalker=awe;var Zd=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(zq.RestWalker);Lr.AbstractNextTerminalAfterProductionWalker=Zd;var Awe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManyWalker=Awe;var lwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManySepWalker=lwe;var cwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneWalker=cwe;var uwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneSepWalker=uwe;function Xq(r,e,t){t===void 0&&(t=[]),t=(0,Ut.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Ut.drop)(r,n+1))}function o(c){var u=Xq(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var _=B.definition[ge],L={idx:p,def:_.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w};g.push(L),g.push(o)}else if(B instanceof Dt.Alternative)g.push({idx:p,def:B.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w});else if(B instanceof Dt.Rule)g.push(fwe(B,p,C,w));else throw Error("non exhaustive match")}}return u}Lr.nextPossibleTokensAfter=gwe;function fwe(r,e,t,i){var n=(0,Ut.cloneArr)(t);n.push(r.name);var s=(0,Ut.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var eC=y(_t=>{"use strict";var $q=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),_q=$d(),hwe=My(),jy=df(),YA=Cn(),pwe=Cf(),li;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(li=_t.PROD_TYPE||(_t.PROD_TYPE={}));function dwe(r){if(r instanceof YA.Option)return li.OPTION;if(r instanceof YA.Repetition)return li.REPETITION;if(r instanceof YA.RepetitionMandatory)return li.REPETITION_MANDATORY;if(r instanceof YA.RepetitionMandatoryWithSeparator)return li.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof YA.RepetitionWithSeparator)return li.REPETITION_WITH_SEPARATOR;if(r instanceof YA.Alternation)return li.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=dwe;function Cwe(r,e,t,i,n,s){var o=tJ(r,e,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=Cwe;function mwe(r,e,t,i,n,s){var o=rJ(r,e,n,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=mwe;function Ewe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Hx=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),Sr=Gt(),No=Hn(),Gx=Xd(),Ef=eC(),bwe=$d(),Zs=Cn(),Yx=Cf();function Qwe(r,e,t,i,n){var s=er.map(r,function(h){return Swe(h,i)}),o=er.map(r,function(h){return jx(h,h,i)}),a=[],l=[],c=[];(0,Sr.every)(o,Sr.isEmpty)&&(a=(0,Sr.map)(r,function(h){return AJ(h,i)}),l=(0,Sr.map)(r,function(h){return lJ(h,e,i)}),c=gJ(r,e,i));var u=Pwe(r,t,i),g=(0,Sr.map)(r,function(h){return uJ(h,i)}),f=(0,Sr.map)(r,function(h){return aJ(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=Qwe;function Swe(r,e){var t=new oJ;r.accept(t);var i=t.allProductions,n=er.groupBy(i,nJ),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Gx.getProductionDslName)(l),g={message:c,type:No.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=sJ(l);return f&&(g.parameter=f),g});return o}function nJ(r){return(0,Gx.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+sJ(r)}zt.identifyProductionForDuplicates=nJ;function sJ(r){return r instanceof Zs.Terminal?r.terminalType.name:r instanceof Zs.NonTerminal?r.nonTerminalName:""}var oJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.OccurrenceValidationCollector=oJ;function aJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:No.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=aJ;function vwe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:No.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=vwe;function jx(r,e,t,i){i===void 0&&(i=[]);var n=[],s=tC(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:No.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),jx(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=jx;function tC(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof Zs.NonTerminal)e.push(t.referencedRule);else if(t instanceof Zs.Alternative||t instanceof Zs.Option||t instanceof Zs.RepetitionMandatory||t instanceof Zs.RepetitionMandatoryWithSeparator||t instanceof Zs.RepetitionWithSeparator||t instanceof Zs.Repetition)e=e.concat(tC(t.definition));else if(t instanceof Zs.Alternation)e=er.flatten(er.map(t.definition,function(o){return tC(o.definition)}));else if(!(t instanceof Zs.Terminal))throw Error("non exhaustive match");var i=(0,Gx.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(tC(s))}else return e}zt.getFirstNoneTerminal=tC;var qx=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Yx.GAstVisitor);function AJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,bwe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:No.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=AJ;function lJ(r,e,t){var i=new qx;r.accept(i);var n=i.alternations;n=(0,Sr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,Ef.getLookaheadPathsForOr)(l,r,c,a),g=xwe(u,a,r,t),f=fJ(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=lJ;var cJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.RepetionCollector=cJ;function uJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:No.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=uJ;function gJ(r,e,t){var i=[];return(0,Sr.forEach)(r,function(n){var s=new cJ;n.accept(s);var o=s.allProductions;(0,Sr.forEach)(o,function(a){var l=(0,Ef.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,Ef.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Sr.isEmpty)((0,Sr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:No.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=gJ;function xwe(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Sr.forEach)(l,function(u){var g=[c];(0,Sr.forEach)(r,function(f,h){c!==h&&(0,Ef.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,Ef.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Sr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:No.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function fJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(o,a,l){var c=(0,Sr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Sr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Sr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(If,"__esModule",{value:!0});If.validateGrammar=If.resolveGrammar=void 0;var Wx=Gt(),Dwe=Wq(),kwe=Jx(),hJ=_d();function Rwe(r){r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarResolverErrorProvider});var e={};return(0,Wx.forEach)(r.rules,function(t){e[t.name]=t}),(0,Dwe.resolveGrammar)(e,r.errMsgProvider)}If.resolveGrammar=Rwe;function Fwe(r){return r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarValidatorErrorProvider}),(0,kwe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}If.validateGrammar=Fwe});var yf=y(En=>{"use strict";var rC=En&&En.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(En,"__esModule",{value:!0});En.EarlyExitException=En.NotAllInputParsedException=En.NoViableAltException=En.MismatchedTokenException=En.isRecognitionException=void 0;var Nwe=Gt(),dJ="MismatchedTokenException",CJ="NoViableAltException",mJ="EarlyExitException",EJ="NotAllInputParsedException",IJ=[dJ,CJ,mJ,EJ];Object.freeze(IJ);function Twe(r){return(0,Nwe.contains)(IJ,r.name)}En.isRecognitionException=Twe;var qy=function(r){rC(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),Lwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=dJ,s}return e}(qy);En.MismatchedTokenException=Lwe;var Owe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=CJ,s}return e}(qy);En.NoViableAltException=Owe;var Mwe=function(r){rC(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=EJ,n}return e}(qy);En.NotAllInputParsedException=Mwe;var Uwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mJ,s}return e}(qy);En.EarlyExitException=Uwe});var Vx=y(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var Jy=HA(),cs=Gt(),Kwe=yf(),Hwe=Lx(),Gwe=Hn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function zx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=zx;zx.prototype=Error.prototype;var Ywe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,cs.has)(e,"recoveryEnabled")?e.recoveryEnabled:Gwe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=yJ)},r.prototype.getTokenToInsert=function(e){var t=(0,Jy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new Kwe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,cs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new zx("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,cs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,cs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,cs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,cs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,cs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,cs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,cs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[Jy.EOF];var t=e.ruleName+e.idxInCallingRule+Hwe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,Jy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,cs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,cs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,cs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Ywe;function yJ(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=Jy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=yJ});var Wy=y(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(zy,"__esModule",{value:!0});zy.LooksAhead=void 0;var Fa=eC(),$s=Gt(),wJ=Hn(),Na=Wy(),Nc=Xd(),qwe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,$s.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:wJ.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,$s.has)(e,"maxLookahead")?e.maxLookahead:wJ.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,$s.isES2015MapSupported)()?new Map:[],(0,$s.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,$s.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,Nc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,$s.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,Nc.getProductionDslName)(g)+f,function(){var h=(0,Fa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Na.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Na.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,$s.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_IDX,Fa.PROD_TYPE.REPETITION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Na.OPTION_IDX,Fa.PROD_TYPE.OPTION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_SEP_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_SEP_IDX,Fa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Fa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Na.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Fa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Fa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Na.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();zy.LooksAhead=qwe});var bJ=y(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});To.addNoneTerminalToCst=To.addTerminalToCst=To.setNodeLocationFull=To.setNodeLocationOnlyOffset=void 0;function Jwe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(jA,"__esModule",{value:!0});jA.defineNameProp=jA.functionName=jA.classNameFromInstance=void 0;var Xwe=Gt();function _we(r){return SJ(r.constructor)}jA.classNameFromInstance=_we;var QJ="name";function SJ(r){var e=r.name;return e||"anonymous"}jA.functionName=SJ;function Zwe(r,e){var t=Object.getOwnPropertyDescriptor(r,QJ);return(0,Xwe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,QJ,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}jA.defineNameProp=Zwe});var kJ=y(vi=>{"use strict";Object.defineProperty(vi,"__esModule",{value:!0});vi.validateRedundantMethods=vi.validateMissingCstMethods=vi.validateVisitor=vi.CstVisitorDefinitionError=vi.createBaseVisitorConstructorWithDefaults=vi.createBaseSemanticVisitorConstructor=vi.defaultVisit=void 0;var us=Gt(),iC=Xx();function vJ(r,e){for(var t=(0,us.keys)(r),i=t.length,n=0;n: - `+(""+s.join(` - -`).replace(/\n/g,` - `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}vi.createBaseSemanticVisitorConstructor=$we;function eBe(r,e,t){var i=function(){};(0,iC.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,us.forEach)(e,function(s){n[s]=vJ}),i.prototype=n,i.prototype.constructor=i,i}vi.createBaseVisitorConstructorWithDefaults=eBe;var _x;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(_x=vi.CstVisitorDefinitionError||(vi.CstVisitorDefinitionError={}));function xJ(r,e){var t=PJ(r,e),i=DJ(r,e);return t.concat(i)}vi.validateVisitor=xJ;function PJ(r,e){var t=(0,us.map)(e,function(i){if(!(0,us.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+" CST Visitor.",type:_x.MISSING_METHOD,methodName:i}});return(0,us.compact)(t)}vi.validateMissingCstMethods=PJ;var tBe=["constructor","visit","validateVisitor"];function DJ(r,e){var t=[];for(var i in r)(0,us.isFunction)(r[i])&&!(0,us.contains)(tBe,i)&&!(0,us.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+` CST Visitor -There is no Grammar Rule corresponding to this method's name. -`,type:_x.REDUNDANT_METHOD,methodName:i});return t}vi.validateRedundantMethods=DJ});var FJ=y(Vy=>{"use strict";Object.defineProperty(Vy,"__esModule",{value:!0});Vy.TreeBuilder=void 0;var wf=bJ(),ti=Gt(),RJ=kJ(),rBe=Hn(),iBe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,ti.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:rBe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ti.NOOP,this.cstFinallyStateUpdate=ti.NOOP,this.cstPostTerminal=ti.NOOP,this.cstPostNonTerminal=ti.NOOP,this.cstPostRule=ti.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationFull,this.setNodeLocationFromNode=wf.setNodeLocationFull,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=wf.setNodeLocationOnlyOffset,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=ti.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,ti.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,RJ.createBaseSemanticVisitorConstructor)(this.className,(0,ti.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,ti.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,RJ.createBaseVisitorConstructorWithDefaults)(this.className,(0,ti.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Vy.TreeBuilder=iBe});var TJ=y(Xy=>{"use strict";Object.defineProperty(Xy,"__esModule",{value:!0});Xy.LexerAdapter=void 0;var NJ=Hn(),nBe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):NJ.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?NJ.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Xy.LexerAdapter=nBe});var OJ=y(_y=>{"use strict";Object.defineProperty(_y,"__esModule",{value:!0});_y.RecognizerApi=void 0;var LJ=Gt(),sBe=yf(),Zx=Hn(),oBe=_d(),aBe=Jx(),ABe=Cn(),lBe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG),(0,LJ.contains)(this.definedRulesNames,e)){var n=oBe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Zx.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,aBe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,sBe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,ABe.serializeGrammar)((0,LJ.values)(this.gastProductionsCache))},r}();_y.RecognizerApi=lBe});var HJ=y($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.RecognizerEngine=void 0;var kr=Gt(),Gn=Wy(),Zy=yf(),MJ=eC(),Bf=$d(),UJ=Hn(),cBe=Vx(),KJ=HA(),nC=df(),uBe=Xx(),gBe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,uBe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=nC.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,kr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if((0,kr.isArray)(e)){if((0,kr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if((0,kr.isArray)(e))this.tokensMap=(0,kr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,kr.has)(e,"modes")&&(0,kr.every)((0,kr.flatten)((0,kr.values)(e.modes)),nC.isTokenType)){var i=(0,kr.flatten)((0,kr.values)(e.modes)),n=(0,kr.uniq)(i);this.tokensMap=(0,kr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,kr.isObject)(e))this.tokensMap=(0,kr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=KJ.EOF;var s=(0,kr.every)((0,kr.values)(e),function(o){return(0,kr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?nC.tokenStructuredMatcherNoCategories:nC.tokenStructuredMatcher,(0,nC.augmentTokenTypes)((0,kr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,kr.has)(i,"resyncEnabled")?i.resyncEnabled:UJ.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,kr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:UJ.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,kr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new Zy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,Zy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Zy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===cBe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,kr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),KJ.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();$y.RecognizerEngine=gBe});var YJ=y(ew=>{"use strict";Object.defineProperty(ew,"__esModule",{value:!0});ew.ErrorHandler=void 0;var $x=yf(),eP=Gt(),GJ=eC(),fBe=Hn(),hBe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,eP.has)(e,"errorMessageProvider")?e.errorMessageProvider:fBe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,$x.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,eP.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,eP.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,GJ.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new $x.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,GJ.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new $x.NoViableAltException(c,this.LA(1),l))},r}();ew.ErrorHandler=hBe});var JJ=y(tw=>{"use strict";Object.defineProperty(tw,"__esModule",{value:!0});tw.ContentAssist=void 0;var jJ=$d(),qJ=Gt(),pBe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,qJ.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,jJ.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,qJ.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new jJ.NextAfterTokenWalker(n,e).startWalking();return s},r}();tw.ContentAssist=pBe});var e3=y(nw=>{"use strict";Object.defineProperty(nw,"__esModule",{value:!0});nw.GastRecorder=void 0;var In=Gt(),Lo=Cn(),dBe=Jd(),XJ=df(),_J=HA(),CBe=Hn(),mBe=Wy(),iw={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(iw);var WJ=!0,zJ=Math.pow(2,mBe.BITS_FOR_OCCURRENCE_IDX)-1,ZJ=(0,_J.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:dBe.Lexer.NA});(0,XJ.augmentTokenTypes)([ZJ]);var $J=(0,_J.createTokenInstance)(ZJ,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze($J);var EBe={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},IBe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return CBe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Lo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return sC.call(this,Lo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatoryWithSeparator,t,e,WJ)},r.prototype.manyInternalRecord=function(e,t){sC.call(this,Lo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionWithSeparator,t,e,WJ)},r.prototype.orInternalRecord=function(e,t){return yBe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(rw(t),!e||(0,In.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=e.ruleName,a=new Lo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?EBe:iw},r.prototype.consumeInternalRecord=function(e,t,i){if(rw(t),!(0,XJ.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=new Lo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),$J},r}();nw.GastRecorder=IBe;function sC(r,e,t,i){i===void 0&&(i=!1),rw(t);var n=(0,In.peek)(this.recordingProdStack),s=(0,In.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,In.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),iw}function yBe(r,e){var t=this;rw(e);var i=(0,In.peek)(this.recordingProdStack),n=(0,In.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Lo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,In.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,In.some)(s,function(l){return(0,In.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,In.forEach)(s,function(l){var c=new Lo.Alternative({definition:[]});o.definition.push(c),(0,In.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,In.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),iw}function VJ(r){return r===0?"":""+r}function rw(r){if(r<0||r>zJ){var e=new Error("Invalid DSL Method idx value: <"+r+`> - `+("Idx value must be a none negative value smaller than "+(zJ+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var r3=y(sw=>{"use strict";Object.defineProperty(sw,"__esModule",{value:!0});sw.PerformanceTracer=void 0;var t3=Gt(),wBe=Hn(),BBe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,t3.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=wBe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,t3.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();sw.PerformanceTracer=BBe});var i3=y(ow=>{"use strict";Object.defineProperty(ow,"__esModule",{value:!0});ow.applyMixins=void 0;function bBe(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}ow.applyMixins=bBe});var Hn=y(Cr=>{"use strict";var o3=Cr&&Cr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cr,"__esModule",{value:!0});Cr.EmbeddedActionsParser=Cr.CstParser=Cr.Parser=Cr.EMPTY_ALT=Cr.ParserDefinitionErrorType=Cr.DEFAULT_RULE_CONFIG=Cr.DEFAULT_PARSER_CONFIG=Cr.END_OF_FILE=void 0;var _i=Gt(),QBe=Yq(),n3=HA(),a3=_d(),s3=pJ(),SBe=Vx(),vBe=BJ(),xBe=FJ(),PBe=TJ(),DBe=OJ(),kBe=HJ(),RBe=YJ(),FBe=JJ(),NBe=e3(),TBe=r3(),LBe=i3();Cr.END_OF_FILE=(0,n3.createTokenInstance)(n3.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(Cr.END_OF_FILE);Cr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:a3.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});Cr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var OBe;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(OBe=Cr.ParserDefinitionErrorType||(Cr.ParserDefinitionErrorType={}));function MBe(r){return r===void 0&&(r=void 0),function(){return r}}Cr.EMPTY_ALT=MBe;var aw=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,_i.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=(0,_i.has)(t,"skipValidations")?t.skipValidations:Cr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,_i.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,_i.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,s3.resolveGrammar)({rules:(0,_i.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,_i.isEmpty)(n)&&e.skipValidations===!1){var s=(0,s3.validateGrammar)({rules:(0,_i.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,_i.values)(e.tokensMap),errMsgProvider:a3.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,_i.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,QBe.computeAllProdsFollows)((0,_i.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,_i.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,_i.isEmpty)(e.definitionErrors))throw t=(0,_i.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: - `+t.join(` -------------------------------- -`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();Cr.Parser=aw;(0,LBe.applyMixins)(aw,[SBe.Recoverable,vBe.LooksAhead,xBe.TreeBuilder,PBe.LexerAdapter,kBe.RecognizerEngine,DBe.RecognizerApi,RBe.ErrorHandler,FBe.ContentAssist,NBe.GastRecorder,TBe.PerformanceTracer]);var UBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(aw);Cr.CstParser=UBe;var KBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(aw);Cr.EmbeddedActionsParser=KBe});var l3=y(Aw=>{"use strict";Object.defineProperty(Aw,"__esModule",{value:!0});Aw.createSyntaxDiagramsCode=void 0;var A3=Ix();function HBe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/diagrams.css":s,a=` - - - - - -`,l=` - -`,c=` - ``` @@ -93,22 +89,12 @@ window.initialize( If you need to inline multiple JS or CSS files, you can concatenate them for now, and separate contents of each file with an `\n` symbol. _This can be a point of improvement (add support for file lists)_. -## Fancy mode - -You may have noticed the fancy mode in previous snippets: - -```dm -window.initialize(fancy = TRUE) -``` - -This removes the native window titlebar and border, which effectively turns window into a floating panel. TGUI heavily uses this option to draw completely custom, fancy windows. You can use it too, but not having the default titlebar limits usability of the browser window, since you can't even close it or drag around without implementing that functionality yourself. This mode might be useful for creating popups and tooltips. - ## Communication It is very often necessary to exchange data between DM and JS, and in vanilla BYOND programming it is a huge pain in the butt, because the `browse()` API is very convoluted, out of box it can send only strings, and sending data back to DM requires using hrefs. ``` -location.href='byond://?src=12345¶m=1' +location.href = '?src=12345¶m=1' ``` If you're familiar with the href syntax of BYOND topic calls, then perhaps this doesn't surprise you, but this API artificially limits you to sending 2048 characters of string-typed data; you need to reinvent the wheel if you want to send something more complex than strings. It differs from the way you send messages from DM. And it's very hard to read as well. @@ -138,9 +124,9 @@ Finally, message can contain custom properties, and how you use them is _complet ```js Byond.sendMessage({ - type: 'click', - payload: { buttonId: 1 }, - popup_section: 'left', + type: 'click', + payload: { buttonId: 1 }, + popup_section: 'left', }); ``` @@ -160,15 +146,15 @@ To receive it in JS, you have two different syntaxes. First one is the most verb ```js Byond.subscribe(function (type, payload) { - if (type === 'alert') { - window.alert(payload.text); - return; - } - if (type === 'other') { - // ... - return; - } - // ... + if (type === 'alert') { + window.alert(payload.text); + return; + } + if (type === 'other') { + // ... + return; + } + // ... }); ``` @@ -176,7 +162,7 @@ Second one is more compact, because it already filters messages by type and pass ```js Byond.subscribeTo('alert', function (payload) { - window.alert(payload.text); + window.alert(payload.text); }); ``` @@ -186,7 +172,7 @@ To send a message from JS, you can use the `Byond.sendMessage()` function. ```js Byond.sendMessage('click', { - button: 'explode-mech', + button: 'explode-mech', }); ``` @@ -209,8 +195,8 @@ You can send messages with custom fields in case if you want to bypass JSON seri ```js Byond.sendMessage({ - type: 'something', - ref: '[0x12345678]', + type: 'something', + ref: '[0x12345678]', }); ``` @@ -244,7 +230,7 @@ Id of the current tgui window can be accessed via `Byond.windowId`, and below in ```js Byond.winset(Byond.windowId, { - size: '1280x640', + size: '1280x640', }); ``` @@ -255,10 +241,10 @@ Little known feature, but you can also get non-UI parameters on the client by us ```js // Fetch URL of a server client is currently connected to Byond.winget(null, 'url').then((serverUrl) => { - // Connect to this server - Byond.call(serverUrl); - // Close our client because it is now connecting in background - Byond.command('.quit'); + // Connect to this server + Byond.call(serverUrl); + // Close our client because it is now connecting in background + Byond.command('.quit'); }); ``` diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index 97630f6b213..4c61fecb773 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -124,31 +124,31 @@ snippet (make sure component name matches the file name): ```jsx import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section } from 'tgui-core/components'; import { Window } from '../layouts'; -export const SampleInterface = (props, context) => { - const { act, data } = useBackend(context); - // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; - return ( - - -

- - {health} - {color} - -
- - - ); +export const SampleInterface = (props) => { + const { act, data } = useBackend(context); + // Extract `health` and `color` variables from the `data` object. + const { health, color } = data; + return ( + + +
+ + {health} + {color} + +
+
+
+ ); }; ``` @@ -188,11 +188,11 @@ After compiling the code above, this is what it becomes: ```js createElement( - 'div', - { className: 'color-' + status }, - 'You are in ', - status, - ' condition!', + 'div', + { className: 'color-' + status }, + 'You are in ', + status, + ' condition!', ); ``` @@ -227,11 +227,11 @@ and builds a new array based on what was returned by that function. ```jsx - {items.map((item) => ( - - {item.content} - - ))} + {items.map((item) => ( + + {item.content} + + ))} ``` @@ -246,31 +246,31 @@ JSX code, and wrap it into a second, smaller React component: ```jsx import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section } from 'tgui-core/components'; import { Window } from '../layouts'; -export const SampleInterface = (props, context) => { - return ( - - - - - - ); +export const SampleInterface = (props) => { + return ( + + + + + + ); }; -const HealthStatus = (props, context) => { - const { act, data } = useBackend(context); - const { user } = props; - const { health, color } = data; - return ( -
- - {health} - {color} - -
- ); +const HealthStatus = (props) => { + const { act, data } = useBackend(context); + const { user } = props; + const { health, color } = data; + return ( +
+ + {health} + {color} + +
+ ); }; ``` @@ -292,7 +292,7 @@ upon code review): data["var"] = var return data -/obj/copypasta/ui_act(action, params) +/obj/copypasta/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return switch(action) @@ -308,25 +308,30 @@ And the template: ```jsx import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section } from 'tgui-core/components'; import { Window } from '../layouts'; -export type UIData = { - -} - -export const SampleInterface = (props, context) => { - const { act, data } = useBackend(context); - - return ( - - -
- -
-
-
- ); +export const SampleInterface = (props) => { + const { act, data } = useBackend(context); + // Extract `health` and `color` variables from the `data` object. + const { health, color } = data; + return ( + + +
+ + {health} + {color} + +
+
+
+ ); }; - ``` diff --git a/tgui/docs/writing-tests.md b/tgui/docs/writing-tests.md index 633e73bcd1a..daa29115d9e 100644 --- a/tgui/docs/writing-tests.md +++ b/tgui/docs/writing-tests.md @@ -6,7 +6,7 @@ It's quite simple: create a file ending in `.test.ts` or `.spec.ts` (usually wit ```js test('something', () => { - expect('a').toBe('a'); + expect('a').toBe('a'); }); ``` diff --git a/tgui/global.d.ts b/tgui/global.d.ts index d21ac79b0f8..e88281c4987 100644 --- a/tgui/global.d.ts +++ b/tgui/global.d.ts @@ -6,6 +6,7 @@ // Webpack asset modules. // Should match extensions used in webpack config. +/// declare module '*.png' { const content: string; export default content; @@ -21,6 +22,16 @@ declare module '*.svg' { export default content; } +declare module '*.scss' { + const content: string; + export default content; +} + +declare module '*.sass' { + const content: string; + export default content; +} + namespace JSX { interface IntrinsicElements { marquee: any; @@ -47,29 +58,9 @@ type ByondType = { IS_BYOND: boolean; /** - * Version of Trident engine of Internet Explorer. Null if N/A. + * Version of Blink engine of WebView2. Null if N/A. */ - TRIDENT: number | null; - - /** - * True if browser is IE8 or lower. - */ - IS_LTE_IE8: boolean; - - /** - * True if browser is IE9 or lower. - */ - IS_LTE_IE9: boolean; - - /** - * True if browser is IE10 or lower. - */ - IS_LTE_IE10: boolean; - - /** - * True if browser is IE11 or lower. - */ - IS_LTE_IE11: boolean; + BLINK: number | null; /** * If `true`, unhandled errors and common mistakes result in a blue screen @@ -83,6 +74,11 @@ type ByondType = { */ strictMode: boolean; + /** + * The external URL for the IndexedDB IFrame to use as the origin + */ + storageCdn: string; + /** * Makes a BYOND call. * @@ -115,14 +111,14 @@ type ByondType = { * * Returns a promise with a key-value object containing all properties. */ - winget(id: string | null): Promise; + winget(id: string | null): Promise>; /** * Retrieves all properties of the BYOND skin element. * * Returns a promise with a key-value object containing all properties. */ - winget(id: string | null, propName: '*'): Promise; + winget(id: string | null, propName: '*'): Promise>; /** * Retrieves an exactly one property of the BYOND skin element, @@ -138,7 +134,7 @@ type ByondType = { * * Returns a promise with a key-value object containing listed properties. */ - winget(id: string | null, propNames: string[]): Promise; + winget(id: string | null, propNames: string[]): Promise>; /** * Assigns properties to BYOND skin elements in bulk. @@ -162,11 +158,6 @@ type ByondType = { */ parseJson(text: string): any; - /** - * Downloads a blob, platform-agnostic - */ - saveBlob(blob: Blob, filename: string, ext: string): void; - /** * Sends a message to `/datum/tgui_window` which hosts this window instance. */ @@ -193,16 +184,36 @@ type ByondType = { * Loads a script into the document. */ loadJs(url: string): void; + + /** + * Maps icons to their ref + */ + iconRefMap: Record; + + /** + * Downloads a blob, platform-agnostic + */ + saveBlob(blob: Blob, filename: string, ext: string): void; }; /** * Object that provides access to Byond Skin API and is available in * any tgui application. */ -const Byond: ByondType; +const Byond: ByondType = {}; interface Window { Byond: ByondType; - __store__: Store; - __augmentStack__: (store: Store) => StackAugmentor; + __augmentStack__: (stack: string, error?: Error) => string; + + // IE IndexedDB stuff. + msIndexedDB: IDBFactory; + msIDBTransaction: IDBTransaction; + + // 516 byondstorage API. + hubStorage: Storage; + domainStorage: Storage; + serverStorage: Storage; + + __chatRenderer__: any; } diff --git a/tgui/happydom.ts b/tgui/happydom.ts new file mode 100644 index 00000000000..e3799b44740 --- /dev/null +++ b/tgui/happydom.ts @@ -0,0 +1,5 @@ +import { GlobalRegistrator } from '@happy-dom/global-registrator'; + +GlobalRegistrator.register(); + +import 'tgui/__mocks__/setup.ts'; diff --git a/tgui/package.json b/tgui/package.json index b6dd1a99eee..208b9001305 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,63 +1,31 @@ { - "private": true, - "name": "tgui-workspace", - "version": "4.3.1", - "packageManager": "yarn@3.3.1", - "workspaces": [ - "packages/*" - ], - "scripts": { - "tgui:analyze": "webpack --analyze", - "tgui:bench": "webpack --env TGUI_BENCH=1 && node packages/tgui-bench/index.js", - "tgui:build": "BROWSERSLIST_IGNORE_OLD_DATA=true webpack", - "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", - "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", - "tgui:prettier": "prettier --check .", - "tgui:sonar": "eslint packages --ext .js,.cjs,.ts,.tsx -c .eslintrc-sonar.yml", - "tgui:test": "jest --watch", - "tgui:test-simple": "CI=true jest --color", - "tgui:test-ci": "CI=true jest --color --collect-coverage", - "tgui:tsc": "tsc" - }, - "dependencies": { - "@babel/core": "^7.15.0", - "@babel/eslint-parser": "^7.15.0", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-transform-jscript": "^7.14.5", - "@babel/preset-env": "^7.15.0", - "@babel/preset-typescript": "^7.15.0", - "@types/jest": "^29.2.4", - "@types/jsdom": "^20.0.1", - "@types/node": "14.x", - "@types/webpack": "^5.28.0", - "@types/webpack-env": "^1.18.0", - "@typescript-eslint/parser": "^5.47.1", - "babel-jest": "^27.0.6", - "babel-loader": "^8.2.2", - "babel-plugin-inferno": "^6.3.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "common": "workspace:*", - "css-loader": "^5.2.7", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-radar": "^0.2.1", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-unused-imports": "^1.1.4", - "file-loader": "^6.2.0", - "inferno": "^7.4.8", - "jest": "^27.0.6", - "jest-circus": "^27.0.6", - "jsdom": "^16.7.0", - "mini-css-extract-plugin": "^1.6.2", - "prettier": "^3.1.1", - "sass": "^1.37.5", - "sass-loader": "^11.1.1", - "style-loader": "^2.0.0", - "terser-webpack-plugin": "^5.1.4", - "typescript": "^4.9.5", - "url-loader": "^4.1.1", - "webpack": "^5.104.1", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.7.2" - } + "name": "tgui-workspace", + "version": "6.0.0", + "devDependencies": { + "@happy-dom/global-registrator": "^20.0.11", + "@rspack/cli": "^1.6.8", + "@rspack/core": "^1.6.8", + "@testing-library/react": "^16.3.2", + "@types/bun": "^1.3.5", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/webpack-env": "^1.18.8", + "@types/wicg-file-system-access": "^2023.10.6", + "css-loader": "^7.1.2", + "sass-embedded": "^1.97.1", + "sass-loader": "^16.0.6", + "typescript": "^5.8.3" + }, + "packageManager": "bun@1.2.16", + "private": true, + "scripts": { + "tgui:analyze": "rspack --analyze", + "tgui:build": "rspack build", + "tgui:dev": "bun --smol packages/tgui-dev-server/index.ts", + "tgui:test": "bun test", + "tgui:tsc": "tsc" + }, + "workspaces": [ + "packages/*" + ] } diff --git a/tgui/packages/common/assets.ts b/tgui/packages/common/assets.ts new file mode 100644 index 00000000000..958d472ca4e --- /dev/null +++ b/tgui/packages/common/assets.ts @@ -0,0 +1,30 @@ +const EXCLUDED_PATTERNS = [/v4shim/i]; + +export function loadStyleSheet(payload: string): void { + Byond.loadCss(payload); +} + +export function loadMappings( + payload: Record, + /** Lets you insert your own independent asset map. */ + map: Record, +): void { + for (const name in payload) { + // Skip anything that matches excluded patterns + if (EXCLUDED_PATTERNS.some((regex) => regex.test(name))) { + continue; + } + + const url = payload[name]; + const ext = name.split('.').pop(); + + map[name] = url; + + if (ext === 'css') { + Byond.loadCss(url); + } + if (ext === 'js') { + Byond.loadJs(url); + } + } +} diff --git a/tgui/packages/common/collections.spec.ts b/tgui/packages/common/collections.spec.ts deleted file mode 100644 index ef35a95cb3e..00000000000 --- a/tgui/packages/common/collections.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { range, zip } from './collections'; - -// Type assertions, these will lint if the types are wrong. -const _zip1: [string, number] = zip(['a'], [1])[0]; - -describe('range', () => { - test('range(0, 5)', () => { - expect(range(0, 5)).toEqual([0, 1, 2, 3, 4]); - }); -}); - -describe('zip', () => { - test("zip(['a', 'b', 'c'], [1, 2, 3, 4])", () => { - expect(zip(['a', 'b', 'c'], [1, 2, 3, 4])).toEqual([ - ['a', 1], - ['b', 2], - ['c', 3], - ]); - }); -}); diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index 5bfcee85884..438ad19a4d2 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -4,260 +4,6 @@ * @license MIT */ -/** - * Iterates over elements of collection, returning an array of all elements - * iteratee returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * If collection is 'null' or 'undefined', it will be returned "as is" - * without emitting any errors (which can be useful in some cases). - */ -export const filter = - (iterateeFn: (input: T, index: number, collection: T[]) => boolean) => - (collection: T[]): T[] => { - if (collection === null || collection === undefined) { - return collection; - } - if (Array.isArray(collection)) { - const result: T[] = []; - for (let i = 0; i < collection.length; i++) { - const item = collection[i]; - if (iterateeFn(item, i, collection)) { - result.push(item); - } - } - return result; - } - throw new Error(`filter() can't iterate on type ${typeof collection}`); - }; - -type MapFunction = { - ( - iterateeFn: (value: T, index: number, collection: T[]) => U, - ): (collection: T[]) => U[]; - - ( - iterateeFn: (value: T, index: K, collection: Record) => U, - ): (collection: Record) => U[]; -}; - -/** - * Creates an array of values by running each element in collection - * thru an iteratee function. The iteratee is invoked with three - * arguments: (value, index|key, collection). - * - * If collection is 'null' or 'undefined', it will be returned "as is" - * without emitting any errors (which can be useful in some cases). - */ -export const map: MapFunction = - (iterateeFn) => - (collection: T[]): U[] => { - if (collection === null || collection === undefined) { - return collection; - } - - if (Array.isArray(collection)) { - return collection.map(iterateeFn); - } - - if (typeof collection === 'object') { - return Object.entries(collection).map(([key, value]) => { - return iterateeFn(value, key, collection); - }); - } - - throw new Error(`map() can't iterate on type ${typeof collection}`); - }; - -/** - * Given a collection, will run each element through an iteratee function. - * Will then filter out undefined values. - */ -export const filterMap = ( - collection: T[], - iterateeFn: (value: T) => U | undefined, -): U[] => { - const finalCollection: U[] = []; - - for (const value of collection) { - const output = iterateeFn(value); - if (output !== undefined) { - finalCollection.push(output); - } - } - - return finalCollection; -}; - -const COMPARATOR = (objA, objB) => { - const criteriaA = objA.criteria; - const criteriaB = objB.criteria; - const length = criteriaA.length; - for (let i = 0; i < length; i++) { - const a = criteriaA[i]; - const b = criteriaB[i]; - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - } - return 0; -}; - -/** - * Creates an array of elements, sorted in ascending order by the results - * of running each element in a collection thru each iteratee. - * - * Iteratees are called with one argument (value). - */ -export const sortBy = - (...iterateeFns: ((input: T) => unknown)[]) => - (array: T[]): T[] => { - if (!Array.isArray(array)) { - return array; - } - let length = array.length; - // Iterate over the array to collect criteria to sort it by - let mappedArray: { - criteria: unknown[]; - value: T; - }[] = []; - for (let i = 0; i < length; i++) { - const value = array[i]; - mappedArray.push({ - criteria: iterateeFns.map((fn) => fn(value)), - value, - }); - } - // Sort criteria using the base comparator - mappedArray.sort(COMPARATOR); - - // Unwrap values - const values: T[] = []; - while (length--) { - values[length] = mappedArray[length].value; - } - return values; - }; - -export const sort = sortBy(); - -export const sortStrings = sortBy(); - -/** - * Returns a range of numbers from start to end, exclusively. - * For example, range(0, 5) will return [0, 1, 2, 3, 4]. - */ -export const range = (start: number, end: number): number[] => - new Array(end - start).fill(null).map((_, index) => index + start); - -/** - * A fast implementation of reduce. - */ -export const reduce = (reducerFn, initialValue) => (array) => { - const length = array.length; - let i; - let result; - if (initialValue === undefined) { - i = 1; - result = array[0]; - } else { - i = 0; - result = initialValue; - } - for (; i < length; i++) { - result = reducerFn(result, array[i], i, array); - } - return result; -}; - -/** - * Creates a duplicate-free version of an array, using SameValueZero for - * equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * It accepts iteratee which is invoked for each element in array to generate - * the criterion by which uniqueness is computed. The order of result values - * is determined by the order they occur in the array. The iteratee is - * invoked with one argument: value. - */ -export const uniqBy = - (iterateeFn?: (value: T) => unknown) => - (array: T[]): T[] => { - const { length } = array; - const result: T[] = []; - const seen: unknown[] = iterateeFn ? [] : result; - let index = -1; - // prettier-ignore - outer: - while (++index < length) { - let value: T | 0 = array[index]; - const computed = iterateeFn ? iterateeFn(value) : value; - if (computed === computed) { - let seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iterateeFn) { - seen.push(computed); - } - result.push(value); - } else if (!seen.includes(computed)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - }; - -export const uniq = uniqBy(); - -type Zip = { - [I in keyof T]: T[I] extends (infer U)[] ? U : never; -}[]; - -/** - * Creates an array of grouped elements, the first of which contains - * the first elements of the given arrays, the second of which contains - * the second elements of the given arrays, and so on. - */ -export const zip = (...arrays: T): Zip => { - if (arrays.length === 0) { - return []; - } - const numArrays = arrays.length; - const numValues = arrays[0].length; - const result: Zip = []; - for (let valueIndex = 0; valueIndex < numValues; valueIndex++) { - const entry: unknown[] = []; - for (let arrayIndex = 0; arrayIndex < numArrays; arrayIndex++) { - entry.push(arrays[arrayIndex][valueIndex]); - } - - // I tried everything to remove this any, and have no idea how to do it. - result.push(entry as any); - } - return result; -}; - -/** - * This method is like "zip" except that it accepts iteratee to - * specify how grouped values should be combined. The iteratee is - * invoked with the elements of each group. - */ -export const zipWith = - (iterateeFn: (...values: T[]) => U) => - (...arrays: T[][]): U[] => { - return map((values: T[]) => iterateeFn(...values))(zip(...arrays)); - }; - const binarySearch = ( getKey: (value: T) => U, collection: readonly T[], @@ -293,55 +39,12 @@ const binarySearch = ( return compare > insertingKey ? middle : middle + 1; }; -export const binaryInsertWith = - (getKey: (value: T) => U) => - (collection: readonly T[], value: T) => { - const copy = [...collection]; - copy.splice(binarySearch(getKey, collection, value), 0, value); - return copy; - }; - -/** - * This method takes a collection of items and a number, returning a collection - * of collections, where the maximum amount of items in each is that second arg - */ -export const paginate = (collection: T[], maxPerPage: number): T[][] => { - const pages: T[][] = []; - let page: T[] = []; - let itemsToAdd = maxPerPage; - - for (const item of collection) { - page.push(item); - itemsToAdd--; - if (!itemsToAdd) { - itemsToAdd = maxPerPage; - pages.push(page); - page = []; - } - } - if (page.length) { - pages.push(page); - } - return pages; -}; - -const isObject = (obj: unknown) => typeof obj === 'object' && obj !== null; - -// Does a deep merge of two objects. DO NOT FEED CIRCULAR OBJECTS!! -export const deepMerge = (...objects: any[]): any => { - const target = {}; - for (const object of objects) { - for (const key of Object.keys(object)) { - const targetValue = target[key]; - const objectValue = object[key]; - if (Array.isArray(targetValue) && Array.isArray(objectValue)) { - target[key] = [...targetValue, ...objectValue]; - } else if (isObject(targetValue) && isObject(objectValue)) { - target[key] = deepMerge(targetValue, objectValue); - } else { - target[key] = objectValue; - } - } - } - return target; +export const binaryInsertWith = ( + collection: readonly T[], + value: T, + getKey: (value: T) => U, +): T[] => { + const copy = [...collection]; + copy.splice(binarySearch(getKey, collection, value), 0, value); + return copy; }; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js deleted file mode 100644 index 59935931d82..00000000000 --- a/tgui/packages/common/color.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const EPSILON = 0.0001; - -export class Color { - constructor(r = 0, g = 0, b = 0, a = 1) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - - toString() { - // Alpha component needs to permit fractional values, so cannot use | - let alpha = parseFloat(this.a); - if (isNaN(alpha)) { - alpha = 1; - } - return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${alpha})`; - } - - // Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - darken(percent) { - percent /= 100; - return new Color( - this.r - this.r * percent, - this.g - this.g * percent, - this.b - this.b * percent, - this.a, - ); - } - - // Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - lighten(percent) { - // No point in rewriting code we already have. - return this.darken(-percent); - } -} - -/** - * Creates a color from the CSS hex color notation. - */ -Color.fromHex = (hex) => - new Color( - parseInt(hex.substr(1, 2), 16), - parseInt(hex.substr(3, 2), 16), - parseInt(hex.substr(5, 2), 16), - ); - -/** - * Linear interpolation of two colors. - */ -Color.lerp = (c1, c2, n) => - new Color( - (c2.r - c1.r) * n + c1.r, - (c2.g - c1.g) * n + c1.g, - (c2.b - c1.b) * n + c1.b, - (c2.a - c1.a) * n + c1.a, - ); - -/** - * Loops up the color in the provided list of colors - * with linear interpolation. - */ -Color.lookup = (value, colors = []) => { - const len = colors.length; - if (len < 2) { - throw new Error('Needs at least two colors!'); - } - const scaled = value * (len - 1); - if (value < EPSILON) { - return colors[0]; - } - if (value >= 1 - EPSILON) { - return colors[len - 1]; - } - const ratio = scaled % 1; - const index = scaled | 0; - return Color.lerp(colors[index], colors[index + 1], ratio); -}; diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.js deleted file mode 100644 index 7eeff511aa5..00000000000 --- a/tgui/packages/common/events.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export class EventEmitter { - constructor() { - this.listeners = {}; - } - - on(name, listener) { - this.listeners[name] = this.listeners[name] || []; - this.listeners[name].push(listener); - } - - off(name, listener) { - const listeners = this.listeners[name]; - if (!listeners) { - throw new Error(`There is no listeners for "${name}"`); - } - this.listeners[name] = listeners.filter((existingListener) => { - return existingListener !== listener; - }); - } - - emit(name, ...params) { - const listeners = this.listeners[name]; - if (!listeners) { - return; - } - for (let i = 0, len = listeners.length; i < len; i += 1) { - const listener = listeners[i]; - listener(...params); - } - } - - clear() { - this.listeners = {}; - } -} diff --git a/tgui/packages/common/exhaustive.ts b/tgui/packages/common/exhaustive.ts deleted file mode 100644 index bc41757515b..00000000000 --- a/tgui/packages/common/exhaustive.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Throws an error such that a non-exhaustive check will error at compile time - * when using TypeScript, rather than at runtime. - * - * For example: - * enum Color { Red, Green, Blue } - * switch (color) { - * case Color.Red: - * return "red"; - * case Color.Green: - * return "green"; - * default: - * // This will error at compile time that we forgot blue. - * exhaustiveCheck(color); - * } - */ -export const exhaustiveCheck = (input: never) => { - throw new Error(`Unhandled case: ${input}`); -}; diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js deleted file mode 100644 index ba7df09d407..00000000000 --- a/tgui/packages/common/fp.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Creates a function that returns the result of invoking the given - * functions, where each successive invocation is supplied the return - * value of the previous. - */ -// prettier-ignore -export const flow = (...funcs) => (input, ...rest) => { - let output = input; - for (let func of funcs) { - // Recurse into the array of functions - if (Array.isArray(func)) { - output = flow(...func)(output, ...rest); - } - else if (func) { - output = func(output, ...rest); - } - } - return output; -}; - -/** - * Composes single-argument functions from right to left. - * - * All functions might accept a context in form of additional arguments. - * If the resulting function is called with more than 1 argument, rest of - * the arguments are passed to all functions unchanged. - * - * @param {...Function} funcs The functions to compose - * @returns {Function} A function obtained by composing the argument functions - * from right to left. For example, compose(f, g, h) is identical to doing - * (input, ...rest) => f(g(h(input, ...rest), ...rest), ...rest) - */ -export const compose = (...funcs) => { - if (funcs.length === 0) { - return (arg) => arg; - } - if (funcs.length === 1) { - return funcs[0]; - } - // prettier-ignore - return funcs.reduce((a, b) => (value, ...rest) => - a(b(value, ...rest), ...rest)); -}; diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.js deleted file mode 100644 index 8f18b154b56..00000000000 --- a/tgui/packages/common/keycodes.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * All possible browser keycodes, in one file. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export const KEY_BACKSPACE = 8; -export const KEY_TAB = 9; -export const KEY_ENTER = 13; -export const KEY_SHIFT = 16; -export const KEY_CTRL = 17; -export const KEY_ALT = 18; -export const KEY_PAUSE = 19; -export const KEY_CAPSLOCK = 20; -export const KEY_ESCAPE = 27; -export const KEY_SPACE = 32; -export const KEY_PAGEUP = 33; -export const KEY_PAGEDOWN = 34; -export const KEY_END = 35; -export const KEY_HOME = 36; -export const KEY_LEFT = 37; -export const KEY_UP = 38; -export const KEY_RIGHT = 39; -export const KEY_DOWN = 40; -export const KEY_INSERT = 45; -export const KEY_DELETE = 46; -export const KEY_0 = 48; -export const KEY_1 = 49; -export const KEY_2 = 50; -export const KEY_3 = 51; -export const KEY_4 = 52; -export const KEY_5 = 53; -export const KEY_6 = 54; -export const KEY_7 = 55; -export const KEY_8 = 56; -export const KEY_9 = 57; -export const KEY_A = 65; -export const KEY_B = 66; -export const KEY_C = 67; -export const KEY_D = 68; -export const KEY_E = 69; -export const KEY_F = 70; -export const KEY_G = 71; -export const KEY_H = 72; -export const KEY_I = 73; -export const KEY_J = 74; -export const KEY_K = 75; -export const KEY_L = 76; -export const KEY_M = 77; -export const KEY_N = 78; -export const KEY_O = 79; -export const KEY_P = 80; -export const KEY_Q = 81; -export const KEY_R = 82; -export const KEY_S = 83; -export const KEY_T = 84; -export const KEY_U = 85; -export const KEY_V = 86; -export const KEY_W = 87; -export const KEY_X = 88; -export const KEY_Y = 89; -export const KEY_Z = 90; -export const KEY_F1 = 112; -export const KEY_F2 = 113; -export const KEY_F3 = 114; -export const KEY_F4 = 115; -export const KEY_F5 = 116; -export const KEY_F6 = 117; -export const KEY_F7 = 118; -export const KEY_F8 = 119; -export const KEY_F9 = 120; -export const KEY_F10 = 121; -export const KEY_F11 = 122; -export const KEY_F12 = 123; -export const KEY_SEMICOLON = 186; -export const KEY_EQUAL = 187; -export const KEY_COMMA = 188; -export const KEY_MINUS = 189; -export const KEY_PERIOD = 190; -export const KEY_SLASH = 191; -export const KEY_LEFT_BRACKET = 219; -export const KEY_BACKSLASH = 220; -export const KEY_RIGHT_BRACKET = 221; -export const KEY_QUOTE = 222; diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts deleted file mode 100644 index b3e6a4e814f..00000000000 --- a/tgui/packages/common/keys.ts +++ /dev/null @@ -1,139 +0,0 @@ -/** - * ### Key codes. - * event.keyCode is deprecated, use this reference instead. - * - * Handles modifier keys (Shift, Alt, Control) and arrow keys. - * - * For alphabetical keys, use the actual character (e.g. 'a') instead of the key code. - * Don't access Esc or Escape directly, use isEscape() instead - * - * Something isn't here that you want? Just add it: - * @url https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values - * @usage - * ```ts - * import { KEY } from 'tgui/common/keys'; - * - * if (event.key === KEY.Enter) { - * // do something - * } - * ``` - * - * - */ -export enum KEY { - A = 'a', - Alt = 'Alt', - Backspace = 'Backspace', - Control = 'Control', - D = 'd', - Delete = 'Delete', - Down = 'ArrowDown', - E = 'e', - End = 'End', - Enter = 'Enter', - Esc = 'Esc', - Escape = 'Escape', - Home = 'Home', - Insert = 'Insert', - Left = 'ArrowLeft', - N = 'n', - PageDown = 'PageDown', - PageUp = 'PageUp', - Right = 'ArrowRight', - S = 's', - Shift = 'Shift', - Space = ' ', - Tab = 'Tab', - Up = 'ArrowUp', - W = 'w', - Z = 'z', -} - -/** - * ### isEscape - * - * Checks if the user has hit the 'ESC' key on their keyboard. - * There's a weirdness in BYOND where this could be either the string - * 'Escape' or 'Esc' depending on the browser. This function handles - * both cases. - * - * @param key - the key to check, typically from event.key - * @returns true if key is Escape or Esc, false otherwise - */ -export function isEscape(key: string): boolean { - return key === KEY.Esc || key === KEY.Escape; -} - -/** - * ### isAlphabetic - * - * Checks if the user has hit any alphabetic key (a - z) - * - * @param key - the key to check, typically from event.key - * @returns true if key is in the range of a-z - */ -export function isAlphabetic(key: string): boolean { - return key >= KEY.A && key <= KEY.Z; -} - -/** - * ### isNumeric - * - * Checks if the user has hit any numeric key (0 - 9) - * - * @param key - the key to check, typically from event.key - * @returns true if key is in the range of 0 - 9 - */ -export function isNumeric(key: string): boolean { - return key >= '0' && key <= '9'; -} - -/** - * ### isCardinal - * - * Checks if the user has hit any cardinal key (n s w e) - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any cardinal n s w e - */ -export function isCardinal(key: string): boolean { - return key === KEY.N || key === KEY.S || key === KEY.W || key === KEY.E; -} - -/** - * ### isArrow - * - * Checks if the user has hit any arrow key - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any arrow keys - */ -export function isArrow(key: string): boolean { - return ( - key === KEY.Up || key === KEY.Down || key === KEY.Left || key === KEY.Right - ); -} - -/** - * ### isWasd - * - * Checks if the user has hit any w a s d key - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any w a s d - */ -export function isWasd(key: string): boolean { - return key === KEY.W || key === KEY.A || key === KEY.S || key === KEY.D; -} - -/** - * ### isMovement - * - * Checks if the user has hit any movement key (w a s d and arrow keys) - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any movement key w a s d and arrow keys - */ -export function isMovement(key: string): boolean { - return isWasd(key) || isArrow(key); -} diff --git a/tgui/packages/common/math.ts b/tgui/packages/common/math.ts deleted file mode 100644 index b9f7bfda9d5..00000000000 --- a/tgui/packages/common/math.ts +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -// Further modified for Aurora - -/** - * Limits a number to the range between 'min' and 'max'. - */ -export const clamp = (value, min, max) => { - return value < min ? min : value > max ? max : value; -}; - -/** - * Limits a number between 0 and 1. - */ -export const clamp01 = (value) => { - return value < 0 ? 0 : value > 1 ? 1 : value; -}; - -/** - * Scales a number to fit into the range between min and max. - */ -export const scale = (value, min, max) => { - return (value - min) / (max - min); -}; - -/** - * Robust number rounding. - * - * Adapted from Locutus, see: http://locutus.io/php/math/round/ - * - * @param {number} value - * @param {number} precision - * @return {number} - */ -export const round = (value, precision) => { - if (!value || isNaN(value)) { - return value; - } - // helper variables - let m, f, isHalf, sgn; - // making sure precision is integer - precision |= 0; - m = Math.pow(10, precision); - value *= m; - // sign of the number - sgn = +(value > 0) | -(value < 0); - // isHalf = value % 1 === 0.5 * sgn; - isHalf = Math.abs(value % 1) >= 0.4999999999854481; - f = Math.floor(value); - if (isHalf) { - // rounds .5 away from zero - value = f + (sgn > 0); - } - return (isHalf ? value : Math.round(value)) / m; -}; - -/** - * Returns a string representing a number in fixed point notation. - */ -export const toFixed = (value, fractionDigits = 0) => { - return Number(value).toFixed(Math.max(fractionDigits, 0)); -}; - -/** - * Checks whether a value is within the provided range. - * - * Range is an array of two numbers, for example: [0, 15]. - */ -export const inRange = (value, range) => { - return range && value >= range[0] && value <= range[1]; -}; - -/** - * Walks over the object with ranges, comparing value against every range, - * and returns the key of the first matching range. - * - * Range is an array of two numbers, for example: [0, 15]. - */ -export const keyOfMatchingRange = (value, ranges) => { - for (let rangeName of Object.keys(ranges)) { - const range = ranges[rangeName]; - if (inRange(value, range)) { - return rangeName; - } - } -}; - -/** - * Get number of digits following the decimal point in a number - */ -export const numberOfDecimalDigits = (value) => { - if (Math.floor(value) !== value) { - return value.toString().split('.')[1].length || 0; - } - return 0; -}; - -// Linear interpolation between two values. -export const lerp = (value1: number, value2: number, amount: number) => { - amount = amount < 0 ? 0 : amount; - amount = amount > 1 ? 1 : amount; - return value1 + (value2 - value1) * amount; -}; diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json index bbf99bf1cad..f40c3b79237 100644 --- a/tgui/packages/common/package.json +++ b/tgui/packages/common/package.json @@ -1,5 +1,8 @@ { - "private": true, - "name": "common", - "version": "4.3.1" + "name": "common", + "version": "4.3.1", + "dependencies": { + "es-toolkit": "^1.39.3" + }, + "private": true } diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.ts similarity index 50% rename from tgui/packages/common/perf.js rename to tgui/packages/common/perf.ts index 591aa3537de..a7dfefc1e1c 100644 --- a/tgui/packages/common/perf.js +++ b/tgui/packages/common/perf.ts @@ -14,46 +14,57 @@ const FRAME_DURATION = 1000 / FPS; // True if Performance API is supported const supportsPerf = !!window.performance?.now; // High precision markers -let hpMarkersByName = {}; +const hpMarkersByName: Record = {}; // Low precision markers -let lpMarkersByName = {}; +const lpMarkersByName: Record = {}; /** * Marks a certain spot in the code for later measurements. */ -const mark = (name, timestamp) => { +function mark(name: string, timestamp?: number): void { if (process.env.NODE_ENV !== 'production') { if (supportsPerf && !timestamp) { hpMarkersByName[name] = performance.now(); } lpMarkersByName[name] = timestamp || Date.now(); } -}; +} /** * Calculates and returns the difference between two markers as a string. * * Use logger.log() to print the measurement. */ -const measure = (markerNameA, markerNameB) => { - if (process.env.NODE_ENV !== 'production') { - let markerA = hpMarkersByName[markerNameA]; - let markerB = hpMarkersByName[markerNameB]; - if (!markerA || !markerB) { - markerA = lpMarkersByName[markerNameA]; - markerB = lpMarkersByName[markerNameB]; - } - const duration = Math.abs(markerB - markerA); - return formatDuration(duration); - } -}; +function measure(markerNameA: string, markerNameB: string): string | undefined { + if (process.env.NODE_ENV === 'production') return; -const formatDuration = (duration) => { + let markerA = hpMarkersByName[markerNameA]; + let markerB = hpMarkersByName[markerNameB]; + + if (!markerA || !markerB) { + markerA = lpMarkersByName[markerNameA]; + markerB = lpMarkersByName[markerNameB]; + } + + const duration = Math.abs(markerB - markerA); + + return formatDuration(duration); +} + +/** + * Formats a duration in milliseconds and frames. + */ +function formatDuration(duration: number): string { const durationInFrames = duration / FRAME_DURATION; - // prettier-ignore - return duration.toFixed(duration < 10 ? 1 : 0) + 'ms ' - + '(' + durationInFrames.toFixed(2) + ' frames)'; -}; + + return ( + duration.toFixed(duration < 10 ? 1 : 0) + + 'ms ' + + '(' + + durationInFrames.toFixed(2) + + ' frames)' + ); +} export const perf = { mark, diff --git a/tgui/packages/common/random.ts b/tgui/packages/common/random.ts deleted file mode 100644 index fbf9030b1ba..00000000000 --- a/tgui/packages/common/random.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { clamp } from './math'; - -/** - * Returns random number between lowerBound exclusive and upperBound inclusive - */ -export const randomNumber = (lowerBound: number, upperBound: number) => { - return Math.random() * (upperBound - lowerBound) + lowerBound; -}; - -/** - * Returns random integer between lowerBound exclusive and upperBound inclusive - */ -export const randomInteger = (lowerBound: number, upperBound: number) => { - lowerBound = Math.ceil(lowerBound); - upperBound = Math.floor(upperBound); - return Math.floor(Math.random() * (upperBound - lowerBound) + lowerBound); -}; - -/** - * Returns random array element - */ -export const randomPick = (array: T[]) => { - return array[Math.floor(Math.random() * array.length)]; -}; - -/** - * Return 1 with probability P percent; otherwise 0 - */ -export const randomProb = (probability: number) => { - const normalized = clamp(probability, 0, 100) / 100; - return Math.random() <= normalized; -}; diff --git a/tgui/packages/common/react.spec.ts b/tgui/packages/common/react.spec.ts deleted file mode 100644 index 44102fdc971..00000000000 --- a/tgui/packages/common/react.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @file - * @copyright 2021 Aleksej Komarov - * @license MIT - */ - -import { classes } from './react'; - -describe('classes', () => { - test('empty', () => { - expect(classes([])).toBe(''); - }); - - test('result contains inputs', () => { - const output = classes(['foo', 'bar', false, true, 0, 1, 'baz']); - expect(output).toContain('foo'); - expect(output).toContain('bar'); - expect(output).toContain('baz'); - }); -}); diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts deleted file mode 100644 index 8e42d0971ab..00000000000 --- a/tgui/packages/common/react.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Helper for conditionally adding/removing classes in React - */ -export const classes = (classNames: (string | BooleanLike)[]) => { - let className = ''; - for (let i = 0; i < classNames.length; i++) { - const part = classNames[i]; - if (typeof part === 'string') { - className += part + ' '; - } - } - return className; -}; - -/** - * Normalizes children prop, so that it is always an array of VDom - * elements. - */ -export const normalizeChildren = (children: T | T[]) => { - if (Array.isArray(children)) { - return children.flat().filter((value) => value) as T[]; - } - if (typeof children === 'object') { - return [children]; - } - return []; -}; - -/** - * Shallowly checks if two objects are different. - * Credit: https://github.com/developit/preact-compat - */ -export const shallowDiffers = (a: object, b: object) => { - let i; - for (i in a) { - if (!(i in b)) { - return true; - } - } - for (i in b) { - if (a[i] !== b[i]) { - return true; - } - } - return false; -}; - -/** - * Default inferno hooks for pure components. - */ -export const pureComponentHooks = { - onComponentShouldUpdate: (lastProps, nextProps) => { - return shallowDiffers(lastProps, nextProps); - }, -}; - -/** - * A helper to determine whether the object is renderable by React. - */ -export const canRender = (value: unknown) => { - // prettier-ignore - return value !== undefined - && value !== null - && typeof value !== 'boolean'; -}; - -/** - * A common case in tgui, when you pass a value conditionally, these are - * the types that can fall through the condition. - */ -export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.test.ts b/tgui/packages/common/redux.test.ts index 0a29a92e0ce..0a5d8c143cb 100644 --- a/tgui/packages/common/redux.test.ts +++ b/tgui/packages/common/redux.test.ts @@ -1,10 +1,12 @@ +import { describe, expect, it } from 'bun:test'; + import { - Action, - Reducer, + type Action, applyMiddleware, combineReducers, createAction, createStore, + type Reducer, } from './redux'; // Dummy Reducer @@ -30,12 +32,12 @@ const increment = createAction('INCREMENT'); const decrement = createAction('DECREMENT'); describe('Redux implementation tests', () => { - test('createStore works', () => { + it('createStore works', () => { const store = createStore(counterReducer); expect(store.getState()).toBe(0); }); - test('createStore with applyMiddleware works', () => { + it('createStore with applyMiddleware works', () => { const store = createStore( counterReducer, applyMiddleware(loggingMiddleware), @@ -43,7 +45,7 @@ describe('Redux implementation tests', () => { expect(store.getState()).toBe(0); }); - test('dispatch works', () => { + it('dispatch works', () => { const store = createStore(counterReducer); store.dispatch(increment()); expect(store.getState()).toBe(1); @@ -51,7 +53,7 @@ describe('Redux implementation tests', () => { expect(store.getState()).toBe(0); }); - test('combineReducers works', () => { + it('combineReducers works', () => { const rootReducer = combineReducers({ counter: counterReducer, }); @@ -59,7 +61,7 @@ describe('Redux implementation tests', () => { expect(store.getState()).toEqual({ counter: 0 }); }); - test('createAction works', () => { + it('createAction works', () => { const incrementAction = increment(); expect(incrementAction).toEqual({ type: 'INCREMENT' }); const decrementAction = decrement(); diff --git a/tgui/packages/common/redux.ts b/tgui/packages/common/redux.ts index 1503de3c7d7..33275884714 100644 --- a/tgui/packages/common/redux.ts +++ b/tgui/packages/common/redux.ts @@ -4,6 +4,8 @@ * @license MIT */ +type Fn = (...args: any[]) => any; + export type Reducer = ( state: State | undefined, action: ActionType, @@ -36,7 +38,7 @@ export type Dispatch = ( action: ActionType, ) => void; -type StoreEnhancer = (createStoreFunction: Function) => Function; +type StoreEnhancer = (createStoreFunction: Fn) => Fn; type PreparedAction = { payload?: any; @@ -56,7 +58,7 @@ export const createStore = ( } let currentState: State; - let listeners: Array<() => void> = []; + const listeners: Array<() => void> = []; const getState = (): State => currentState; @@ -95,7 +97,7 @@ export const applyMiddleware = ( return (reducer, ...args): Store => { const store = createStoreFunction(reducer, ...args); - let dispatch: Dispatch = () => { + let dispatch: Dispatch = (action, ...args) => { throw new Error( 'Dispatching while constructing your middleware is not allowed.', ); @@ -163,7 +165,7 @@ export const combineReducers = ( * @param {string} type The action type to use for created actions. * @param {any} prepare (optional) a method that takes any number of arguments * and returns { payload } or { payload, meta }. If this is given, the - * resulting action creator will pass it's arguments to this method to + * resulting action creator will pass its arguments to this method to * calculate payload & meta. * * @public @@ -194,19 +196,3 @@ export const createAction = ( return actionCreator; }; - -// Implementation specific -// -------------------------------------------------------- - -export const useDispatch = (context: { - store: Store; -}): Dispatch => { - return context.store.dispatch; -}; - -export const useSelector = ( - context: { store: Store }, - selector: (state: State) => Selected, -): Selected => { - return selector(context.store.getState()); -}; diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js deleted file mode 100644 index 869ffd84990..00000000000 --- a/tgui/packages/common/storage.js +++ /dev/null @@ -1,308 +0,0 @@ -/** - * Browser-agnostic abstraction of key-value web storage. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export const IMPL_MEMORY = 0; -export const IMPL_HUB_STORAGE = 1; -export const IMPL_INDEXED_DB = 2; -export const IMPL_IFRAME_INDEXED_DB = 3; - -const INDEXED_DB_VERSION = 1; -const INDEXED_DB_NAME = 'tgui'; -const INDEXED_DB_STORE_NAME = 'storage-v1'; - -const READ_ONLY = 'readonly'; -const READ_WRITE = 'readwrite'; - -const testGeneric = (testFn) => () => { - try { - return Boolean(testFn()); - } catch { - return false; - } -}; - -const testHubStorage = testGeneric( - () => window.hubStorage && window.hubStorage.getItem, -); - -// TODO: Remove with 516 -// prettier-ignore -const testIndexedDb = testGeneric(() => ( - (window.indexedDB || window.msIndexedDB) - && (window.IDBTransaction || window.msIDBTransaction) -)); - -class MemoryBackend { - constructor() { - this.impl = IMPL_MEMORY; - this.store = {}; - } - - async get(key) { - return this.store[key]; - } - - async set(key, value) { - this.store[key] = value; - } - - async remove(key) { - this.store[key] = undefined; - } - - async clear() { - this.store = {}; - } -} - -class HubStorageBackend { - constructor() { - this.impl = IMPL_HUB_STORAGE; - } - - async get(key) { - const value = await window.hubStorage.getItem('aurora-' + key); - if (typeof value === 'string') { - return JSON.parse(value); - } - } - - async set(key, value) { - window.hubStorage.setItem('aurora-' + key, JSON.stringify(value)); - } - - async remove(key) { - window.hubStorage.removeItem('aurora-' + key); - } - - async clear() { - window.hubStorage.clear(); - } -} - -class IFrameIndexedDbBackend { - constructor() { - this.impl = IMPL_IFRAME_INDEXED_DB; - } - - async ready() { - const iframe = document.createElement('iframe'); - iframe.style.display = 'none'; - iframe.src = Byond.storageCdn; - - const completePromise = new Promise((resolve) => { - iframe.onload = () => resolve(this); - }); - - this.documentElement = document.body.appendChild(iframe); - this.iframeWindow = this.documentElement.contentWindow; - - return completePromise; - } - - async get(key) { - const promise = new Promise((resolve) => { - window.addEventListener('message', (message) => { - if (message.data.key && message.data.key === key) { - resolve(message.data.value); - } - }); - }); - - this.iframeWindow.postMessage({ type: 'get', key: key }, '*'); - return promise; - } - - async set(key, value) { - this.iframeWindow.postMessage({ type: 'set', key: key, value: value }, '*'); - } - - async remove(key) { - this.iframeWindow.postMessage({ type: 'remove', key: key }, '*'); - } - - async clear() { - this.iframeWindow.postMessage({ type: 'clear' }, '*'); - } - - async ping() { - const promise = new Promise((resolve) => { - window.addEventListener('message', (message) => { - if (message.data === true) { - resolve(true); - } - }); - - setTimeout(() => resolve(false), 100); - }); - - this.iframeWindow.postMessage({ type: 'ping' }, '*'); - return promise; - } - - async processChatMessages(messages) { - this.iframeWindow.postMessage( - { type: 'processChatMessages', messages: messages }, - '*', - ); - } - - async getChatMessages() { - const promise = new Promise((resolve) => { - window.addEventListener('message', (message) => { - if (message.data.messages) { - resolve(message.data.messages); - } - }); - }); - - this.iframeWindow.postMessage({ type: 'getChatMessages' }, '*'); - return promise; - } - - async setNumberStored(number) { - this.iframeWindow.postMessage( - { type: 'setNumberStored', newMax: number }, - '*', - ); - } - - async destroy() { - document.body.removeChild(this.documentElement); - this.documentElement = null; - this.iframeWindow = null; - } -} - -class IndexedDbBackend { - // TODO: Remove with 516 - constructor() { - this.impl = IMPL_INDEXED_DB; - /** @type {Promise} */ - this.dbPromise = new Promise((resolve, reject) => { - const indexedDB = window.indexedDB || window.msIndexedDB; - const req = indexedDB.open(INDEXED_DB_NAME, INDEXED_DB_VERSION); - req.onupgradeneeded = () => { - try { - req.result.createObjectStore(INDEXED_DB_STORE_NAME); - } catch (err) { - reject(new Error('Failed to upgrade IDB: ' + req.error)); - } - }; - req.onsuccess = () => resolve(req.result); - req.onerror = () => { - reject(new Error('Failed to open IDB: ' + req.error)); - }; - }); - } - - async getStore(mode) { - // prettier-ignore - return this.dbPromise.then((db) => db - .transaction(INDEXED_DB_STORE_NAME, mode) - .objectStore(INDEXED_DB_STORE_NAME)); - } - - async get(key) { - const store = await this.getStore(READ_ONLY); - return new Promise((resolve, reject) => { - const req = store.get(key); - req.onsuccess = () => resolve(req.result); - req.onerror = () => reject(req.error); - }); - } - - async set(key, value) { - // NOTE: We deliberately make this operation transactionless - const store = await this.getStore(READ_WRITE); - store.put(value, key); - } - - async remove(key) { - // NOTE: We deliberately make this operation transactionless - const store = await this.getStore(READ_WRITE); - store.delete(key); - } - - async clear() { - // NOTE: We deliberately make this operation transactionless - const store = await this.getStore(READ_WRITE); - store.clear(); - } -} - -/** - * Web Storage Proxy object, which selects the best backend available - * depending on the environment. - */ -export class StorageProxy { - constructor() { - this.backendPromise = (async () => { - if (!Byond.TRIDENT) { - if (Byond.storageCdn) { - const iframe = new IFrameIndexedDbBackend(); - await iframe.ready(); - - if ((await iframe.ping()) === true) { - return iframe; - } - - iframe.destroy(); - } - - if (!testHubStorage()) { - Byond.winset(null, 'browser-options', '+byondstorage'); - - return new Promise((resolve) => { - const listener = () => { - document.removeEventListener('byondstorageupdated', listener); - resolve(new HubStorageBackend()); - }; - - document.addEventListener('byondstorageupdated', listener); - }); - } - return new HubStorageBackend(); - } - // TODO: Remove with 516 - if (testIndexedDb()) { - try { - const backend = new IndexedDbBackend(); - await backend.dbPromise; - return backend; - } catch {} - } - console.warn( - 'No supported storage backend found. Using in-memory storage.', - ); - return new MemoryBackend(); - })(); - } - - async get(key) { - const backend = await this.backendPromise; - return backend.get(key); - } - - async set(key, value) { - const backend = await this.backendPromise; - return backend.set(key, value); - } - - async remove(key) { - const backend = await this.backendPromise; - return backend.remove(key); - } - - async clear() { - const backend = await this.backendPromise; - return backend.clear(); - } -} - -export const storage = new StorageProxy(); diff --git a/tgui/packages/common/storage.ts b/tgui/packages/common/storage.ts new file mode 100644 index 00000000000..2af369fc71b --- /dev/null +++ b/tgui/packages/common/storage.ts @@ -0,0 +1,261 @@ +/** + * Browser-agnostic abstraction of key-value web storage. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const IMPL_MEMORY = 0; +export const IMPL_HUB_STORAGE = 1; +export const IMPL_IFRAME_INDEXED_DB = 2; + +type StorageImplementation = + | typeof IMPL_MEMORY + | typeof IMPL_HUB_STORAGE + | typeof IMPL_IFRAME_INDEXED_DB; + +type StorageBackend = { + impl: StorageImplementation; + get(key: string): Promise; + set(key: string, value: any): Promise; + remove(key: string): Promise; + clear(): Promise; +}; + +const testGeneric = (testFn: () => boolean) => (): boolean => { + try { + return Boolean(testFn()); + } catch { + return false; + } +}; + +const testHubStorage = testGeneric( + () => window.hubStorage && !!window.hubStorage.getItem, +); + +class MemoryBackend implements StorageBackend { + private store: Record; + public impl: StorageImplementation; + + constructor() { + this.impl = IMPL_MEMORY; + this.store = {}; + } + + async get(key: string): Promise { + return this.store[key]; + } + + async set(key: string, value: any): Promise { + this.store[key] = value; + } + + async remove(key: string): Promise { + this.store[key] = undefined; + } + + async clear(): Promise { + this.store = {}; + } +} + +class HubStorageBackend implements StorageBackend { + public impl: StorageImplementation; + + constructor() { + this.impl = IMPL_HUB_STORAGE; + } + + async get(key: string): Promise { + const value = await window.hubStorage.getItem(key); + if (typeof value === 'string') { + return JSON.parse(value); + } + return undefined; + } + + async set(key: string, value: any): Promise { + window.hubStorage.setItem(key, JSON.stringify(value)); + } + + async remove(key: string): Promise { + window.hubStorage.removeItem(key); + } + + async clear(): Promise { + window.hubStorage.clear(); + } +} + +class IFrameIndexedDbBackend implements StorageBackend { + public impl: StorageImplementation; + + private documentElement: HTMLIFrameElement; + private iframeWindow: Window; + + constructor() { + this.impl = IMPL_IFRAME_INDEXED_DB; + } + + async ready(): Promise { + const iframe = document.createElement('iframe'); + iframe.style.display = 'none'; + iframe.src = Byond.storageCdn; + + const completePromise: Promise = new Promise((resolve) => { + iframe.onload = () => resolve(true); + }); + + this.documentElement = document.body.appendChild(iframe); + if (!this.documentElement.contentWindow) { + return new Promise((res) => res(false)); + } + + this.iframeWindow = this.documentElement.contentWindow; + + return completePromise; + } + + async get(key: string): Promise { + const promise = new Promise((resolve) => { + window.addEventListener('message', (message) => { + if (message.data.key && message.data.key === key) { + resolve(message.data.value); + } + }); + }); + + this.iframeWindow.postMessage({ type: 'get', key: key }, '*'); + return promise; + } + + async set(key: string, value: any): Promise { + this.iframeWindow.postMessage({ type: 'set', key: key, value: value }, '*'); + } + + async remove(key: string): Promise { + this.iframeWindow.postMessage({ type: 'remove', key: key }, '*'); + } + + async clear(): Promise { + this.iframeWindow.postMessage({ type: 'clear' }, '*'); + } + + async ping(): Promise { + const promise: Promise = new Promise((resolve) => { + window.addEventListener('message', (message) => { + if (message.data === true) { + resolve(true); + } + }); + + setTimeout(() => resolve(false), 100); + }); + + this.iframeWindow.postMessage({ type: 'ping' }, '*'); + return promise; + } + + async destroy(): Promise { + document.body.removeChild(this.documentElement); + } +} + +/** + * Web Storage Proxy object, which selects the best backend available + * depending on the environment. + */ +class StorageProxy implements StorageBackend { + private backendPromise: Promise; + public impl: StorageImplementation = IMPL_MEMORY; + + constructor() { + this.backendPromise = (async () => { + if (testHubStorage()) { + return new HubStorageBackend(); + } + + if (Byond.storageCdn) { + const iframe = new IFrameIndexedDbBackend(); + const iframeReady = await iframe.ready(); + + if (iframeReady && (await iframe.ping()) === true) { + if (await iframe.get('byondstorage-migrated')) return iframe; + + Byond.winset(null, 'browser-options', '+byondstorage'); + + await new Promise((resolve) => { + document.addEventListener('byondstorageupdated', async () => { + setTimeout(() => { + const hub = new HubStorageBackend(); + + for (const setting of [ + 'panel-settings', + 'chat-state', + 'chat-messages', + ]) { + hub + .get(setting) + .then((settings) => iframe.set(setting, settings)); + } + + iframe.set('byondstorage-migrated', true); + Byond.winset(null, 'browser-options', '-byondstorage'); + + resolve(); + }, 1); + }); + }); + + return iframe; + } + + iframe.destroy(); + + } + + if (Byond.IS_BYOND) { + Byond.winset(null, 'browser-options', '+byondstorage'); + + return new Promise((resolve) => { + const listener = () => { + document.removeEventListener('byondstorageupdated', listener); + resolve(new HubStorageBackend()); + }; + + document.addEventListener('byondstorageupdated', listener); + }); + } + + console.warn( + 'No supported storage backend found. Using in-memory storage.', + ); + + return new MemoryBackend(); + })(); + } + + async get(key: string): Promise { + const backend = await this.backendPromise; + return backend.get(key); + } + + async set(key: string, value: any): Promise { + const backend = await this.backendPromise; + return backend.set(key, value); + } + + async remove(key: string): Promise { + const backend = await this.backendPromise; + return backend.remove(key); + } + + async clear(): Promise { + const backend = await this.backendPromise; + return backend.clear(); + } +} + +export const storage = new StorageProxy(); diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs deleted file mode 100644 index 97ca67c6ea4..00000000000 --- a/tgui/packages/common/string.babel-plugin.cjs +++ /dev/null @@ -1,73 +0,0 @@ -/** - * This plugin saves overall about 10KB on the final bundle size, so it's - * sort of worth it. - * - * We are using a .cjs extension because: - * - * 1. Webpack CLI only supports CommonJS modules; - * 2. tgui-dev-server supports both, but we still need to signal NodeJS - * to import it as a CommonJS module, hence .cjs extension. - * - * We need to copy-paste the whole "multiline" function because we can't - * synchronously import an ES module from a CommonJS module. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Removes excess whitespace and indentation from the string. - */ -const multiline = (str) => { - const lines = str.split('\n'); - // Determine base indentation - let minIndent; - for (let line of lines) { - for (let indent = 0; indent < line.length; indent++) { - const char = line[indent]; - if (char !== ' ') { - if (minIndent === undefined || indent < minIndent) { - minIndent = indent; - } - break; - } - } - } - if (!minIndent) { - minIndent = 0; - } - // Remove this base indentation and trim the resulting string - // from both ends. - return lines - .map((line) => line.substr(minIndent).trimRight()) - .join('\n') - .trim(); -}; - -const StringPlugin = (ref) => { - return { - visitor: { - TaggedTemplateExpression: (path) => { - if (path.node.tag.name === 'multiline') { - const { quasi } = path.node; - if (quasi.expressions.length > 0) { - throw new Error('Multiline tag does not support expressions!'); - } - if (quasi.quasis.length > 1) { - throw new Error('Quasis is longer than 1'); - } - const { value } = quasi.quasis[0]; - value.raw = multiline(value.raw); - value.cooked = multiline(value.cooked); - path.replaceWith(quasi); - } - }, - }, - }; -}; - -module.exports = { - __esModule: true, - default: StringPlugin, -}; diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js deleted file mode 100644 index 5906d83cb84..00000000000 --- a/tgui/packages/common/string.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Removes excess whitespace and indentation from the string. - */ -export const multiline = (str) => { - if (Array.isArray(str)) { - // Small stub to allow usage as a template tag - return multiline(str.join('')); - } - const lines = str.split('\n'); - // Determine base indentation - let minIndent; - for (let line of lines) { - for (let indent = 0; indent < line.length; indent++) { - const char = line[indent]; - if (char !== ' ') { - if (minIndent === undefined || indent < minIndent) { - minIndent = indent; - } - break; - } - } - } - if (!minIndent) { - minIndent = 0; - } - // Remove this base indentation and trim the resulting string - // from both ends. - return lines - .map((line) => line.substr(minIndent).trimRight()) - .join('\n') - .trim(); -}; - -/** - * Creates a glob pattern matcher. - * - * Matches strings with wildcards. - * - * Example: createGlobPattern('*@domain')('user@domain') === true - */ -export const createGlobPattern = (pattern) => { - const escapeString = (str) => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); - // prettier-ignore - const regex = new RegExp('^' - + pattern.split(/\*+/).map(escapeString).join('.*') - + '$'); - return (str) => regex.test(str); -}; - -/** - * Creates a search terms matcher. - * - * Returns true if given string matches the search text. - * - * @template T - * @param {string} searchText - * @param {(obj: T) => string} stringifier - * @returns {(obj: T) => boolean} - */ -export const createSearch = (searchText, stringifier) => { - const preparedSearchText = searchText.toLowerCase().trim(); - return (obj) => { - if (!preparedSearchText) { - return true; - } - const str = stringifier ? stringifier(obj) : obj; - if (!str) { - return false; - } - return str.toLowerCase().includes(preparedSearchText); - }; -}; - -/** - * Capitalizes a word and lowercases the rest. - * @param {string} str - * @returns {string} capitalized string - * - * @example capitalize('heLLo') === 'Hello' - */ -export const capitalize = (str) => { - // Handle array - if (Array.isArray(str)) { - return str.map(capitalize); - } - // Handle string - return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); -}; - -/** - * Similar to capitalize, this takes a string and replaces all first letters - * of any words. - * - * @param {string} str - * @return {string} The string with the first letters capitalized. - * - * @example capitalizeAll('heLLo woRLd') === 'HeLLo WoRLd' - */ -export const capitalizeAll = (str) => { - return str.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()); -}; - -/** - * Capitalizes only the first letter of the str. - * - * @param {string} str - * @return {string} capitalized string - * - * @example capitalizeFirst('heLLo woRLd') === 'HeLLo woRLd' - */ -export const capitalizeFirst = (str) => { - return str.replace(/^\w/, (letter) => letter.toUpperCase()); -}; - -export const toTitleCase = (str) => { - // Handle array - if (Array.isArray(str)) { - return str.map(toTitleCase); - } - // Pass non-string - if (typeof str !== 'string') { - return str; - } - // Handle string - const WORDS_UPPER = ['Id', 'Tv']; - // prettier-ignore - const WORDS_LOWER = [ - 'A', 'An', 'And', 'As', 'At', 'But', 'By', 'For', 'For', 'From', 'In', - 'Into', 'Near', 'Nor', 'Of', 'On', 'Onto', 'Or', 'The', 'To', 'With', - ]; - let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, (str) => { - return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase(); - }); - for (let word of WORDS_LOWER) { - const regex = new RegExp('\\s' + word + '\\s', 'g'); - currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); - } - for (let word of WORDS_UPPER) { - const regex = new RegExp('\\b' + word + '\\b', 'g'); - currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); - } - return currentStr; -}; - -/** - * Decodes HTML entities, and removes unnecessary HTML tags. - * - * @param {String} str Encoded HTML string - * @return {String} Decoded HTML string - */ -export const decodeHtmlEntities = (str) => { - if (!str) { - return str; - } - const translate_re = /&(nbsp|amp|quot|lt|gt|apos);/g; - const translate = { - nbsp: ' ', - amp: '&', - quot: '"', - lt: '<', - gt: '>', - apos: "'", - }; - // prettier-ignore - return str - // Newline tags - .replace(/
/gi, '\n') - .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') - // Basic entities - .replace(translate_re, (match, entity) => translate[entity]) - // Decimal entities - .replace(/&#?([0-9]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 10); - return String.fromCharCode(num); - }) - // Hex entities - .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 16); - return String.fromCharCode(num); - }); -}; - -/** - * Converts an object into a query string, - */ -// prettier-ignore -export const buildQueryString = obj => Object.keys(obj) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(obj[key])) - .join('&'); diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.js deleted file mode 100644 index 715b713e027..00000000000 --- a/tgui/packages/common/timer.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Returns a function, that, as long as it continues to be invoked, will - * not be triggered. The function will be called after it stops being - * called for N milliseconds. If `immediate` is passed, trigger the - * function on the leading edge, instead of the trailing. - */ -export const debounce = (fn, time, immediate = false) => { - let timeout; - return (...args) => { - const later = () => { - timeout = null; - if (!immediate) { - fn(...args); - } - }; - const callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, time); - if (callNow) { - fn(...args); - } - }; -}; - -/** - * Returns a function, that, when invoked, will only be triggered at most once - * during a given window of time. - */ -export const throttle = (fn, time) => { - let previouslyRun, queuedToRun; - return function invokeFn(...args) { - const now = Date.now(); - queuedToRun = clearTimeout(queuedToRun); - if (!previouslyRun || now - previouslyRun >= time) { - fn.apply(null, args); - previouslyRun = now; - } else { - queuedToRun = setTimeout( - invokeFn.bind(null, ...args), - time - (now - previouslyRun), - ); - } - }; -}; - -/** - * Suspends an asynchronous function for N milliseconds. - * - * @param {number} time - */ -export const sleep = (time) => - new Promise((resolve) => setTimeout(resolve, time)); diff --git a/tgui/packages/common/type-safety.test.ts b/tgui/packages/common/type-safety.test.ts new file mode 100644 index 00000000000..f572a19781d --- /dev/null +++ b/tgui/packages/common/type-safety.test.ts @@ -0,0 +1,53 @@ +import { describe, it } from 'bun:test'; +import assert from 'node:assert/strict'; +import * as z from 'zod'; +import { smoothMerge } from './type-safety'; + +describe('smoothMerge', () => { + it('merges valid fields from source into target', () => { + const schema = z.object({ + a: z.string(), + b: z.number(), + }); + + const source = { a: 'hello', b: 'not a number', c: true }; + const target = { a: 'default', b: 42 }; + + const result = smoothMerge({ schema, source, target }); + assert.deepEqual(result, { a: 'hello', b: 42 }); + }); + + it('returns target if source is empty', () => { + const schema = z.object({ + a: z.string(), + }); + + const source = {}; + const target = { a: 'default' }; + const result = smoothMerge({ schema, source, target }); + assert.deepEqual(result, target); + }); + + it('completely ignores an object if its not in the schema', () => { + const schema = z.object({ + a: z.string(), + b: z.number(), + }); + + const source = { + c: 1, + d: [1, 2, 3], + }; + + const target = { + a: 'default', + b: 42, + }; + + const result = smoothMerge({ schema, source, target }); + assert.deepEqual(result, { + a: 'default', + b: 42, + }); + }); +}); diff --git a/tgui/packages/common/type-safety.ts b/tgui/packages/common/type-safety.ts new file mode 100644 index 00000000000..71e1c6aa568 --- /dev/null +++ b/tgui/packages/common/type-safety.ts @@ -0,0 +1,56 @@ +import type { ZodObject } from 'zod'; + +type MergeInput = { + /** + * A zod object. + * @see Writing a Zod Schema: https://zod.dev/basics + */ + schema: ZodObject; + /** The input getting merged */ + source: Record; + /** The defaults, which is the shape of the output */ + target: TObj; +}; + +/** + * Merges two objects together while validating the output against a zod schema. + * Different than just parsing - it does not throw errors, it simply discards + * invalid fields and invalid value types. + * + * @example + * + * ```ts + * const schema = z.object({ + * a: z.string(), + * b: z.number(), + * }); + * + * const source = { a: 'hello', b: 'not a number', c: true }; + * const target = { a: 'default', b: 42 }; + * + * const result = smoothMerge({ schema, source, target }); + * // result is { a: 'hello', b: 42 } + * ``` + */ +export function smoothMerge>( + input: MergeInput, +): TObj { + if (Object.keys(input.source).length === 0) return input.target; + + const validated = {}; + + for (const [key, value] of Object.entries(input.source)) { + // Skip keys that are not in the schema + if (!(key in input.schema.shape)) continue; + + const fieldSchema = input.schema.shape[key]; + const result = fieldSchema.safeParse(value); + + // Only assign fields which pass validation + if (result.success) { + validated[key] = result.data; + } + } + + return { ...input.target, ...validated }; +} diff --git a/tgui/packages/common/types.ts b/tgui/packages/common/types.ts deleted file mode 100644 index e219bd3b7e1..00000000000 --- a/tgui/packages/common/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Returns the arguments of a function F as an array. - */ -// prettier-ignore -export type ArgumentsOf - = F extends (...args: infer A) => unknown ? A : never; diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.js deleted file mode 100644 index 33d765fcab0..00000000000 --- a/tgui/packages/common/uuid.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Creates a UUID v4 string - * - * @return {string} - */ -export const createUuid = () => { - let d = new Date().getTime(); - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - const r = ((d + Math.random() * 16) % 16) | 0; - d = Math.floor(d / 16); - // prettier-ignore - return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); - }); -}; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js deleted file mode 100644 index b1f85f7429d..00000000000 --- a/tgui/packages/common/vector.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * N-dimensional vector manipulation functions. - * - * Vectors are plain number arrays, i.e. [x, y, z]. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { map, reduce, zipWith } from './collections'; - -const ADD = (a, b) => a + b; -const SUB = (a, b) => a - b; -const MUL = (a, b) => a * b; -const DIV = (a, b) => a / b; - -export const vecAdd = (...vecs) => { - return reduce((a, b) => zipWith(ADD)(a, b))(vecs); -}; - -export const vecSubtract = (...vecs) => { - return reduce((a, b) => zipWith(SUB)(a, b))(vecs); -}; - -export const vecMultiply = (...vecs) => { - return reduce((a, b) => zipWith(MUL)(a, b))(vecs); -}; - -export const vecDivide = (...vecs) => { - return reduce((a, b) => zipWith(DIV)(a, b))(vecs); -}; - -export const vecScale = (vec, n) => { - return map((x) => x * n)(vec); -}; - -export const vecInverse = (vec) => { - return map((x) => -x)(vec); -}; - -export const vecLength = (vec) => { - return Math.sqrt(reduce(ADD)(zipWith(MUL)(vec, vec))); -}; - -export const vecNormalize = (vec) => { - return vecDivide(vec, vecLength(vec)); -}; diff --git a/tgui/packages/common/vector.ts b/tgui/packages/common/vector.ts new file mode 100644 index 00000000000..78d22c35d11 --- /dev/null +++ b/tgui/packages/common/vector.ts @@ -0,0 +1,55 @@ +/** + * N-dimensional vector manipulation functions. + * + * Vectors are plain number arrays, i.e. [x, y, z]. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { zip } from 'es-toolkit'; +import { map, reduce } from 'es-toolkit/compat'; + +const ADD = (a: number, b: number): number => a + b; +const SUB = (a: number, b: number): number => a - b; +const MUL = (a: number, b: number): number => a * b; +const DIV = (a: number, b: number): number => a / b; + +export type Vector = number[]; + +// It's really not ideal to bypass the type system and use `as Vector` +// however, there isn't a more eloquent way to type these + +export const vecAdd = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, ADD)) as Vector; +}; + +export const vecSubtract = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, SUB)) as Vector; +}; + +export const vecMultiply = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, MUL)) as Vector; +}; + +export const vecDivide = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, DIV)) as Vector; +}; + +export const vecScale = (vec: Vector, n: number): Vector => { + return map(vec, (x) => x * n); +}; + +export const vecInverse = (vec: Vector): Vector => { + return map(vec, (x) => -x); +}; + +export const vecLength = (vec: Vector): number => { + return Math.sqrt(reduce(vecMultiply(vec, vec), ADD) as number); +}; + +export const vecNormalize = (vec: Vector): Vector => { + const length = vecLength(vec); + return map(vec, (c) => c / length); +}; diff --git a/tgui/packages/tgfont/README_ICON_TUTORIAL.txt b/tgui/packages/tgfont/README_ICON_TUTORIAL.md similarity index 100% rename from tgui/packages/tgfont/README_ICON_TUTORIAL.txt rename to tgui/packages/tgfont/README_ICON_TUTORIAL.md diff --git a/tgui/packages/tgfont/config.cjs b/tgui/packages/tgfont/config.cjs deleted file mode 100644 index 73d96ac6ce9..00000000000 --- a/tgui/packages/tgfont/config.cjs +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @file - * @copyright 2021 AnturK https://github.com/AnturK - * @license MIT - */ - -module.exports = { - name: 'tgfont', - inputDir: './icons', - normalize: true, - outputDir: './dist', - fontTypes: ['woff2', 'eot'], - assetTypes: ['css'], - prefix: 'tg', - formatOptions: { - preserveAspectRatio: true, - }, -}; diff --git a/tgui/packages/tgfont/icons/air-tank-slash.svg b/tgui/packages/tgfont/icons/air-tank-slash.svg index 37ffcb5b880..8c33265f334 100644 --- a/tgui/packages/tgfont/icons/air-tank-slash.svg +++ b/tgui/packages/tgfont/icons/air-tank-slash.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/air-tank.svg b/tgui/packages/tgfont/icons/air-tank.svg index 7d1e0774719..b55f4e7b3aa 100644 --- a/tgui/packages/tgfont/icons/air-tank.svg +++ b/tgui/packages/tgfont/icons/air-tank.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/bad-touch.svg b/tgui/packages/tgfont/icons/bad-touch.svg index 795f4c2d840..dba8df87497 100644 --- a/tgui/packages/tgfont/icons/bad-touch.svg +++ b/tgui/packages/tgfont/icons/bad-touch.svg @@ -1,46 +1 @@ - -image/svg+xml - - - - - - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/image-minus.svg b/tgui/packages/tgfont/icons/image-minus.svg index 8c3231917ff..6fb74bd54fb 100644 --- a/tgui/packages/tgfont/icons/image-minus.svg +++ b/tgui/packages/tgfont/icons/image-minus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/image-plus.svg b/tgui/packages/tgfont/icons/image-plus.svg index 1658509429e..e8b9bec62e7 100644 --- a/tgui/packages/tgfont/icons/image-plus.svg +++ b/tgui/packages/tgfont/icons/image-plus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/nanotrasen-logo.svg b/tgui/packages/tgfont/icons/nanotrasen-logo.svg index b74a415d4d2..7cdc98573f4 100644 --- a/tgui/packages/tgfont/icons/nanotrasen-logo.svg +++ b/tgui/packages/tgfont/icons/nanotrasen-logo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/non-binary.svg b/tgui/packages/tgfont/icons/non-binary.svg index c708c26d985..c2178ec1b36 100644 --- a/tgui/packages/tgfont/icons/non-binary.svg +++ b/tgui/packages/tgfont/icons/non-binary.svg @@ -1,44 +1 @@ - -image/svg+xml - - - - - - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/prosthetic-full.svg b/tgui/packages/tgfont/icons/prosthetic-full.svg index 7d221244edc..f9054947044 100644 --- a/tgui/packages/tgfont/icons/prosthetic-full.svg +++ b/tgui/packages/tgfont/icons/prosthetic-full.svg @@ -1,27 +1 @@ - -image/svg+xml - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/prosthetic-leg.svg b/tgui/packages/tgfont/icons/prosthetic-leg.svg index f4e16dccfb6..9db9fb5cde4 100644 --- a/tgui/packages/tgfont/icons/prosthetic-leg.svg +++ b/tgui/packages/tgfont/icons/prosthetic-leg.svg @@ -1,35 +1 @@ - -image/svg+xml - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/sound-minus.svg b/tgui/packages/tgfont/icons/sound-minus.svg index df51179d4b5..1da5d4fa5b0 100644 --- a/tgui/packages/tgfont/icons/sound-minus.svg +++ b/tgui/packages/tgfont/icons/sound-minus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/sound-plus.svg b/tgui/packages/tgfont/icons/sound-plus.svg index c5f40d53b56..33be2c9176f 100644 --- a/tgui/packages/tgfont/icons/sound-plus.svg +++ b/tgui/packages/tgfont/icons/sound-plus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/syndicate-logo.svg b/tgui/packages/tgfont/icons/syndicate-logo.svg index 423dd7c6275..8086d3319a1 100644 --- a/tgui/packages/tgfont/icons/syndicate-logo.svg +++ b/tgui/packages/tgfont/icons/syndicate-logo.svg @@ -1,13 +1 @@ - - - - - - image/svg+xml - - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/mkdist.cjs b/tgui/packages/tgfont/mkdist.cjs deleted file mode 100644 index 85634bd265d..00000000000 --- a/tgui/packages/tgfont/mkdist.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @file - * @copyright 2021 AnturK https://github.com/AnturK - * @license MIT - */ - -// Change working directory to project root -process.chdir(__dirname); - -// Silently make a dist folder -try { - require('fs').mkdirSync('dist'); -} catch (err) {} diff --git a/tgui/packages/tgfont/package.json b/tgui/packages/tgfont/package.json index 9459aa12969..e98f7aa5b43 100644 --- a/tgui/packages/tgfont/package.json +++ b/tgui/packages/tgfont/package.json @@ -1,11 +1,13 @@ { - "private": true, - "name": "tgfont", - "version": "1.0.0", - "scripts": { - "tgfont:build": "node mkdist.cjs && fantasticon --config config.cjs" - }, - "dependencies": { - "fantasticon": "^1.2.2" - } + "private": true, + "name": "tgfont", + "type": "module", + "version": "2.0.0", + "scripts": { + "tgfont:build": "svgo icons && node svgtofont.mjs" + }, + "dependencies": { + "svgo": "^3.3.2", + "svgtofont": "^6.3.2" + } } diff --git a/tgui/packages/tgfont/static/tgfont.css b/tgui/packages/tgfont/static/tgfont.css index 3af3e9bbe02..6bdf310a502 100644 --- a/tgui/packages/tgfont/static/tgfont.css +++ b/tgui/packages/tgfont/static/tgfont.css @@ -1,56 +1,67 @@ @font-face { - font-family: 'tgfont'; - src: - url('./tgfont.woff2?ac4105718bed41e8015b97ba87c9ec71') format('woff2'), - url('./tgfont.eot?ac4105718bed41e8015b97ba87c9ec71#iefix') - format('embedded-opentype'); + font-family: "tgfont"; + src: url("tgfont.woff2?t=1747971548188") format("woff2"); } -i[class^='tg-']:before, -i[class*=' tg-']:before { - font-family: tgfont !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +[class^="tg-"], +[class*=" tg-"] { + /* biome-ignore lint/complexity/noImportantStyles: Just leave it */ + font-family: "tgfont" !important; + font-size: inherit; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } -.tg-air-tank-slash:before { - content: '\f101'; +:root { + /* biome-ignore-start lint/suspicious/noUselessEscapeInString: The escapes are needed */ + --tg-air-tank-slash: "\ea01"; + --tg-air-tank: "\ea02"; + --tg-bad-touch: "\ea03"; + --tg-image-minus: "\ea04"; + --tg-image-plus: "\ea05"; + --tg-nanotrasen-logo: "\ea06"; + --tg-non-binary: "\ea07"; + --tg-prosthetic-full: "\ea08"; + --tg-prosthetic-leg: "\ea09"; + --tg-sound-minus: "\ea0a"; + --tg-sound-plus: "\ea0b"; + --tg-syndicate-logo: "\ea0c"; + /* biome-ignore-end lint/suspicious/noUselessEscapeInString: The escapes are needed */ } -.tg-air-tank:before { - content: '\f102'; +.tg-air-tank-slash::before { + content: var(--tg-air-tank-slash); } -.tg-bad-touch:before { - content: '\f103'; +.tg-air-tank::before { + content: var(--tg-air-tank); } -.tg-image-minus:before { - content: '\f104'; +.tg-bad-touch::before { + content: var(--tg-bad-touch); } -.tg-image-plus:before { - content: '\f105'; +.tg-image-minus::before { + content: var(--tg-image-minus); } -.tg-nanotrasen-logo:before { - content: '\f106'; +.tg-image-plus::before { + content: var(--tg-image-plus); } -.tg-non-binary:before { - content: '\f107'; +.tg-nanotrasen-logo::before { + content: var(--tg-nanotrasen-logo); } -.tg-prosthetic-full:before { - content: '\f108'; +.tg-non-binary::before { + content: var(--tg-non-binary); } -.tg-prosthetic-leg:before { - content: '\f109'; +.tg-prosthetic-full::before { + content: var(--tg-prosthetic-full); } -.tg-sound-minus:before { - content: '\f10a'; +.tg-prosthetic-leg::before { + content: var(--tg-prosthetic-leg); } -.tg-sound-plus:before { - content: '\f10b'; +.tg-sound-minus::before { + content: var(--tg-sound-minus); } -.tg-syndicate-logo:before { - content: '\f10c'; +.tg-sound-plus::before { + content: var(--tg-sound-plus); +} +.tg-syndicate-logo::before { + content: var(--tg-syndicate-logo); } diff --git a/tgui/packages/tgfont/static/tgfont.eot b/tgui/packages/tgfont/static/tgfont.eot deleted file mode 100644 index 9b08d348391680c701c025db4d1e35df1b4acf74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4292 zcmd^CU2J1V6`q+pGxyKF_KkmT;y8}i&f003I2${*+ucpJs>OGsKSWQd<2x|sKU;j5BfK1pN#I?w`CF?#{mdue7Ifjv&=Ypgbv&jz8$g#5z zK6GdH>qnme@itH|-1p#YdEsy8eungsH*yK{C(uuC zG#=lim_b~`*P&u`@{}reDUb3JBmrQn7hZGq%-ImgD^obdSS8wiYh927Jh{6 zsV<5dx8T%8!cLz#cY!#qMz2j$g!`kx_(7bu)>j+8G&PfgPmNMgD3Lyf9xc%4hye0D z`88-$gZ4QD`5vXje(qrGP&vPH*D`s%Px~R?x>48?ta6=;mLOHZ&fXq<8Z7``+auS& z@>jrb_jc(5=m7GTKMi^yD+o~@hOYDxUnU{TpepIpXyFmiIZ^qdECRhBf>hF{szyJs zl7W}QGD&n;Y+{~`WF%Bs{{LR!2b7onT5VDIE&$(~$h^MFKGh-`3RG13@T&sl-##Lx zKxIxJ9#x=ns;>tCpOZfFSb@sGz8L`GK>CQF0u{-=9ROm3CLpn{LrvGA} zV9&B&Xv^9Q+PnNIB^z;^qEo;kWQ^QOW^mY)38{O!%oXNOQN38Nm6P#$VV35KGCod| z<=T8P>99h*c8b>Oi{Jo{r>9RicFqgE`|ab;hmH&v4L4<5oYys5e^NJ6p)l9NOd3+2 zq2_I|cVZ8paKa-Kp~t^_{QIGie8!B8YTV){xM5EkV?F0W85 z)J{;vek;w%i004?Jw+D*^JTEg3{|e4rS+tznCPS)3x{LjPeoISv`*8LquKDCqxXxG z@rP5V-Csq$DE`$#USsSu*LB{|Lo8;^Nu62ZHr=8^qmIXfZLyTbN5aJ^q09I6aLjRH zyExeR|i1Aj!wFqtA1atAz;&&e?wPbyOv=zO7=$X6>cFsbJX3lxJ1cYjbv z%BlRTdHE{xZ=CuS-C4#mTvb1~n+txNpBLt~Gz|H3X}kmthojM_zT+{;yaiRg!nvyn zp}Cx&;&+2RZHn`T+8boGHDH&Lh z*w?i3KihId@F*8Yltnktk7id+S(SrfnmB-dL>o1gtN3D0lW|0*iZ~r|z30cL>h7Cd zEQk_v5kX6iQIVkzMUo<3)P9sp$3daXnwIF$?V*&42ZB5H}m<=c70glMKY(UC$5XFWYFb*e>- z`-Nd@v54k{lT2tKOEQf+l-nVVk4Y+ZTV{mD9Ii2LT1;cYW$N=6-1}g$PGTevkLlMp zs+U}(IBZJPyG{yr?6vum>KHgV&qIb0`pNZ^g|c}=UXaGTpoV-y8nkia6gjX?p430$ z$?ze%(CUpHe_-?f^pHxg1Y6r*{rWEF{L)S8sXGD6Tey3l!)f(ta*2Enx4bnxD3G@f zO~f-i5l6&Jw3tsI9~K$Bfjq!(zFy0yJgQU+MWlyUi6gI&CPico_-pm*BCS@ca9(1c ztAwwR)W?x+sx5j!``OW{q@P zGiGu@85&d?Grde*!?;~V^izzAm}&A+#`tAZ^%@{-!FdGKz94sH8eIsEO;3O+z$H9pW_Bw`O{c_M2t9G}u-CiCD3~(jT>0WIwuP-66zC1$y1M*uO>;M1& diff --git a/tgui/packages/tgfont/static/tgfont.woff2 b/tgui/packages/tgfont/static/tgfont.woff2 index d443fb92c91378605fdae10ae5c1c308e61a187b..2586080a0d9b8da3491d4c1e47d2d89ec441f7e5 100644 GIT binary patch literal 2472 zcmV;Z30L-aPew8T0RR91012o73jhEB01`w100~$C0RR9100000000000000000000 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 diff --git a/tgui/packages/tgfont/svgtofont.mjs b/tgui/packages/tgfont/svgtofont.mjs new file mode 100644 index 00000000000..6f5c5a3fb24 --- /dev/null +++ b/tgui/packages/tgfont/svgtofont.mjs @@ -0,0 +1,20 @@ +import svgtofont from 'svgtofont'; + +/** @type {import('svgtofont').SvgToFontOptions} */ +const config = { + classNamePrefix: 'tg', + css: { + include: /\.css$/, + }, + dist: './dist', + emptyDist: true, + excludeFormat: ['eot', 'svg', 'symbol.svg', 'ttf', 'woff'], + fontName: 'tgfont', + src: './icons', + svgicons2svgfont: { + normalize: true, + }, + useCSSVars: true, +}; + +svgtofont(config).catch(console.error); diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx deleted file mode 100644 index 377848fe3ae..00000000000 --- a/tgui/packages/tgui-bench/entrypoint.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @file - * @copyright 2021 Aleksej Komarov - * @license MIT - */ - -import { setupGlobalEvents } from 'tgui/events'; -import 'tgui/styles/main.scss'; -import Benchmark from './lib/benchmark'; - -const sendMessage = (obj: any) => { - const req = new XMLHttpRequest(); - req.open('POST', `/message`, false); - req.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - req.timeout = 250; - req.send(JSON.stringify(obj)); -}; - -const setupApp = async () => { - // Delay setup - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setupApp); - return; - } - - setupGlobalEvents({ - ignoreWindowFocus: true, - }); - - const requireTest = require.context('./tests', false, /\.test\./); - - for (const file of requireTest.keys()) { - sendMessage({ type: 'suite-start', file }); - try { - const tests = requireTest(file); - await new Promise((resolve) => { - const suite = new Benchmark.Suite(file, { - onCycle(e) { - sendMessage({ - type: 'suite-cycle', - message: String(e.target), - }); - }, - onComplete() { - // This message is somewhat useless, but leaving it here in case - // someone has an idea how to show more useful data. - // sendMessage({ - // type: 'suite-complete', - // message: 'Fastest is ' + this.filter('fastest').map('name'), - // }); - resolve(); - }, - onError(e) { - sendMessage({ type: 'error', e }); - resolve(); - }, - }); - for (const [name, fn] of Object.entries(tests)) { - if (typeof fn === 'function') { - suite.add(name, fn); - } - } - suite.run(); - }); - } catch (error) { - sendMessage({ type: 'error', error }); - } - } - sendMessage({ type: 'finished' }); -}; - -setupApp(); diff --git a/tgui/packages/tgui-bench/index.js b/tgui/packages/tgui-bench/index.js deleted file mode 100644 index 9f6aee20996..00000000000 --- a/tgui/packages/tgui-bench/index.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @file - * @copyright 2021 Aleksej Komarov - * @license MIT - */ - -const fs = require('fs'); -const path = require('path'); -const { exec } = require('child_process'); -const { fastify } = require('fastify'); - -process.chdir(__dirname); - -const sleep = (time) => new Promise((resolve) => setTimeout(resolve, time)); - -const IE_TIMEOUT_SECONDS = 60; - -const setup = async () => { - const server = fastify(); - - let hasResponded = false; - - let assets = ''; - assets += `\n`; - - const publicDir = path.resolve(__dirname, '../../public'); - const page = fs - .readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8') - .replace('\n', assets); - - server.register(require('fastify-static'), { - root: publicDir, - }); - - server.get('/', async (req, res) => { - return res.type('text/html').send(page); - }); - - server.post('/message', async (req, res) => { - if (!hasResponded) { - process.stdout.write('\n'); - hasResponded = true; - } - const { type, ...rest } = req.body; - if (type === 'suite-start') { - console.log(`=> Test '${rest.file}'`); - return res.send(); - } - if (type === 'suite-cycle') { - console.log(rest.message); - return res.send(); - } - if (type === 'suite-complete') { - console.log(rest.message); - return res.send(); - } - if (type === 'finished') { - await res.send(); - process.exit(0); - } - // Unhandled message - console.log(req.body); - return res.send(); - }); - - try { - await server.listen(3002, '0.0.0.0'); - } catch (err) { - console.error(err); - process.exit(1); - } - - if (process.platform === 'win32') { - exec(`start "" "iexplore" "http://127.0.0.1:3002"`); - } - - console.log('Waiting for Internet Explorer to respond.'); - for (let i = 0; i < IE_TIMEOUT_SECONDS; i++) { - await sleep(1000); - if (hasResponded) { - return; - } - process.stdout.write('.'); - } - process.stdout.write('\n'); - console.error('Did not receive a response, exiting.'); - process.exit(1); -}; - -setup(); diff --git a/tgui/packages/tgui-bench/lib/benchmark.d.ts b/tgui/packages/tgui-bench/lib/benchmark.d.ts deleted file mode 100644 index 3eac568d418..00000000000 --- a/tgui/packages/tgui-bench/lib/benchmark.d.ts +++ /dev/null @@ -1,219 +0,0 @@ -/* eslint-disable */ -// Type definitions for Benchmark v2.1.4 -// Project: https://benchmarkjs.com -// Definitions by: Asana -// Charlie Fish -// Blair Zajac -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -declare class Benchmark { - static filter(arr: T[], callback: (value: T) => any, thisArg?: any): T[]; - static filter(arr: T[], filter: string, thisArg?: any): T[]; - static formatNumber(num: number): string; - static join(obj: Object, separator1?: string, separator2?: string): string; - static invoke( - benches: Benchmark[], - name: string | Object, - ...args: any[] - ): any[]; - static runInContext(context: Object): Function; - - static each(obj: Object | any[], callback: Function, thisArg?: any): void; - static forEach(arr: T[], callback: (value: T) => any, thisArg?: any): void; - static forOwn(obj: Object, callback: Function, thisArg?: any): void; - static has(obj: Object, path: any[] | string): boolean; - static indexOf(arr: T[], value: T, fromIndex?: number): number; - static map(arr: T[], callback: (value: T) => K, thisArg?: any): K[]; - static reduce( - arr: T[], - callback: (accumulator: K, value: T) => K, - thisArg?: any, - ): K; - - static options: Benchmark.Options; - static platform: Benchmark.Platform; - static support: Benchmark.Support; - static version: string; - - constructor(fn: Function | string, options?: Benchmark.Options); - constructor(name: string, fn: Function | string, options?: Benchmark.Options); - constructor(name: string, options?: Benchmark.Options); - constructor(options: Benchmark.Options); - - id: number; - name: string; - count: number; - cycles: number; - hz: number; - compiled: Function | string; - error: Error; - fn: Function | string; - aborted: boolean; - running: boolean; - setup: Function | string; - teardown: Function | string; - - stats: Benchmark.Stats; - times: Benchmark.Times; - - abort(): Benchmark; - clone(options: Benchmark.Options): Benchmark; - compare(benchmark: Benchmark): number; - emit(type: string | Object): any; - listeners(type: string): Function[]; - off(type?: string, listener?: Function): Benchmark; - off(types: string[]): Benchmark; - on(type?: string, listener?: Function): Benchmark; - on(types: string[]): Benchmark; - reset(): Benchmark; - run(options?: Benchmark.Options): Benchmark; - toString(): string; -} - -declare namespace Benchmark { - export interface Options { - async?: boolean | undefined; - defer?: boolean | undefined; - delay?: number | undefined; - id?: string | undefined; - initCount?: number | undefined; - maxTime?: number | undefined; - minSamples?: number | undefined; - minTime?: number | undefined; - name?: string | undefined; - onAbort?: Function | undefined; - onComplete?: Function | undefined; - onCycle?: Function | undefined; - onError?: Function | undefined; - onReset?: Function | undefined; - onStart?: Function | undefined; - setup?: Function | string | undefined; - teardown?: Function | string | undefined; - fn?: Function | string | undefined; - queued?: boolean | undefined; - } - - export interface Platform { - description: string; - layout: string; - product: string; - name: string; - manufacturer: string; - os: string; - prerelease: string; - version: string; - toString(): string; - } - - export interface Support { - browser: boolean; - timeout: boolean; - decompilation: boolean; - } - - export interface Stats { - moe: number; - rme: number; - sem: number; - deviation: number; - mean: number; - sample: any[]; - variance: number; - } - - export interface Times { - cycle: number; - elapsed: number; - period: number; - timeStamp: number; - } - - export class Deferred { - constructor(clone: Benchmark); - - benchmark: Benchmark; - cycles: number; - elapsed: number; - timeStamp: number; - - resolve(): void; - } - - export interface Target { - options: Options; - async?: boolean | undefined; - defer?: boolean | undefined; - delay?: number | undefined; - initCount?: number | undefined; - maxTime?: number | undefined; - minSamples?: number | undefined; - minTime?: number | undefined; - name?: string | undefined; - fn?: Function | undefined; - id: number; - stats?: Stats | undefined; - times?: Times | undefined; - running: boolean; - count?: number | undefined; - compiled?: Function | undefined; - cycles?: number | undefined; - hz?: number | undefined; - } - - export class Event { - constructor(type: string | Object); - - aborted: boolean; - cancelled: boolean; - currentTarget: Object; - result: any; - target: Target; - timeStamp: number; - type: string; - } - - export class Suite { - static options: { name: string }; - - constructor(name?: string, options?: Options); - - length: number; - aborted: boolean; - running: boolean; - - abort(): Suite; - add(name: string, fn: Function | string, options?: Options): Suite; - add(fn: Function | string, options?: Options): Suite; - add(name: string, options?: Options): Suite; - add(options: Options): Suite; - clone(options: Options): Suite; - emit(type: string | Object): any; - filter(callback: Function | string): Suite; - join(separator?: string): string; - listeners(type: string): Function[]; - off(type?: string, callback?: Function): Suite; - off(types: string[]): Suite; - on(type?: string, callback?: Function): Suite; - on(types: string[]): Suite; - push(benchmark: Benchmark): number; - reset(): Suite; - run(options?: Options): Suite; - reverse(): any[]; - sort(compareFn: (a: any, b: any) => number): any[]; - splice(start: number, deleteCount?: number): any[]; - unshift(benchmark: Benchmark): number; - - each(callback: Function): Suite; - forEach(callback: Function): Suite; - indexOf(value: any): number; - map(callback: Function | string): any[]; - reduce(callback: Function, accumulator: T): T; - - pop(): Function; - shift(): Benchmark; - slice(start: number, end: number): any[]; - slice(start: number, deleteCount: number, ...values: any[]): any[]; - } -} - -export = Benchmark; diff --git a/tgui/packages/tgui-bench/lib/benchmark.js b/tgui/packages/tgui-bench/lib/benchmark.js deleted file mode 100644 index 0837678decf..00000000000 --- a/tgui/packages/tgui-bench/lib/benchmark.js +++ /dev/null @@ -1,2760 +0,0 @@ -/* eslint-disable */ -/*! - * Benchmark.js - * Copyright 2010-2016 Mathias Bynens - * Based on JSLitmus.js, copyright Robert Kieffer - * Modified by John-David Dalton - * Manually stripped from useless junk by /tg/station13 maintainers. - * Available under MIT license - */ -// prettier-ignore -module.exports = (function() { - 'use strict'; - - /** Used as a safe reference for `undefined` in pre ES5 environments. */ - var undefined; - - /** Used to determine if values are of the language type Object. */ - var objectTypes = { - 'function': true, - 'object': true - }; - - /** Used as a reference to the global object. */ - var root = (objectTypes[typeof window] && window) || this; - - /** Detect free variable `define`. */ - var freeDefine = false; - - /** Used to assign each benchmark an incremented id. */ - var counter = 0; - - /** Used to detect primitive types. */ - var rePrimitive = /^(?:boolean|number|string|undefined)$/; - - /** Used to make every compiled test unique. */ - var uidCounter = 0; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Date', 'Function', 'Math', 'Object', 'RegExp', 'String', '_', - 'clearTimeout', 'chrome', 'chromium', 'document', 'navigator', 'phantom', - 'platform', 'process', 'runtime', 'setTimeout' - ]; - - /** Used to avoid hz of Infinity. */ - var divisors = { - '1': 4096, - '2': 512, - '3': 64, - '4': 8, - '5': 0 - }; - - /** - * T-Distribution two-tailed critical values for 95% confidence. - * For more info see http://www.itl.nist.gov/div898/handbook/eda/section3/eda3672.htm. - */ - var tTable = { - '1': 12.706, '2': 4.303, '3': 3.182, '4': 2.776, '5': 2.571, '6': 2.447, - '7': 2.365, '8': 2.306, '9': 2.262, '10': 2.228, '11': 2.201, '12': 2.179, - '13': 2.16, '14': 2.145, '15': 2.131, '16': 2.12, '17': 2.11, '18': 2.101, - '19': 2.093, '20': 2.086, '21': 2.08, '22': 2.074, '23': 2.069, '24': 2.064, - '25': 2.06, '26': 2.056, '27': 2.052, '28': 2.048, '29': 2.045, '30': 2.042, - 'infinity': 1.96 - }; - - /** - * Critical Mann-Whitney U-values for 95% confidence. - * For more info see http://www.saburchill.com/IBbiology/stats/003.html. - */ - var uTable = { - '5': [0, 1, 2], - '6': [1, 2, 3, 5], - '7': [1, 3, 5, 6, 8], - '8': [2, 4, 6, 8, 10, 13], - '9': [2, 4, 7, 10, 12, 15, 17], - '10': [3, 5, 8, 11, 14, 17, 20, 23], - '11': [3, 6, 9, 13, 16, 19, 23, 26, 30], - '12': [4, 7, 11, 14, 18, 22, 26, 29, 33, 37], - '13': [4, 8, 12, 16, 20, 24, 28, 33, 37, 41, 45], - '14': [5, 9, 13, 17, 22, 26, 31, 36, 40, 45, 50, 55], - '15': [5, 10, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64], - '16': [6, 11, 15, 21, 26, 31, 37, 42, 47, 53, 59, 64, 70, 75], - '17': [6, 11, 17, 22, 28, 34, 39, 45, 51, 57, 63, 67, 75, 81, 87], - '18': [7, 12, 18, 24, 30, 36, 42, 48, 55, 61, 67, 74, 80, 86, 93, 99], - '19': [7, 13, 19, 25, 32, 38, 45, 52, 58, 65, 72, 78, 85, 92, 99, 106, 113], - '20': [8, 14, 20, 27, 34, 41, 48, 55, 62, 69, 76, 83, 90, 98, 105, 112, 119, 127], - '21': [8, 15, 22, 29, 36, 43, 50, 58, 65, 73, 80, 88, 96, 103, 111, 119, 126, 134, 142], - '22': [9, 16, 23, 30, 38, 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125, 133, 141, 150, 158], - '23': [9, 17, 24, 32, 40, 48, 56, 64, 73, 81, 89, 98, 106, 115, 123, 132, 140, 149, 157, 166, 175], - '24': [10, 17, 25, 33, 42, 50, 59, 67, 76, 85, 94, 102, 111, 120, 129, 138, 147, 156, 165, 174, 183, 192], - '25': [10, 18, 27, 35, 44, 53, 62, 71, 80, 89, 98, 107, 117, 126, 135, 145, 154, 163, 173, 182, 192, 201, 211], - '26': [11, 19, 28, 37, 46, 55, 64, 74, 83, 93, 102, 112, 122, 132, 141, 151, 161, 171, 181, 191, 200, 210, 220, 230], - '27': [11, 20, 29, 38, 48, 57, 67, 77, 87, 97, 107, 118, 125, 138, 147, 158, 168, 178, 188, 199, 209, 219, 230, 240, 250], - '28': [12, 21, 30, 40, 50, 60, 70, 80, 90, 101, 111, 122, 132, 143, 154, 164, 175, 186, 196, 207, 218, 228, 239, 250, 261, 272], - '29': [13, 22, 32, 42, 52, 62, 73, 83, 94, 105, 116, 127, 138, 149, 160, 171, 182, 193, 204, 215, 226, 238, 249, 260, 271, 282, 294], - '30': [13, 23, 33, 43, 54, 65, 76, 87, 98, 109, 120, 131, 143, 154, 166, 177, 189, 200, 212, 223, 235, 247, 258, 270, 282, 293, 305, 317] - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new `Benchmark` function using the given `context` object. - * - * @static - * @memberOf Benchmark - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `Benchmark` function. - */ - function runInContext(context) { - // Exit early if unable to acquire lodash. - var _ = context && context._ || require('lodash') || root._; - if (!_) { - Benchmark.runInContext = runInContext; - return Benchmark; - } - // Avoid issues with some ES3 environments that attempt to use values, named - // after built-in constructors like `Object`, for the creation of literals. - // ES5 clears this up by stating that literals must use built-in constructors. - // See http://es5.github.io/#x11.1.5. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Native constructor references. */ - var Array = context.Array, - Date = context.Date, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String; - - /** Used for `Array` and `Object` method references. */ - var arrayRef = [], - objectProto = Object.prototype; - - /** Native method shortcuts. */ - var abs = Math.abs, - clearTimeout = context.clearTimeout, - floor = Math.floor, - log = Math.log, - max = Math.max, - min = Math.min, - pow = Math.pow, - push = arrayRef.push, - setTimeout = context.setTimeout, - shift = arrayRef.shift, - slice = arrayRef.slice, - sqrt = Math.sqrt, - toString = objectProto.toString, - unshift = arrayRef.unshift; - - /** Detect DOM document object. */ - var doc = isHostType(context, 'document') && context.document; - - /** Used to access Node.js's high resolution timer. */ - var processObject = isHostType(context, 'process') && context.process; - - /** Used to prevent a `removeChild` memory leak in IE < 9. */ - var trash = doc && doc.createElement('div'); - - /** Used to integrity check compiled tests. */ - var uid = 'uid' + _.now(); - - /** Used to avoid infinite recursion when methods call each other. */ - var calledBy = {}; - - /** - * An object used to flag environments/features. - * - * @static - * @memberOf Benchmark - * @type Object - */ - var support = {}; - - (function() { - - /** - * Detect if running in a browser environment. - * - * @memberOf Benchmark.support - * @type boolean - */ - support.browser = doc && isHostType(context, 'navigator') && !isHostType(context, 'phantom'); - - /** - * Detect if the Timers API exists. - * - * @memberOf Benchmark.support - * @type boolean - */ - support.timeout = isHostType(context, 'setTimeout') && isHostType(context, 'clearTimeout'); - - /** - * Detect if function decompilation is support. - * - * @name decompilation - * @memberOf Benchmark.support - * @type boolean - */ - try { - // Safari 2.x removes commas in object literals from `Function#toString` results. - // See http://webk.it/11609 for more details. - // Firefox 3.6 and Opera 9.25 strip grouping parentheses from `Function#toString` results. - // See http://bugzil.la/559438 for more details. - support.decompilation = Function( - ('return (' + (function(x) { return { 'x': '' + (1 + x) + '', 'y': 0 }; }) + ')') - // Avoid issues with code added by Istanbul. - .replace(/__cov__[^;]+;/g, '') - )()(0).x === '1'; - } catch(e) { - support.decompilation = false; - } - }()); - - /** - * Timer object used by `clock()` and `Deferred#resolve`. - * - * @private - * @type Object - */ - var timer = { - - /** - * The timer namespace object or constructor. - * - * @private - * @memberOf timer - * @type {Function|Object} - */ - 'ns': Date, - - /** - * Starts the deferred timer. - * - * @private - * @memberOf timer - * @param {Object} deferred The deferred instance. - */ - 'start': null, // Lazy defined in `clock()`. - - /** - * Stops the deferred timer. - * - * @private - * @memberOf timer - * @param {Object} deferred The deferred instance. - */ - 'stop': null // Lazy defined in `clock()`. - }; - - /*------------------------------------------------------------------------*/ - - /** - * The Benchmark constructor. - * - * Note: The Benchmark constructor exposes a handful of lodash methods to - * make working with arrays, collections, and objects easier. The lodash - * methods are: - * [`each/forEach`](https://lodash.com/docs#forEach), [`forOwn`](https://lodash.com/docs#forOwn), - * [`has`](https://lodash.com/docs#has), [`indexOf`](https://lodash.com/docs#indexOf), - * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) - * - * @constructor - * @param {string} name A name to identify the benchmark. - * @param {Function|string} fn The test to benchmark. - * @param {Object} [options={}] Options object. - * @example - * - * // basic usage (the `new` operator is optional) - * var bench = new Benchmark(fn); - * - * // or using a name first - * var bench = new Benchmark('foo', fn); - * - * // or with options - * var bench = new Benchmark('foo', fn, { - * - * // displayed by `Benchmark#toString` if `name` is not available - * 'id': 'xyz', - * - * // called when the benchmark starts running - * 'onStart': onStart, - * - * // called after each run cycle - * 'onCycle': onCycle, - * - * // called when aborted - * 'onAbort': onAbort, - * - * // called when a test errors - * 'onError': onError, - * - * // called when reset - * 'onReset': onReset, - * - * // called when the benchmark completes running - * 'onComplete': onComplete, - * - * // compiled/called before the test loop - * 'setup': setup, - * - * // compiled/called after the test loop - * 'teardown': teardown - * }); - * - * // or name and options - * var bench = new Benchmark('foo', { - * - * // a flag to indicate the benchmark is deferred - * 'defer': true, - * - * // benchmark test function - * 'fn': function(deferred) { - * // call `Deferred#resolve` when the deferred test is finished - * deferred.resolve(); - * } - * }); - * - * // or options only - * var bench = new Benchmark({ - * - * // benchmark name - * 'name': 'foo', - * - * // benchmark test as a string - * 'fn': '[1,2,3,4].sort()' - * }); - * - * // a test's `this` binding is set to the benchmark instance - * var bench = new Benchmark('foo', function() { - * 'My name is '.concat(this.name); // "My name is foo" - * }); - */ - function Benchmark(name, fn, options) { - var bench = this; - - // Allow instance creation without the `new` operator. - if (!(bench instanceof Benchmark)) { - return new Benchmark(name, fn, options); - } - // Juggle arguments. - if (_.isPlainObject(name)) { - // 1 argument (options). - options = name; - } - else if (_.isFunction(name)) { - // 2 arguments (fn, options). - options = fn; - fn = name; - } - else if (_.isPlainObject(fn)) { - // 2 arguments (name, options). - options = fn; - fn = null; - bench.name = name; - } - else { - // 3 arguments (name, fn [, options]). - bench.name = name; - } - setOptions(bench, options); - - bench.id || (bench.id = ++counter); - bench.fn == null && (bench.fn = fn); - - bench.stats = cloneDeep(bench.stats); - bench.times = cloneDeep(bench.times); - } - - /** - * The Deferred constructor. - * - * @constructor - * @memberOf Benchmark - * @param {Object} clone The cloned benchmark instance. - */ - function Deferred(clone) { - var deferred = this; - if (!(deferred instanceof Deferred)) { - return new Deferred(clone); - } - deferred.benchmark = clone; - clock(deferred); - } - - /** - * The Event constructor. - * - * @constructor - * @memberOf Benchmark - * @param {Object|string} type The event type. - */ - function Event(type) { - var event = this; - if (type instanceof Event) { - return type; - } - return (event instanceof Event) - ? _.assign(event, { 'timeStamp': _.now() }, typeof type == 'string' ? { 'type': type } : type) - : new Event(type); - } - - /** - * The Suite constructor. - * - * Note: Each Suite instance has a handful of wrapped lodash methods to - * make working with Suites easier. The wrapped lodash methods are: - * [`each/forEach`](https://lodash.com/docs#forEach), [`indexOf`](https://lodash.com/docs#indexOf), - * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) - * - * @constructor - * @memberOf Benchmark - * @param {string} name A name to identify the suite. - * @param {Object} [options={}] Options object. - * @example - * - * // basic usage (the `new` operator is optional) - * var suite = new Benchmark.Suite; - * - * // or using a name first - * var suite = new Benchmark.Suite('foo'); - * - * // or with options - * var suite = new Benchmark.Suite('foo', { - * - * // called when the suite starts running - * 'onStart': onStart, - * - * // called between running benchmarks - * 'onCycle': onCycle, - * - * // called when aborted - * 'onAbort': onAbort, - * - * // called when a test errors - * 'onError': onError, - * - * // called when reset - * 'onReset': onReset, - * - * // called when the suite completes running - * 'onComplete': onComplete - * }); - */ - function Suite(name, options) { - var suite = this; - - // Allow instance creation without the `new` operator. - if (!(suite instanceof Suite)) { - return new Suite(name, options); - } - // Juggle arguments. - if (_.isPlainObject(name)) { - // 1 argument (options). - options = name; - } else { - // 2 arguments (name [, options]). - suite.name = name; - } - setOptions(suite, options); - } - - /*------------------------------------------------------------------------*/ - - /** - * A specialized version of `_.cloneDeep` which only clones arrays and plain - * objects assigning all other values by reference. - * - * @private - * @param {*} value The value to clone. - * @returns {*} The cloned value. - */ - var cloneDeep = _.partial(_.cloneDeepWith, _, function(value) { - // Only clone primitives, arrays, and plain objects. - return (_.isObject(value) && !_.isArray(value) && !_.isPlainObject(value)) - ? value - : undefined; - }); - - /** - * Creates a function from the given arguments string and body. - * - * @private - * @param {string} args The comma separated function arguments. - * @param {string} body The function body. - * @returns {Function} The new function. - */ - function createFunction() { - // Lazy define. - createFunction = function(args, body) { - var result, - anchor = freeDefine ? freeDefine.amd : Benchmark, - prop = uid + 'createFunction'; - - runScript((freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '=function(' + args + '){' + body + '}'); - result = anchor[prop]; - delete anchor[prop]; - return result; - }; - // Fix JaegerMonkey bug. - // For more information see http://bugzil.la/639720. - createFunction = support.browser && (createFunction('', 'return"' + uid + '"') || _.noop)() == uid ? createFunction : Function; - return createFunction.apply(null, arguments); - } - - /** - * Delay the execution of a function based on the benchmark's `delay` property. - * - * @private - * @param {Object} bench The benchmark instance. - * @param {Object} fn The function to execute. - */ - function delay(bench, fn) { - bench._timerId = _.delay(fn, bench.delay * 1e3); - } - - /** - * Destroys the given element. - * - * @private - * @param {Element} element The element to destroy. - */ - function destroyElement(element) { - trash.appendChild(element); - trash.innerHTML = ''; - } - - /** - * Gets the name of the first argument from a function's source. - * - * @private - * @param {Function} fn The function. - * @returns {string} The argument name. - */ - function getFirstArgument(fn) { - return (!_.has(fn, 'toString') && - (/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || ''; - } - - /** - * Computes the arithmetic mean of a sample. - * - * @private - * @param {Array} sample The sample. - * @returns {number} The mean. - */ - function getMean(sample) { - return (_.reduce(sample, function(sum, x) { - return sum + x; - }) / sample.length) || 0; - } - - /** - * Gets the source code of a function. - * - * @private - * @param {Function} fn The function. - * @returns {string} The function's source code. - */ - function getSource(fn) { - var result = ''; - if (isStringable(fn)) { - result = String(fn); - } else if (support.decompilation) { - // Escape the `{` for Firefox 1. - result = _.result(/^[^{]+\{([\s\S]*)\}\s*$/.exec(fn), 1); - } - // Trim string. - result = (result || '').replace(/^\s+|\s+$/g, ''); - - // Detect strings containing only the "use strict" directive. - return /^(?:\/\*+[\w\W]*?\*\/|\/\/.*?[\n\r\u2028\u2029]|\s)*(["'])use strict\1;?$/.test(result) - ? '' - : result; - } - - /** - * Checks if an object is of the specified class. - * - * @private - * @param {*} value The value to check. - * @param {string} name The name of the class. - * @returns {boolean} Returns `true` if the value is of the specified class, else `false`. - */ - function isClassOf(value, name) { - return value != null && toString.call(value) == '[object ' + name + ']'; - } - - /** - * Host objects can return type values that are different from their actual - * data type. The objects we are concerned with usually return non-primitive - * types of "object", "function", or "unknown". - * - * @private - * @param {*} object The owner of the property. - * @param {string} property The property to check. - * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`. - */ - function isHostType(object, property) { - if (object == null) { - return false; - } - var type = typeof object[property]; - return !rePrimitive.test(type) && (type != 'object' || !!object[property]); - } - - /** - * Checks if a value can be safely coerced to a string. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the value can be coerced, else `false`. - */ - function isStringable(value) { - return _.isString(value) || (_.has(value, 'toString') && _.isFunction(value.toString)); - } - - /** - * Runs a snippet of JavaScript via script injection. - * - * @private - * @param {string} code The code to run. - */ - function runScript(code) { - var anchor = freeDefine ? define.amd : Benchmark, - script = doc.createElement('script'), - sibling = doc.getElementsByTagName('script')[0], - parent = sibling.parentNode, - prop = uid + 'runScript', - prefix = '(' + (freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '||function(){})();'; - - // Firefox 2.0.0.2 cannot use script injection as intended because it executes - // asynchronously, but that's OK because script injection is only used to avoid - // the previously commented JaegerMonkey bug. - try { - // Remove the inserted script *before* running the code to avoid differences - // in the expected script element count/order of the document. - script.appendChild(doc.createTextNode(prefix + code)); - anchor[prop] = function() { destroyElement(script); }; - } catch(e) { - parent = parent.cloneNode(false); - sibling = null; - script.text = code; - } - parent.insertBefore(script, sibling); - delete anchor[prop]; - } - - /** - * A helper function for setting options/event handlers. - * - * @private - * @param {Object} object The benchmark or suite instance. - * @param {Object} [options={}] Options object. - */ - function setOptions(object, options) { - options = object.options = _.assign({}, cloneDeep(object.constructor.options), cloneDeep(options)); - - _.forOwn(options, function(value, key) { - if (value != null) { - // Add event listeners. - if (/^on[A-Z]/.test(key)) { - _.each(key.split(' '), function(key) { - object.on(key.slice(2).toLowerCase(), value); - }); - } else if (!_.has(object, key)) { - object[key] = cloneDeep(value); - } - } - }); - } - - /*------------------------------------------------------------------------*/ - - /** - * Handles cycling/completing the deferred benchmark. - * - * @memberOf Benchmark.Deferred - */ - function resolve() { - var deferred = this, - clone = deferred.benchmark, - bench = clone._original; - - if (bench.aborted) { - // cycle() -> clone cycle/complete event -> compute()'s invoked bench.run() cycle/complete. - deferred.teardown(); - clone.running = false; - cycle(deferred); - } - else if (++deferred.cycles < clone.count) { - clone.compiled.call(deferred, context, timer); - } - else { - timer.stop(deferred); - deferred.teardown(); - delay(clone, function() { cycle(deferred); }); - } - } - - /*------------------------------------------------------------------------*/ - - /** - * A generic `Array#filter` like method. - * - * @static - * @memberOf Benchmark - * @param {Array} array The array to iterate over. - * @param {Function|string} callback The function/alias called per iteration. - * @returns {Array} A new array of values that passed callback filter. - * @example - * - * // get odd numbers - * Benchmark.filter([1, 2, 3, 4, 5], function(n) { - * return n % 2; - * }); // -> [1, 3, 5]; - * - * // get fastest benchmarks - * Benchmark.filter(benches, 'fastest'); - * - * // get slowest benchmarks - * Benchmark.filter(benches, 'slowest'); - * - * // get benchmarks that completed without erroring - * Benchmark.filter(benches, 'successful'); - */ - function filter(array, callback) { - if (callback === 'successful') { - // Callback to exclude those that are errored, unrun, or have hz of Infinity. - callback = function(bench) { - return bench.cycles && _.isFinite(bench.hz) && !bench.error; - }; - } - else if (callback === 'fastest' || callback === 'slowest') { - // Get successful, sort by period + margin of error, and filter fastest/slowest. - var result = filter(array, 'successful').sort(function(a, b) { - a = a.stats; b = b.stats; - return (a.mean + a.moe > b.mean + b.moe ? 1 : -1) * (callback === 'fastest' ? 1 : -1); - }); - - return _.filter(result, function(bench) { - return result[0].compare(bench) == 0; - }); - } - return _.filter(array, callback); - } - - /** - * Converts a number to a more readable comma-separated string representation. - * - * @static - * @memberOf Benchmark - * @param {number} number The number to convert. - * @returns {string} The more readable string representation. - */ - function formatNumber(number) { - number = String(number).split('.'); - return number[0].replace(/(?=(?:\d{3})+$)(?!\b)/g, ',') + - (number[1] ? '.' + number[1] : ''); - } - - /** - * Invokes a method on all items in an array. - * - * @static - * @memberOf Benchmark - * @param {Array} benches Array of benchmarks to iterate over. - * @param {Object|string} name The name of the method to invoke OR options object. - * @param {...*} [args] Arguments to invoke the method with. - * @returns {Array} A new array of values returned from each method invoked. - * @example - * - * // invoke `reset` on all benchmarks - * Benchmark.invoke(benches, 'reset'); - * - * // invoke `emit` with arguments - * Benchmark.invoke(benches, 'emit', 'complete', listener); - * - * // invoke `run(true)`, treat benchmarks as a queue, and register invoke callbacks - * Benchmark.invoke(benches, { - * - * // invoke the `run` method - * 'name': 'run', - * - * // pass a single argument - * 'args': true, - * - * // treat as queue, removing benchmarks from front of `benches` until empty - * 'queued': true, - * - * // called before any benchmarks have been invoked. - * 'onStart': onStart, - * - * // called between invoking benchmarks - * 'onCycle': onCycle, - * - * // called after all benchmarks have been invoked. - * 'onComplete': onComplete - * }); - */ - function invoke(benches, name) { - var args, - bench, - queued, - index = -1, - eventProps = { 'currentTarget': benches }, - options = { 'onStart': _.noop, 'onCycle': _.noop, 'onComplete': _.noop }, - result = _.toArray(benches); - - /** - * Invokes the method of the current object and if synchronous, fetches the next. - */ - function execute() { - var listeners, - async = isAsync(bench); - - if (async) { - // Use `getNext` as the first listener. - bench.on('complete', getNext); - listeners = bench.events.complete; - listeners.splice(0, 0, listeners.pop()); - } - // Execute method. - result[index] = _.isFunction(bench && bench[name]) ? bench[name].apply(bench, args) : undefined; - // If synchronous return `true` until finished. - return !async && getNext(); - } - - /** - * Fetches the next bench or executes `onComplete` callback. - */ - function getNext(event) { - var cycleEvent, - last = bench, - async = isAsync(last); - - if (async) { - last.off('complete', getNext); - last.emit('complete'); - } - // Emit "cycle" event. - eventProps.type = 'cycle'; - eventProps.target = last; - cycleEvent = Event(eventProps); - options.onCycle.call(benches, cycleEvent); - - // Choose next benchmark if not exiting early. - if (!cycleEvent.aborted && raiseIndex() !== false) { - bench = queued ? benches[0] : result[index]; - if (isAsync(bench)) { - delay(bench, execute); - } - else if (async) { - // Resume execution if previously asynchronous but now synchronous. - while (execute()) {} - } - else { - // Continue synchronous execution. - return true; - } - } else { - // Emit "complete" event. - eventProps.type = 'complete'; - options.onComplete.call(benches, Event(eventProps)); - } - // When used as a listener `event.aborted = true` will cancel the rest of - // the "complete" listeners because they were already called above and when - // used as part of `getNext` the `return false` will exit the execution while-loop. - if (event) { - event.aborted = true; - } else { - return false; - } - } - - /** - * Checks if invoking `Benchmark#run` with asynchronous cycles. - */ - function isAsync(object) { - // Avoid using `instanceof` here because of IE memory leak issues with host objects. - var async = args[0] && args[0].async; - return name == 'run' && (object instanceof Benchmark) && - ((async == null ? object.options.async : async) && support.timeout || object.defer); - } - - /** - * Raises `index` to the next defined index or returns `false`. - */ - function raiseIndex() { - index++; - - // If queued remove the previous bench. - if (queued && index > 0) { - shift.call(benches); - } - // If we reached the last index then return `false`. - return (queued ? benches.length : index < result.length) - ? index - : (index = false); - } - // Juggle arguments. - if (_.isString(name)) { - // 2 arguments (array, name). - args = slice.call(arguments, 2); - } else { - // 2 arguments (array, options). - options = _.assign(options, name); - name = options.name; - args = _.isArray(args = 'args' in options ? options.args : []) ? args : [args]; - queued = options.queued; - } - // Start iterating over the array. - if (raiseIndex() !== false) { - // Emit "start" event. - bench = result[index]; - eventProps.type = 'start'; - eventProps.target = bench; - options.onStart.call(benches, Event(eventProps)); - - // End early if the suite was aborted in an "onStart" listener. - if (name == 'run' && (benches instanceof Suite) && benches.aborted) { - // Emit "cycle" event. - eventProps.type = 'cycle'; - options.onCycle.call(benches, Event(eventProps)); - // Emit "complete" event. - eventProps.type = 'complete'; - options.onComplete.call(benches, Event(eventProps)); - } - // Start method execution. - else { - if (isAsync(bench)) { - delay(bench, execute); - } else { - while (execute()) {} - } - } - } - return result; - } - - /** - * Creates a string of joined array values or object key-value pairs. - * - * @static - * @memberOf Benchmark - * @param {Array|Object} object The object to operate on. - * @param {string} [separator1=','] The separator used between key-value pairs. - * @param {string} [separator2=': '] The separator used between keys and values. - * @returns {string} The joined result. - */ - function join(object, separator1, separator2) { - var result = [], - length = (object = Object(object)).length, - arrayLike = length === length >>> 0; - - separator2 || (separator2 = ': '); - _.each(object, function(value, key) { - result.push(arrayLike ? value : key + separator2 + value); - }); - return result.join(separator1 || ','); - } - - /*------------------------------------------------------------------------*/ - - /** - * Aborts all benchmarks in the suite. - * - * @name abort - * @memberOf Benchmark.Suite - * @returns {Object} The suite instance. - */ - function abortSuite() { - var event, - suite = this, - resetting = calledBy.resetSuite; - - if (suite.running) { - event = Event('abort'); - suite.emit(event); - if (!event.cancelled || resetting) { - // Avoid infinite recursion. - calledBy.abortSuite = true; - suite.reset(); - delete calledBy.abortSuite; - - if (!resetting) { - suite.aborted = true; - invoke(suite, 'abort'); - } - } - } - return suite; - } - - /** - * Adds a test to the benchmark suite. - * - * @memberOf Benchmark.Suite - * @param {string} name A name to identify the benchmark. - * @param {Function|string} fn The test to benchmark. - * @param {Object} [options={}] Options object. - * @returns {Object} The suite instance. - * @example - * - * // basic usage - * suite.add(fn); - * - * // or using a name first - * suite.add('foo', fn); - * - * // or with options - * suite.add('foo', fn, { - * 'onCycle': onCycle, - * 'onComplete': onComplete - * }); - * - * // or name and options - * suite.add('foo', { - * 'fn': fn, - * 'onCycle': onCycle, - * 'onComplete': onComplete - * }); - * - * // or options only - * suite.add({ - * 'name': 'foo', - * 'fn': fn, - * 'onCycle': onCycle, - * 'onComplete': onComplete - * }); - */ - function add(name, fn, options) { - var suite = this, - bench = new Benchmark(name, fn, options), - event = Event({ 'type': 'add', 'target': bench }); - - if (suite.emit(event), !event.cancelled) { - suite.push(bench); - } - return suite; - } - - /** - * Creates a new suite with cloned benchmarks. - * - * @name clone - * @memberOf Benchmark.Suite - * @param {Object} options Options object to overwrite cloned options. - * @returns {Object} The new suite instance. - */ - function cloneSuite(options) { - var suite = this, - result = new suite.constructor(_.assign({}, suite.options, options)); - - // Copy own properties. - _.forOwn(suite, function(value, key) { - if (!_.has(result, key)) { - result[key] = value && _.isFunction(value.clone) - ? value.clone() - : cloneDeep(value); - } - }); - return result; - } - - /** - * An `Array#filter` like method. - * - * @name filter - * @memberOf Benchmark.Suite - * @param {Function|string} callback The function/alias called per iteration. - * @returns {Object} A new suite of benchmarks that passed callback filter. - */ - function filterSuite(callback) { - var suite = this, - result = new suite.constructor(suite.options); - - result.push.apply(result, filter(suite, callback)); - return result; - } - - /** - * Resets all benchmarks in the suite. - * - * @name reset - * @memberOf Benchmark.Suite - * @returns {Object} The suite instance. - */ - function resetSuite() { - var event, - suite = this, - aborting = calledBy.abortSuite; - - if (suite.running && !aborting) { - // No worries, `resetSuite()` is called within `abortSuite()`. - calledBy.resetSuite = true; - suite.abort(); - delete calledBy.resetSuite; - } - // Reset if the state has changed. - else if ((suite.aborted || suite.running) && - (suite.emit(event = Event('reset')), !event.cancelled)) { - suite.aborted = suite.running = false; - if (!aborting) { - invoke(suite, 'reset'); - } - } - return suite; - } - - /** - * Runs the suite. - * - * @name run - * @memberOf Benchmark.Suite - * @param {Object} [options={}] Options object. - * @returns {Object} The suite instance. - * @example - * - * // basic usage - * suite.run(); - * - * // or with options - * suite.run({ 'async': true, 'queued': true }); - */ - function runSuite(options) { - var suite = this; - - suite.reset(); - suite.running = true; - options || (options = {}); - - invoke(suite, { - 'name': 'run', - 'args': options, - 'queued': options.queued, - 'onStart': function(event) { - suite.emit(event); - }, - 'onCycle': function(event) { - var bench = event.target; - if (bench.error) { - suite.emit({ 'type': 'error', 'target': bench }); - } - suite.emit(event); - event.aborted = suite.aborted; - }, - 'onComplete': function(event) { - suite.running = false; - suite.emit(event); - } - }); - return suite; - } - - /*------------------------------------------------------------------------*/ - - /** - * Executes all registered listeners of the specified event type. - * - * @memberOf Benchmark, Benchmark.Suite - * @param {Object|string} type The event type or object. - * @param {...*} [args] Arguments to invoke the listener with. - * @returns {*} Returns the return value of the last listener executed. - */ - function emit(type) { - var listeners, - object = this, - event = Event(type), - events = object.events, - args = (arguments[0] = event, arguments); - - event.currentTarget || (event.currentTarget = object); - event.target || (event.target = object); - delete event.result; - - if (events && (listeners = _.has(events, event.type) && events[event.type])) { - _.each(listeners.slice(), function(listener) { - if ((event.result = listener.apply(object, args)) === false) { - event.cancelled = true; - } - return !event.aborted; - }); - } - return event.result; - } - - /** - * Returns an array of event listeners for a given type that can be manipulated - * to add or remove listeners. - * - * @memberOf Benchmark, Benchmark.Suite - * @param {string} type The event type. - * @returns {Array} The listeners array. - */ - function listeners(type) { - var object = this, - events = object.events || (object.events = {}); - - return _.has(events, type) ? events[type] : (events[type] = []); - } - - /** - * Unregisters a listener for the specified event type(s), - * or unregisters all listeners for the specified event type(s), - * or unregisters all listeners for all event types. - * - * @memberOf Benchmark, Benchmark.Suite - * @param {string} [type] The event type. - * @param {Function} [listener] The function to unregister. - * @returns {Object} The current instance. - * @example - * - * // unregister a listener for an event type - * bench.off('cycle', listener); - * - * // unregister a listener for multiple event types - * bench.off('start cycle', listener); - * - * // unregister all listeners for an event type - * bench.off('cycle'); - * - * // unregister all listeners for multiple event types - * bench.off('start cycle complete'); - * - * // unregister all listeners for all event types - * bench.off(); - */ - function off(type, listener) { - var object = this, - events = object.events; - - if (!events) { - return object; - } - _.each(type ? type.split(' ') : events, function(listeners, type) { - var index; - if (typeof listeners == 'string') { - type = listeners; - listeners = _.has(events, type) && events[type]; - } - if (listeners) { - if (listener) { - index = _.indexOf(listeners, listener); - if (index > -1) { - listeners.splice(index, 1); - } - } else { - listeners.length = 0; - } - } - }); - return object; - } - - /** - * Registers a listener for the specified event type(s). - * - * @memberOf Benchmark, Benchmark.Suite - * @param {string} type The event type. - * @param {Function} listener The function to register. - * @returns {Object} The current instance. - * @example - * - * // register a listener for an event type - * bench.on('cycle', listener); - * - * // register a listener for multiple event types - * bench.on('start cycle', listener); - */ - function on(type, listener) { - var object = this, - events = object.events || (object.events = {}); - - _.each(type.split(' '), function(type) { - (_.has(events, type) - ? events[type] - : (events[type] = []) - ).push(listener); - }); - return object; - } - - /*------------------------------------------------------------------------*/ - - /** - * Aborts the benchmark without recording times. - * - * @memberOf Benchmark - * @returns {Object} The benchmark instance. - */ - function abort() { - var event, - bench = this, - resetting = calledBy.reset; - - if (bench.running) { - event = Event('abort'); - bench.emit(event); - if (!event.cancelled || resetting) { - // Avoid infinite recursion. - calledBy.abort = true; - bench.reset(); - delete calledBy.abort; - - if (support.timeout) { - clearTimeout(bench._timerId); - delete bench._timerId; - } - if (!resetting) { - bench.aborted = true; - bench.running = false; - } - } - } - return bench; - } - - /** - * Creates a new benchmark using the same test and options. - * - * @memberOf Benchmark - * @param {Object} options Options object to overwrite cloned options. - * @returns {Object} The new benchmark instance. - * @example - * - * var bizarro = bench.clone({ - * 'name': 'doppelganger' - * }); - */ - function clone(options) { - var bench = this, - result = new bench.constructor(_.assign({}, bench, options)); - - // Correct the `options` object. - result.options = _.assign({}, cloneDeep(bench.options), cloneDeep(options)); - - // Copy own custom properties. - _.forOwn(bench, function(value, key) { - if (!_.has(result, key)) { - result[key] = cloneDeep(value); - } - }); - - return result; - } - - /** - * Determines if a benchmark is faster than another. - * - * @memberOf Benchmark - * @param {Object} other The benchmark to compare. - * @returns {number} Returns `-1` if slower, `1` if faster, and `0` if indeterminate. - */ - function compare(other) { - var bench = this; - - // Exit early if comparing the same benchmark. - if (bench == other) { - return 0; - } - var critical, - zStat, - sample1 = bench.stats.sample, - sample2 = other.stats.sample, - size1 = sample1.length, - size2 = sample2.length, - maxSize = max(size1, size2), - minSize = min(size1, size2), - u1 = getU(sample1, sample2), - u2 = getU(sample2, sample1), - u = min(u1, u2); - - function getScore(xA, sampleB) { - return _.reduce(sampleB, function(total, xB) { - return total + (xB > xA ? 0 : xB < xA ? 1 : 0.5); - }, 0); - } - - function getU(sampleA, sampleB) { - return _.reduce(sampleA, function(total, xA) { - return total + getScore(xA, sampleB); - }, 0); - } - - function getZ(u) { - return (u - ((size1 * size2) / 2)) / sqrt((size1 * size2 * (size1 + size2 + 1)) / 12); - } - // Reject the null hypothesis the two samples come from the - // same population (i.e. have the same median) if... - if (size1 + size2 > 30) { - // ...the z-stat is greater than 1.96 or less than -1.96 - // http://www.statisticslectures.com/topics/mannwhitneyu/ - zStat = getZ(u); - return abs(zStat) > 1.96 ? (u == u1 ? 1 : -1) : 0; - } - // ...the U value is less than or equal the critical U value. - critical = maxSize < 5 || minSize < 3 ? 0 : uTable[maxSize][minSize - 3]; - return u <= critical ? (u == u1 ? 1 : -1) : 0; - } - - /** - * Reset properties and abort if running. - * - * @memberOf Benchmark - * @returns {Object} The benchmark instance. - */ - function reset() { - var bench = this; - if (bench.running && !calledBy.abort) { - // No worries, `reset()` is called within `abort()`. - calledBy.reset = true; - bench.abort(); - delete calledBy.reset; - return bench; - } - var event, - index = 0, - changes = [], - queue = []; - - // A non-recursive solution to check if properties have changed. - // For more information see http://www.jslab.dk/articles/non.recursive.preorder.traversal.part4. - var data = { - 'destination': bench, - 'source': _.assign({}, cloneDeep(bench.constructor.prototype), cloneDeep(bench.options)) - }; - - do { - _.forOwn(data.source, function(value, key) { - var changed, - destination = data.destination, - currValue = destination[key]; - - // Skip pseudo private properties like `_timerId` which could be a - // Java object in environments like RingoJS. - if (key.charAt(0) == '_') { - return; - } - if (value && typeof value == 'object') { - if (_.isArray(value)) { - // Check if an array value has changed to a non-array value. - if (!_.isArray(currValue)) { - changed = currValue = []; - } - // Check if an array has changed its length. - if (currValue.length != value.length) { - changed = currValue = currValue.slice(0, value.length); - currValue.length = value.length; - } - } - // Check if an object has changed to a non-object value. - else if (!currValue || typeof currValue != 'object') { - changed = currValue = {}; - } - // Register a changed object. - if (changed) { - changes.push({ 'destination': destination, 'key': key, 'value': currValue }); - } - queue.push({ 'destination': currValue, 'source': value }); - } - // Register a changed primitive. - else if (value !== currValue && !(value == null || _.isFunction(value))) { - changes.push({ 'destination': destination, 'key': key, 'value': value }); - } - }); - } - while ((data = queue[index++])); - - // If changed emit the `reset` event and if it isn't cancelled reset the benchmark. - if (changes.length && (bench.emit(event = Event('reset')), !event.cancelled)) { - _.each(changes, function(data) { - data.destination[data.key] = data.value; - }); - } - return bench; - } - - /** - * Displays relevant benchmark information when coerced to a string. - * - * @name toString - * @memberOf Benchmark - * @returns {string} A string representation of the benchmark instance. - */ - function toStringBench() { - var bench = this, - error = bench.error, - hz = bench.hz, - id = bench.id, - stats = bench.stats, - size = stats.sample.length, - pm = '\xb1', - result = bench.name || (_.isNaN(id) ? id : ''); - - if (error) { - var errorStr; - if (!_.isObject(error)) { - errorStr = String(error); - } else if (!_.isError(Error)) { - errorStr = join(error); - } else { - // Error#name and Error#message properties are non-enumerable. - errorStr = join(_.assign({ 'name': error.name, 'message': error.message }, error)); - } - result += ': ' + errorStr; - } - else { - result += ' x ' + formatNumber(hz.toFixed(hz < 100 ? 2 : 0)) + ' ops/sec ' + pm + - stats.rme.toFixed(2) + '% (' + size + ' run' + (size == 1 ? '' : 's') + ' sampled)'; - } - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Clocks the time taken to execute a test per cycle (secs). - * - * @private - * @param {Object} bench The benchmark instance. - * @returns {number} The time taken. - */ - function clock() { - var options = Benchmark.options, - templateData = {}, - timers = [{ 'ns': timer.ns, 'res': max(0.0015, getRes('ms')), 'unit': 'ms' }]; - - // Lazy define for hi-res timers. - clock = function(clone) { - var deferred; - - if (clone instanceof Deferred) { - deferred = clone; - clone = deferred.benchmark; - } - var bench = clone._original, - stringable = isStringable(bench.fn), - count = bench.count = clone.count, - decompilable = stringable || (support.decompilation && (clone.setup !== _.noop || clone.teardown !== _.noop)), - id = bench.id, - name = bench.name || (typeof id == 'number' ? '' : id), - result = 0; - - // Init `minTime` if needed. - clone.minTime = bench.minTime || (bench.minTime = bench.options.minTime = options.minTime); - - // Compile in setup/teardown functions and the test loop. - // Create a new compiled test, instead of using the cached `bench.compiled`, - // to avoid potential engine optimizations enabled over the life of the test. - var funcBody = deferred - ? 'var d#=this,${fnArg}=d#,m#=d#.benchmark._original,f#=m#.fn,su#=m#.setup,td#=m#.teardown;' + - // When `deferred.cycles` is `0` then... - 'if(!d#.cycles){' + - // set `deferred.fn`, - 'd#.fn=function(){var ${fnArg}=d#;if(typeof f#=="function"){try{${fn}\n}catch(e#){f#(d#)}}else{${fn}\n}};' + - // set `deferred.teardown`, - 'd#.teardown=function(){d#.cycles=0;if(typeof td#=="function"){try{${teardown}\n}catch(e#){td#()}}else{${teardown}\n}};' + - // execute the benchmark's `setup`, - 'if(typeof su#=="function"){try{${setup}\n}catch(e#){su#()}}else{${setup}\n};' + - // start timer, - 't#.start(d#);' + - // and then execute `deferred.fn` and return a dummy object. - '}d#.fn();return{uid:"${uid}"}' - - : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count,n#=t#.ns;${setup}\n${begin};' + - 'while(i#--){${fn}\n}${end};${teardown}\nreturn{elapsed:r#,uid:"${uid}"}'; - - var compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody), - isEmpty = !(templateData.fn || stringable); - - try { - if (isEmpty) { - // Firefox may remove dead code from `Function#toString` results. - // For more information see http://bugzil.la/536085. - throw new Error('The test "' + name + '" is empty. This may be the result of dead code removal.'); - } - else if (!deferred) { - // Pretest to determine if compiled code exits early, usually by a - // rogue `return` statement, by checking for a return object with the uid. - bench.count = 1; - compiled = decompilable && (compiled.call(bench, context, timer) || {}).uid == templateData.uid && compiled; - bench.count = count; - } - } catch(e) { - compiled = null; - clone.error = e || new Error(String(e)); - bench.count = count; - } - // Fallback when a test exits early or errors during pretest. - if (!compiled && !deferred && !isEmpty) { - funcBody = ( - stringable || (decompilable && !clone.error) - ? 'function f#(){${fn}\n}var r#,s#,m#=this,i#=m#.count' - : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count' - ) + - ',n#=t#.ns;${setup}\n${begin};m#.f#=f#;while(i#--){m#.f#()}${end};' + - 'delete m#.f#;${teardown}\nreturn{elapsed:r#}'; - - compiled = createCompiled(bench, decompilable, deferred, funcBody); - - try { - // Pretest one more time to check for errors. - bench.count = 1; - compiled.call(bench, context, timer); - bench.count = count; - delete clone.error; - } - catch(e) { - bench.count = count; - if (!clone.error) { - clone.error = e || new Error(String(e)); - } - } - } - // If no errors run the full test loop. - if (!clone.error) { - compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody); - result = compiled.call(deferred || bench, context, timer).elapsed; - } - return result; - }; - - /*----------------------------------------------------------------------*/ - - /** - * Creates a compiled function from the given function `body`. - */ - function createCompiled(bench, decompilable, deferred, body) { - var fn = bench.fn, - fnArg = deferred ? getFirstArgument(fn) || 'deferred' : ''; - - templateData.uid = uid + uidCounter++; - - _.assign(templateData, { - 'setup': decompilable ? getSource(bench.setup) : interpolate('m#.setup()'), - 'fn': decompilable ? getSource(fn) : interpolate('m#.fn(' + fnArg + ')'), - 'fnArg': fnArg, - 'teardown': decompilable ? getSource(bench.teardown) : interpolate('m#.teardown()') - }); - - // Use API of chosen timer. - if (timer.unit == 'ns') { - _.assign(templateData, { - 'begin': interpolate('s#=n#()'), - 'end': interpolate('r#=n#(s#);r#=r#[0]+(r#[1]/1e9)') - }); - } - else if (timer.unit == 'us') { - if (timer.ns.stop) { - _.assign(templateData, { - 'begin': interpolate('s#=n#.start()'), - 'end': interpolate('r#=n#.microseconds()/1e6') - }); - } else { - _.assign(templateData, { - 'begin': interpolate('s#=n#()'), - 'end': interpolate('r#=(n#()-s#)/1e6') - }); - } - } - else if (timer.ns.now) { - _.assign(templateData, { - 'begin': interpolate('s#=n#.now()'), - 'end': interpolate('r#=(n#.now()-s#)/1e3') - }); - } - else { - _.assign(templateData, { - 'begin': interpolate('s#=new n#().getTime()'), - 'end': interpolate('r#=(new n#().getTime()-s#)/1e3') - }); - } - // Define `timer` methods. - timer.start = createFunction( - interpolate('o#'), - interpolate('var n#=this.ns,${begin};o#.elapsed=0;o#.timeStamp=s#') - ); - - timer.stop = createFunction( - interpolate('o#'), - interpolate('var n#=this.ns,s#=o#.timeStamp,${end};o#.elapsed=r#') - ); - - // Create compiled test. - return createFunction( - interpolate('window,t#'), - 'var global = window, clearTimeout = global.clearTimeout, setTimeout = global.setTimeout;\n' + - interpolate(body) - ); - } - - /** - * Gets the current timer's minimum resolution (secs). - */ - function getRes(unit) { - var measured, - begin, - count = 30, - divisor = 1e3, - ns = timer.ns, - sample = []; - - // Get average smallest measurable time. - while (count--) { - if (unit == 'us') { - divisor = 1e6; - if (ns.stop) { - ns.start(); - while (!(measured = ns.microseconds())) {} - } else { - begin = ns(); - while (!(measured = ns() - begin)) {} - } - } - else if (unit == 'ns') { - divisor = 1e9; - begin = (begin = ns())[0] + (begin[1] / divisor); - while (!(measured = ((measured = ns())[0] + (measured[1] / divisor)) - begin)) {} - divisor = 1; - } - else if (ns.now) { - begin = ns.now(); - while (!(measured = ns.now() - begin)) {} - } - else { - begin = new ns().getTime(); - while (!(measured = new ns().getTime() - begin)) {} - } - // Check for broken timers. - if (measured > 0) { - sample.push(measured); - } else { - sample.push(Infinity); - break; - } - } - // Convert to seconds. - return getMean(sample) / divisor; - } - - /** - * Interpolates a given template string. - */ - function interpolate(string) { - // Replaces all occurrences of `#` with a unique number and template tokens with content. - return _.template(string.replace(/\#/g, /\d+/.exec(templateData.uid)))(templateData); - } - - /*----------------------------------------------------------------------*/ - - // Detect Chrome's microsecond timer: - // enable benchmarking via the --enable-benchmarking command - // line switch in at least Chrome 7 to use chrome.Interval - try { - if ((timer.ns = new (context.chrome || context.chromium).Interval)) { - timers.push({ 'ns': timer.ns, 'res': getRes('us'), 'unit': 'us' }); - } - } catch(e) {} - - // Detect Node.js's nanosecond resolution timer available in Node.js >= 0.8. - if (processObject && typeof (timer.ns = processObject.hrtime) == 'function') { - timers.push({ 'ns': timer.ns, 'res': getRes('ns'), 'unit': 'ns' }); - } - // Pick timer with highest resolution. - timer = _.minBy(timers, 'res'); - - // Error if there are no working timers. - if (timer.res == Infinity) { - throw new Error('Benchmark.js was unable to find a working timer.'); - } - // Resolve time span required to achieve a percent uncertainty of at most 1%. - // For more information see http://spiff.rit.edu/classes/phys273/uncert/uncert.html. - options.minTime || (options.minTime = max(timer.res / 2 / 0.01, 0.05)); - return clock.apply(null, arguments); - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes stats on benchmark results. - * - * @private - * @param {Object} bench The benchmark instance. - * @param {Object} options The options object. - */ - function compute(bench, options) { - options || (options = {}); - - var async = options.async, - elapsed = 0, - initCount = bench.initCount, - minSamples = bench.minSamples, - queue = [], - sample = bench.stats.sample; - - /** - * Adds a clone to the queue. - */ - function enqueue() { - queue.push(bench.clone({ - '_original': bench, - 'events': { - 'abort': [update], - 'cycle': [update], - 'error': [update], - 'start': [update] - } - })); - } - - /** - * Updates the clone/original benchmarks to keep their data in sync. - */ - function update(event) { - var clone = this, - type = event.type; - - if (bench.running) { - if (type == 'start') { - // Note: `clone.minTime` prop is inited in `clock()`. - clone.count = bench.initCount; - } - else { - if (type == 'error') { - bench.error = clone.error; - } - if (type == 'abort') { - bench.abort(); - bench.emit('cycle'); - } else { - event.currentTarget = event.target = bench; - bench.emit(event); - } - } - } else if (bench.aborted) { - // Clear abort listeners to avoid triggering bench's abort/cycle again. - clone.events.abort.length = 0; - clone.abort(); - } - } - - /** - * Determines if more clones should be queued or if cycling should stop. - */ - function evaluate(event) { - var critical, - df, - mean, - moe, - rme, - sd, - sem, - variance, - clone = event.target, - done = bench.aborted, - now = _.now(), - size = sample.push(clone.times.period), - maxedOut = size >= minSamples && (elapsed += now - clone.times.timeStamp) / 1e3 > bench.maxTime, - times = bench.times, - varOf = function(sum, x) { return sum + pow(x - mean, 2); }; - - // Exit early for aborted or unclockable tests. - if (done || clone.hz == Infinity) { - maxedOut = !(size = sample.length = queue.length = 0); - } - - if (!done) { - // Compute the sample mean (estimate of the population mean). - mean = getMean(sample); - // Compute the sample variance (estimate of the population variance). - variance = _.reduce(sample, varOf, 0) / (size - 1) || 0; - // Compute the sample standard deviation (estimate of the population standard deviation). - sd = sqrt(variance); - // Compute the standard error of the mean (a.k.a. the standard deviation of the sampling distribution of the sample mean). - sem = sd / sqrt(size); - // Compute the degrees of freedom. - df = size - 1; - // Compute the critical value. - critical = tTable[Math.round(df) || 1] || tTable.infinity; - // Compute the margin of error. - moe = sem * critical; - // Compute the relative margin of error. - rme = (moe / mean) * 100 || 0; - - _.assign(bench.stats, { - 'deviation': sd, - 'mean': mean, - 'moe': moe, - 'rme': rme, - 'sem': sem, - 'variance': variance - }); - - // Abort the cycle loop when the minimum sample size has been collected - // and the elapsed time exceeds the maximum time allowed per benchmark. - // We don't count cycle delays toward the max time because delays may be - // increased by browsers that clamp timeouts for inactive tabs. For more - // information see https://developer.mozilla.org/en/window.setTimeout#Inactive_tabs. - if (maxedOut) { - // Reset the `initCount` in case the benchmark is rerun. - bench.initCount = initCount; - bench.running = false; - done = true; - times.elapsed = (now - times.timeStamp) / 1e3; - } - if (bench.hz != Infinity) { - bench.hz = 1 / mean; - times.cycle = mean * bench.count; - times.period = mean; - } - } - // If time permits, increase sample size to reduce the margin of error. - if (queue.length < 2 && !maxedOut) { - enqueue(); - } - // Abort the `invoke` cycle when done. - event.aborted = done; - } - - // Init queue and begin. - enqueue(); - invoke(queue, { - 'name': 'run', - 'args': { 'async': async }, - 'queued': true, - 'onCycle': evaluate, - 'onComplete': function() { bench.emit('complete'); } - }); - } - - /*------------------------------------------------------------------------*/ - - /** - * Cycles a benchmark until a run `count` can be established. - * - * @private - * @param {Object} clone The cloned benchmark instance. - * @param {Object} options The options object. - */ - function cycle(clone, options) { - options || (options = {}); - - var deferred; - if (clone instanceof Deferred) { - deferred = clone; - clone = clone.benchmark; - } - var clocked, - cycles, - divisor, - event, - minTime, - period, - async = options.async, - bench = clone._original, - count = clone.count, - times = clone.times; - - // Continue, if not aborted between cycles. - if (clone.running) { - // `minTime` is set to `Benchmark.options.minTime` in `clock()`. - cycles = ++clone.cycles; - clocked = deferred ? deferred.elapsed : clock(clone); - minTime = clone.minTime; - - if (cycles > bench.cycles) { - bench.cycles = cycles; - } - if (clone.error) { - event = Event('error'); - event.message = clone.error; - clone.emit(event); - if (!event.cancelled) { - clone.abort(); - } - } - } - // Continue, if not errored. - if (clone.running) { - // Compute the time taken to complete last test cycle. - bench.times.cycle = times.cycle = clocked; - // Compute the seconds per operation. - period = bench.times.period = times.period = clocked / count; - // Compute the ops per second. - bench.hz = clone.hz = 1 / period; - // Avoid working our way up to this next time. - bench.initCount = clone.initCount = count; - // Do we need to do another cycle? - clone.running = clocked < minTime; - - if (clone.running) { - // Tests may clock at `0` when `initCount` is a small number, - // to avoid that we set its count to something a bit higher. - if (!clocked && (divisor = divisors[clone.cycles]) != null) { - count = floor(4e6 / divisor); - } - // Calculate how many more iterations it will take to achieve the `minTime`. - if (count <= clone.count) { - count += Math.ceil((minTime - clocked) / period); - } - clone.running = count != Infinity; - } - } - // Should we exit early? - event = Event('cycle'); - clone.emit(event); - if (event.aborted) { - clone.abort(); - } - // Figure out what to do next. - if (clone.running) { - // Start a new cycle. - clone.count = count; - if (deferred) { - clone.compiled.call(deferred, context, timer); - } else if (async) { - delay(clone, function() { cycle(clone, options); }); - } else { - cycle(clone); - } - } - else { - // Fix TraceMonkey bug associated with clock fallbacks. - // For more information see http://bugzil.la/509069. - if (support.browser) { - runScript(uid + '=1;delete ' + uid); - } - // We're done. - clone.emit('complete'); - } - } - - /*------------------------------------------------------------------------*/ - - /** - * Runs the benchmark. - * - * @memberOf Benchmark - * @param {Object} [options={}] Options object. - * @returns {Object} The benchmark instance. - * @example - * - * // basic usage - * bench.run(); - * - * // or with options - * bench.run({ 'async': true }); - */ - function run(options) { - var bench = this, - event = Event('start'); - - // Set `running` to `false` so `reset()` won't call `abort()`. - bench.running = false; - bench.reset(); - bench.running = true; - - bench.count = bench.initCount; - bench.times.timeStamp = _.now(); - bench.emit(event); - - if (!event.cancelled) { - options = { 'async': ((options = options && options.async) == null ? bench.async : options) && support.timeout }; - - // For clones created within `compute()`. - if (bench._original) { - if (bench.defer) { - Deferred(bench); - } else { - cycle(bench, options); - } - } - // For original benchmarks. - else { - compute(bench, options); - } - } - return bench; - } - - /*------------------------------------------------------------------------*/ - - // Firefox 1 erroneously defines variable and argument names of functions on - // the function itself as non-configurable properties with `undefined` values. - // The bugginess continues as the `Benchmark` constructor has an argument - // named `options` and Firefox 1 will not assign a value to `Benchmark.options`, - // making it non-writable in the process, unless it is the first property - // assigned by for-in loop of `_.assign()`. - _.assign(Benchmark, { - - /** - * The default options copied by benchmark instances. - * - * @static - * @memberOf Benchmark - * @type Object - */ - 'options': { - - /** - * A flag to indicate that benchmark cycles will execute asynchronously - * by default. - * - * @memberOf Benchmark.options - * @type boolean - */ - 'async': false, - - /** - * A flag to indicate that the benchmark clock is deferred. - * - * @memberOf Benchmark.options - * @type boolean - */ - 'defer': false, - - /** - * The delay between test cycles (secs). - * @memberOf Benchmark.options - * @type number - */ - 'delay': 0.005, - - /** - * Displayed by `Benchmark#toString` when a `name` is not available - * (auto-generated if absent). - * - * @memberOf Benchmark.options - * @type string - */ - 'id': undefined, - - /** - * The default number of times to execute a test on a benchmark's first cycle. - * - * @memberOf Benchmark.options - * @type number - */ - 'initCount': 1, - - /** - * The maximum time a benchmark is allowed to run before finishing (secs). - * - * Note: Cycle delays aren't counted toward the maximum time. - * - * @memberOf Benchmark.options - * @type number - */ - 'maxTime': 5, - - /** - * The minimum sample size required to perform statistical analysis. - * - * @memberOf Benchmark.options - * @type number - */ - 'minSamples': 5, - - /** - * The time needed to reduce the percent uncertainty of measurement to 1% (secs). - * - * @memberOf Benchmark.options - * @type number - */ - 'minTime': 0, - - /** - * The name of the benchmark. - * - * @memberOf Benchmark.options - * @type string - */ - 'name': undefined, - - /** - * An event listener called when the benchmark is aborted. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onAbort': undefined, - - /** - * An event listener called when the benchmark completes running. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onComplete': undefined, - - /** - * An event listener called after each run cycle. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onCycle': undefined, - - /** - * An event listener called when a test errors. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onError': undefined, - - /** - * An event listener called when the benchmark is reset. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onReset': undefined, - - /** - * An event listener called when the benchmark starts running. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onStart': undefined - }, - - /** - * Platform object with properties describing things like browser name, - * version, and operating system. See [`platform.js`](https://mths.be/platform). - * - * @static - * @memberOf Benchmark - * @type Object - */ - 'platform': context.platform || require('platform') || ({ - 'description': context.navigator && context.navigator.userAgent || null, - 'layout': null, - 'product': null, - 'name': null, - 'manufacturer': null, - 'os': null, - 'prerelease': null, - 'version': null, - 'toString': function() { - return this.description || ''; - } - }), - - /** - * The semantic version number. - * - * @static - * @memberOf Benchmark - * @type string - */ - 'version': '2.1.2' - }); - - _.assign(Benchmark, { - 'filter': filter, - 'formatNumber': formatNumber, - 'invoke': invoke, - 'join': join, - 'runInContext': runInContext, - 'support': support - }); - - // Add lodash methods to Benchmark. - _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'reduce'], function(methodName) { - Benchmark[methodName] = _[methodName]; - }); - - /*------------------------------------------------------------------------*/ - - _.assign(Benchmark.prototype, { - - /** - * The number of times a test was executed. - * - * @memberOf Benchmark - * @type number - */ - 'count': 0, - - /** - * The number of cycles performed while benchmarking. - * - * @memberOf Benchmark - * @type number - */ - 'cycles': 0, - - /** - * The number of executions per second. - * - * @memberOf Benchmark - * @type number - */ - 'hz': 0, - - /** - * The compiled test function. - * - * @memberOf Benchmark - * @type {Function|string} - */ - 'compiled': undefined, - - /** - * The error object if the test failed. - * - * @memberOf Benchmark - * @type Object - */ - 'error': undefined, - - /** - * The test to benchmark. - * - * @memberOf Benchmark - * @type {Function|string} - */ - 'fn': undefined, - - /** - * A flag to indicate if the benchmark is aborted. - * - * @memberOf Benchmark - * @type boolean - */ - 'aborted': false, - - /** - * A flag to indicate if the benchmark is running. - * - * @memberOf Benchmark - * @type boolean - */ - 'running': false, - - /** - * Compiled into the test and executed immediately **before** the test loop. - * - * @memberOf Benchmark - * @type {Function|string} - * @example - * - * // basic usage - * var bench = Benchmark({ - * 'setup': function() { - * var c = this.count, - * element = document.getElementById('container'); - * while (c--) { - * element.appendChild(document.createElement('div')); - * } - * }, - * 'fn': function() { - * element.removeChild(element.lastChild); - * } - * }); - * - * // compiles to something like: - * var c = this.count, - * element = document.getElementById('container'); - * while (c--) { - * element.appendChild(document.createElement('div')); - * } - * var start = new Date; - * while (count--) { - * element.removeChild(element.lastChild); - * } - * var end = new Date - start; - * - * // or using strings - * var bench = Benchmark({ - * 'setup': '\ - * var a = 0;\n\ - * (function() {\n\ - * (function() {\n\ - * (function() {', - * 'fn': 'a += 1;', - * 'teardown': '\ - * }())\n\ - * }())\n\ - * }())' - * }); - * - * // compiles to something like: - * var a = 0; - * (function() { - * (function() { - * (function() { - * var start = new Date; - * while (count--) { - * a += 1; - * } - * var end = new Date - start; - * }()) - * }()) - * }()) - */ - 'setup': _.noop, - - /** - * Compiled into the test and executed immediately **after** the test loop. - * - * @memberOf Benchmark - * @type {Function|string} - */ - 'teardown': _.noop, - - /** - * An object of stats including mean, margin or error, and standard deviation. - * - * @memberOf Benchmark - * @type Object - */ - 'stats': { - - /** - * The margin of error. - * - * @memberOf Benchmark#stats - * @type number - */ - 'moe': 0, - - /** - * The relative margin of error (expressed as a percentage of the mean). - * - * @memberOf Benchmark#stats - * @type number - */ - 'rme': 0, - - /** - * The standard error of the mean. - * - * @memberOf Benchmark#stats - * @type number - */ - 'sem': 0, - - /** - * The sample standard deviation. - * - * @memberOf Benchmark#stats - * @type number - */ - 'deviation': 0, - - /** - * The sample arithmetic mean (secs). - * - * @memberOf Benchmark#stats - * @type number - */ - 'mean': 0, - - /** - * The array of sampled periods. - * - * @memberOf Benchmark#stats - * @type Array - */ - 'sample': [], - - /** - * The sample variance. - * - * @memberOf Benchmark#stats - * @type number - */ - 'variance': 0 - }, - - /** - * An object of timing data including cycle, elapsed, period, start, and stop. - * - * @memberOf Benchmark - * @type Object - */ - 'times': { - - /** - * The time taken to complete the last cycle (secs). - * - * @memberOf Benchmark#times - * @type number - */ - 'cycle': 0, - - /** - * The time taken to complete the benchmark (secs). - * - * @memberOf Benchmark#times - * @type number - */ - 'elapsed': 0, - - /** - * The time taken to execute the test once (secs). - * - * @memberOf Benchmark#times - * @type number - */ - 'period': 0, - - /** - * A timestamp of when the benchmark started (ms). - * - * @memberOf Benchmark#times - * @type number - */ - 'timeStamp': 0 - } - }); - - _.assign(Benchmark.prototype, { - 'abort': abort, - 'clone': clone, - 'compare': compare, - 'emit': emit, - 'listeners': listeners, - 'off': off, - 'on': on, - 'reset': reset, - 'run': run, - 'toString': toStringBench - }); - - /*------------------------------------------------------------------------*/ - - _.assign(Deferred.prototype, { - - /** - * The deferred benchmark instance. - * - * @memberOf Benchmark.Deferred - * @type Object - */ - 'benchmark': null, - - /** - * The number of deferred cycles performed while benchmarking. - * - * @memberOf Benchmark.Deferred - * @type number - */ - 'cycles': 0, - - /** - * The time taken to complete the deferred benchmark (secs). - * - * @memberOf Benchmark.Deferred - * @type number - */ - 'elapsed': 0, - - /** - * A timestamp of when the deferred benchmark started (ms). - * - * @memberOf Benchmark.Deferred - * @type number - */ - 'timeStamp': 0 - }); - - _.assign(Deferred.prototype, { - 'resolve': resolve - }); - - /*------------------------------------------------------------------------*/ - - _.assign(Event.prototype, { - - /** - * A flag to indicate if the emitters listener iteration is aborted. - * - * @memberOf Benchmark.Event - * @type boolean - */ - 'aborted': false, - - /** - * A flag to indicate if the default action is cancelled. - * - * @memberOf Benchmark.Event - * @type boolean - */ - 'cancelled': false, - - /** - * The object whose listeners are currently being processed. - * - * @memberOf Benchmark.Event - * @type Object - */ - 'currentTarget': undefined, - - /** - * The return value of the last executed listener. - * - * @memberOf Benchmark.Event - * @type Mixed - */ - 'result': undefined, - - /** - * The object to which the event was originally emitted. - * - * @memberOf Benchmark.Event - * @type Object - */ - 'target': undefined, - - /** - * A timestamp of when the event was created (ms). - * - * @memberOf Benchmark.Event - * @type number - */ - 'timeStamp': 0, - - /** - * The event type. - * - * @memberOf Benchmark.Event - * @type string - */ - 'type': '' - }); - - /*------------------------------------------------------------------------*/ - - /** - * The default options copied by suite instances. - * - * @static - * @memberOf Benchmark.Suite - * @type Object - */ - Suite.options = { - - /** - * The name of the suite. - * - * @memberOf Benchmark.Suite.options - * @type string - */ - 'name': undefined - }; - - /*------------------------------------------------------------------------*/ - - _.assign(Suite.prototype, { - - /** - * The number of benchmarks in the suite. - * - * @memberOf Benchmark.Suite - * @type number - */ - 'length': 0, - - /** - * A flag to indicate if the suite is aborted. - * - * @memberOf Benchmark.Suite - * @type boolean - */ - 'aborted': false, - - /** - * A flag to indicate if the suite is running. - * - * @memberOf Benchmark.Suite - * @type boolean - */ - 'running': false - }); - - _.assign(Suite.prototype, { - 'abort': abortSuite, - 'add': add, - 'clone': cloneSuite, - 'emit': emit, - 'filter': filterSuite, - 'join': arrayRef.join, - 'listeners': listeners, - 'off': off, - 'on': on, - 'pop': arrayRef.pop, - 'push': push, - 'reset': resetSuite, - 'run': runSuite, - 'reverse': arrayRef.reverse, - 'shift': shift, - 'slice': slice, - 'sort': arrayRef.sort, - 'splice': arrayRef.splice, - 'unshift': unshift - }); - - /*------------------------------------------------------------------------*/ - - // Expose Deferred, Event, and Suite. - _.assign(Benchmark, { - 'Deferred': Deferred, - 'Event': Event, - 'Suite': Suite - }); - - /*------------------------------------------------------------------------*/ - - // Add lodash methods as Suite methods. - _.each(['each', 'forEach', 'indexOf', 'map', 'reduce'], function(methodName) { - var func = _[methodName]; - Suite.prototype[methodName] = function() { - var args = [this]; - push.apply(args, arguments); - return func.apply(_, args); - }; - }); - - // Avoid array-like object bugs with `Array#shift` and `Array#splice` - // in Firefox < 10 and IE < 9. - _.each(['pop', 'shift', 'splice'], function(methodName) { - var func = arrayRef[methodName]; - - Suite.prototype[methodName] = function() { - var value = this, - result = func.apply(value, arguments); - - if (value.length === 0) { - delete value[0]; - } - return result; - }; - }); - - // Avoid buggy `Array#unshift` in IE < 8 which doesn't return the new - // length of the array. - Suite.prototype.unshift = function() { - var value = this; - unshift.apply(value, arguments); - return value.length; - }; - - return Benchmark; - } - - /*--------------------------------------------------------------------------*/ - - var Benchmark = runInContext(); - - window.Benchmark = Benchmark; - - return Benchmark; - -}.call(this)); diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json deleted file mode 100644 index eb0ca5b5a88..00000000000 --- a/tgui/packages/tgui-bench/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "private": true, - "name": "tgui-bench", - "version": "4.3.1", - "dependencies": { - "common": "workspace:*", - "fastify": "^3.29.4", - "fastify-static": "^4.2.3", - "inferno": "^7.4.8", - "inferno-vnode-flags": "^7.4.8", - "lodash": "^4.18.1", - "platform": "^1.3.6", - "tgui": "workspace:*" - } -} diff --git a/tgui/packages/tgui-bench/tests/Button.test.tsx b/tgui/packages/tgui-bench/tests/Button.test.tsx deleted file mode 100644 index 6b806d720ab..00000000000 --- a/tgui/packages/tgui-bench/tests/Button.test.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { linkEvent } from 'inferno'; -import { Button } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -const handleClick = () => undefined; - -export const SingleButton = () => { - const node = ; - render(node); -}; - -export const SingleButtonWithCallback = () => { - const node = ; - render(node); -}; - -export const SingleButtonWithLinkEvent = () => { - const node = ( - - ); - render(node); -}; - -export const ListOfButtons = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ; - nodes.push(node); - } - render(
{nodes}
); -}; - -export const ListOfButtonsWithCallback = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
{nodes}
); -}; - -export const ListOfButtonsWithLinkEvent = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
{nodes}
); -}; - -export const ListOfButtonsWithIcons = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
{nodes}
); -}; - -export const ListOfButtonsWithTooltips = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
{nodes}
); -}; diff --git a/tgui/packages/tgui-bench/tests/Flex.test.tsx b/tgui/packages/tgui-bench/tests/Flex.test.tsx deleted file mode 100644 index 66c039a1908..00000000000 --- a/tgui/packages/tgui-bench/tests/Flex.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Flex } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -export const Default = () => { - const node = ( - - Text {Math.random()} - - Text {Math.random()} - - - ); - render(node); -}; diff --git a/tgui/packages/tgui-bench/tests/Stack.test.tsx b/tgui/packages/tgui-bench/tests/Stack.test.tsx deleted file mode 100644 index ce7f5599e72..00000000000 --- a/tgui/packages/tgui-bench/tests/Stack.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Stack } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -export const Default = () => { - const node = ( - - Text {Math.random()} - - Text {Math.random()} - - - ); - render(node); -}; diff --git a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx deleted file mode 100644 index 9dae16f5c03..00000000000 --- a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Box, Tooltip } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -export const ListOfTooltips = () => { - const nodes: JSX.Element[] = []; - - for (let i = 0; i < 100; i++) { - nodes.push( - - - Tooltip #{i} - - , - ); - } - - render(
{nodes}
); -}; diff --git a/tgui/packages/tgui-chat-dark/index.ts b/tgui/packages/tgui-chat-dark/index.ts new file mode 100644 index 00000000000..dd105da9774 --- /dev/null +++ b/tgui/packages/tgui-chat-dark/index.ts @@ -0,0 +1 @@ +import '../tgui-panel/styles/tgchat/chat-dark.scss'; diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js deleted file mode 100644 index af4bfe891cb..00000000000 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { exec } from 'child_process'; -import { promisify } from 'util'; -import { createLogger } from './logging.js'; -import { require } from './require.js'; - -const axios = require('axios'); -const logger = createLogger('dreamseeker'); - -const instanceByPid = new Map(); - -export class DreamSeeker { - constructor(pid, addr) { - this.pid = pid; - this.addr = addr; - this.client = axios.create({ - baseURL: `http://${addr}/`, - }); - } - - topic(params = {}) { - // prettier-ignore - const query = Object.keys(params) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(params[key])) - .join('&'); - logger.log( - `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, - ); - return this.client.get('/dummy?' + query); - } -} - -/** - * @param {number[]} pids - * @returns {DreamSeeker[]} - */ -DreamSeeker.getInstancesByPids = async (pids) => { - if (process.platform !== 'win32') { - return []; - } - const instances = []; - const pidsToResolve = []; - for (let pid of pids) { - const instance = instanceByPid.get(pid); - if (instance) { - instances.push(instance); - } else { - pidsToResolve.push(pid); - } - } - if (pidsToResolve.length > 0) { - try { - const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; - const { stdout } = await promisify(exec)(command, { - // Max buffer of 1MB (default is 200KB) - maxBuffer: 1024 * 1024, - }); - // Line format: - // proto addr mask mode pid - const entries = []; - const lines = stdout.split('\r\n'); - for (let line of lines) { - const words = line.match(/\S+/g); - if (!words || words.length === 0) { - continue; - } - const entry = { - addr: words[1], - pid: parseInt(words[4], 10), - }; - if (pidsToResolve.includes(entry.pid)) { - entries.push(entry); - } - } - const len = entries.length; - logger.log('found', len, plural('instance', len)); - for (let entry of entries) { - const { pid, addr } = entry; - const instance = new DreamSeeker(pid, addr); - instances.push(instance); - instanceByPid.set(pid, instance); - } - } catch (err) { - if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { - logger.error(err.message, err.code); - } else { - logger.error(err); - } - return []; - } - } - return instances; -}; - -const plural = (word, n) => (n !== 1 ? word + 's' : word); diff --git a/tgui/packages/tgui-dev-server/dreamseeker.ts b/tgui/packages/tgui-dev-server/dreamseeker.ts new file mode 100644 index 00000000000..90e26b914c4 --- /dev/null +++ b/tgui/packages/tgui-dev-server/dreamseeker.ts @@ -0,0 +1,115 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { exec } from 'node:child_process'; +import { promisify } from 'node:util'; + +import axios, { type AxiosInstance, type AxiosResponse } from 'axios'; + +import { createLogger } from './logging'; + +type Entry = { + addr: string; + pid: number; +}; + +const logger = createLogger('dreamseeker'); + +const instanceByPid = new Map(); + +export class DreamSeeker { + public pid: number; + public addr: string; + public client: AxiosInstance; + + constructor(pid: number, addr: string) { + this.pid = pid; + this.addr = addr; + this.client = axios.create({ + baseURL: `http://${addr}`, + }); + } + + topic(params: Record = {}): Promise { + const query = Object.keys(params) + .map( + (key) => + `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`, + ) + .join('&'); + logger.log( + `topic call at ${this.client.defaults.baseURL}/dummy.htm?${query}`, + ); + return this.client.get(`/dummy.htm?${query}`); + } + + static async getInstancesByPids(pids: number[]): Promise { + const instances: DreamSeeker[] = []; + const pidsToResolve: number[] = []; + + for (const pid of pids) { + const instance = instanceByPid.get(pid); + if (instance) { + instances.push(instance); + } else { + pidsToResolve.push(pid); + } + } + + if (pidsToResolve.length === 0) { + return instances; + } + + const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; + + try { + const { stdout } = await promisify(exec)(command, { + // Max buffer of 1MB (default is 200KB) + maxBuffer: 1024 * 1024, + }); + + // Line format: + // proto addr mask mode pid + const entries: Entry[] = []; + const lines = stdout.split('\r\n'); + + for (const line of lines) { + const words = line.match(/\S+/g); + if (!words || words.length === 0) { + continue; + } + const entry: Entry = { + addr: words[1], + pid: parseInt(words[4], 10), + }; + if (pidsToResolve.includes(entry.pid)) { + entries.push(entry); + } + } + + const len = entries.length; + logger.log('found', len, plural('instance', len)); + for (const entry of entries) { + const { pid, addr } = entry; + const instance = new DreamSeeker(pid, addr); + instances.push(instance); + instanceByPid.set(pid, instance); + } + } catch (err) { + if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { + logger.error(err.message, err.code); + } else { + logger.error(err); + } + return []; + } + return instances; + } +} + +function plural(word: string, n: number): string { + return n !== 1 ? `${word}s` : word; +} diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js deleted file mode 100644 index 199e93d8363..00000000000 --- a/tgui/packages/tgui-dev-server/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { createCompiler } from './webpack.js'; -import { reloadByondCache } from './reloader.js'; - -const noHot = process.argv.includes('--no-hot'); -const noTmp = process.argv.includes('--no-tmp'); -const reloadOnce = process.argv.includes('--reload'); - -const setupServer = async () => { - const compiler = await createCompiler({ - mode: 'development', - hot: !noHot, - devServer: true, - useTmpFolder: !noTmp, - }); - // Reload cache once - if (reloadOnce) { - await reloadByondCache(compiler.bundleDir); - return; - } - // Run a development server - await compiler.watch(); -}; - -setupServer(); diff --git a/tgui/packages/tgui-dev-server/index.ts b/tgui/packages/tgui-dev-server/index.ts new file mode 100644 index 00000000000..f7fe55851e4 --- /dev/null +++ b/tgui/packages/tgui-dev-server/index.ts @@ -0,0 +1,31 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import fs from 'node:fs'; + +import { reloadByondCache } from './reloader'; +import { RspackCompiler } from './webpack'; + +const reloadOnce = process.argv.includes('--reload'); + +async function setupServer() { + fs.mkdirSync('./public/.tmp', { recursive: true }); + + const compiler = new RspackCompiler(); + + await compiler.setup(); + + // Reload cache once + if (reloadOnce) { + await reloadByondCache(compiler.bundleDir); + return; + } + + // Run a development server + await compiler.watch(); +} + +setupServer(); diff --git a/tgui/packages/tgui-dev-server/link/client.cjs b/tgui/packages/tgui-dev-server/link/client.cjs deleted file mode 100644 index 1e21d42ce86..00000000000 --- a/tgui/packages/tgui-dev-server/link/client.cjs +++ /dev/null @@ -1,179 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -let socket; -const queue = []; -const subscribers = []; - -const ensureConnection = () => { - if (process.env.NODE_ENV !== 'production') { - if (!window.WebSocket) { - return; - } - if (!socket || socket.readyState === WebSocket.CLOSED) { - const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; - socket = new WebSocket(`ws://${DEV_SERVER_IP}:3000`); - socket.onopen = () => { - // Empty the message queue - while (queue.length !== 0) { - const msg = queue.shift(); - socket.send(msg); - } - }; - socket.onmessage = (event) => { - const msg = JSON.parse(event.data); - for (let subscriber of subscribers) { - subscriber(msg); - } - }; - } - } -}; - -if (process.env.NODE_ENV !== 'production') { - window.onunload = () => socket && socket.close(); -} - -const subscribe = (fn) => subscribers.push(fn); - -/** - * A json serializer which handles circular references and other junk. - */ -const serializeObject = (obj) => { - let refs = []; - const primitiveReviver = (value) => { - if (typeof value === 'number' && !Number.isFinite(value)) { - return { - __number__: String(value), - }; - } - if (typeof value === 'undefined') { - return { - __undefined__: true, - }; - } - return value; - }; - const objectReviver = (key, value) => { - if (typeof value === 'object') { - if (value === null) { - return value; - } - // Circular reference - if (refs.includes(value)) { - return '[circular ref]'; - } - refs.push(value); - // Error object - // prettier-ignore - const isError = value instanceof Error || ( - value.code && value.message && value.message.includes('Error') - ); - if (isError) { - return { - __error__: true, - string: String(value), - stack: value.stack, - }; - } - // Array - if (Array.isArray(value)) { - return value.map(primitiveReviver); - } - return value; - } - return primitiveReviver(value); - }; - const json = JSON.stringify(obj, objectReviver); - refs = null; - return json; -}; - -const sendMessage = (msg) => { - if (process.env.NODE_ENV !== 'production') { - const json = serializeObject(msg); - // Send message using WebSocket - if (window.WebSocket) { - ensureConnection(); - if (socket.readyState === WebSocket.OPEN) { - socket.send(json); - } else { - // Keep only 100 latest messages in the queue - if (queue.length > 100) { - queue.shift(); - } - queue.push(json); - } - } - // Send message using plain HTTP request. - else { - const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; - const req = new XMLHttpRequest(); - req.open('POST', `http://${DEV_SERVER_IP}:3001`, true); - req.timeout = 250; - req.send(json); - } - } -}; - -const sendLogEntry = (level, ns, ...args) => { - if (process.env.NODE_ENV !== 'production') { - try { - sendMessage({ - type: 'log', - payload: { - level, - ns: ns || 'client', - args, - }, - }); - } catch (err) {} - } -}; - -const setupHotReloading = () => { - if ( - // prettier-ignore - process.env.NODE_ENV !== 'production' - && process.env.WEBPACK_HMR_ENABLED - && window.WebSocket - ) { - if (module.hot) { - ensureConnection(); - sendLogEntry(0, null, 'setting up hot reloading'); - subscribe((msg) => { - const { type } = msg; - sendLogEntry(0, null, 'received', type); - if (type === 'hotUpdate') { - const status = module.hot.status(); - if (status !== 'idle') { - sendLogEntry(0, null, 'hot reload status:', status); - return; - } - module.hot - .check({ - ignoreUnaccepted: true, - ignoreDeclined: true, - ignoreErrored: true, - }) - .then((modules) => { - sendLogEntry(0, null, 'outdated modules', modules); - }) - .catch((err) => { - sendLogEntry(0, null, 'reload error', err); - }); - } - }); - } - } -}; - -module.exports = { - subscribe, - sendMessage, - sendLogEntry, - setupHotReloading, -}; diff --git a/tgui/packages/tgui-dev-server/link/client.ts b/tgui/packages/tgui-dev-server/link/client.ts new file mode 100644 index 00000000000..be283a67601 --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/client.ts @@ -0,0 +1,172 @@ +type Messenger = (msg: any) => void; + +let socket: WebSocket | undefined; +const queue: string[] = []; +const subscribers: Messenger[] = []; + +function ensureConnection() { + if (socket) return; + console.log('Creating a connection'); + + socket = new WebSocket('ws://127.0.0.1:3000'); + + socket.onopen = () => { + // Empty the message queue + while (queue.length !== 0) { + const msg = queue.shift(); + if (msg) { + socket?.send(msg); + } + } + }; + + socket.onmessage = (event) => { + const msg = JSON.parse(event.data); + for (const subscriber of subscribers) { + subscriber(msg); + } + }; + + socket.onerror = (err) => { + console.log('WebSocket error:', err); + }; + + window.addEventListener('unload', () => socket?.close()); +} + +function primitiveReviver(value: unknown): any { + if (typeof value === 'number' && !Number.isFinite(value)) { + return { + __number__: String(value), + }; + } + if (typeof value === 'undefined') { + return { + __undefined__: true, + }; + } + return value; +} + +export function sendLogEntry( + level: number, + ns: string | null = 'client', + ...args: any[] +): void { + if (process.env.NODE_ENV === 'development') { + try { + sendMessage({ + type: 'log', + payload: { + level, + ns, + args, + }, + }); + } catch (err) {} + } +} + +export function sendMessage(msg: Record): void { + if (process.env.NODE_ENV === 'development' && socket) { + const json = serializeObject(msg); + // Send message using WebSocket + if (!window.WebSocket) return; + + ensureConnection(); + if (socket.readyState === WebSocket.OPEN) { + socket.send(json); + } else { + // Keep only 100 latest messages in the queue + if (queue.length > 100) { + queue.shift(); + } + queue.push(json); + } + } +} + +/** A json serializer which handles circular references and other junk. */ +function serializeObject(obj: Record): string { + let refs: string[] = []; + + function objectReviver(key: string, value: any) { + if (typeof value !== 'object') { + return primitiveReviver(value); + } + + if (value === null) { + return value; + } + // Circular reference + if (refs.includes(value)) { + return '[circular ref]'; + } + refs.push(value); + // Error object + const isError = + value instanceof Error || + (value.code && value.message?.includes('Error')); + if (isError) { + return { + __error__: true, + string: String(value), + stack: value.stack, + }; + } + // Array + if (Array.isArray(value)) { + return value.map(primitiveReviver); + } + return value; + } + + const json = JSON.stringify(obj, objectReviver); + refs = []; + return json; +} + +export function setupHotReloading(): void { + if (process.env.NODE_ENV === 'development' && window.WebSocket) { + console.log('Setting up hot reloading...'); + if (socket) { + socket.close(); + socket = undefined; + subscribers.length = 0; + } + ensureConnection(); + subscribe(({ type }) => { + if (type !== 'hotUpdate') return; + + const status = import.meta.webpackHot?.status(); + if (status === 'ready') { + import.meta.webpackHot + ?.apply({ + ignoreUnaccepted: true, + ignoreDeclined: true, + ignoreErrored: true, + }) + .then((modules) => { + console.log('outdated modules:', modules); + }) + .catch((err) => { + console.log(import.meta.webpackHot?.status()); + console.error('Hot reload error:', err); + }); + } else if (status === 'idle') { + import.meta.webpackHot + ?.check(true) + .then((updatedModules) => { + console.log('Updated modules:', updatedModules); + }) + .catch((err) => { + console.error('Hot reload error:', err); + }); + } + }); + } +} + +export function subscribe(fn: Messenger): void { + subscribers.push(fn); +} diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.ts similarity index 56% rename from tgui/packages/tgui-dev-server/link/retrace.js rename to tgui/packages/tgui-dev-server/link/retrace.ts index b7f4d4eacfb..6fd1bc27ab0 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.ts @@ -1,46 +1,46 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ +import path from 'node:path'; -import fs from 'fs'; -import { basename } from 'path'; -import { createLogger } from '../logging.js'; -import { require } from '../require.js'; -import { resolveGlob } from '../util.js'; +import { SourceMapConsumer } from 'source-map'; +import { parse as parseStackTrace } from 'stacktrace-parser'; -const SourceMap = require('source-map'); -const { parse: parseStackTrace } = require('stacktrace-parser'); +import { createLogger } from '../logging'; +import { resolveGlob } from '../util'; + +type SourceMap = { + file: string; + consumer: SourceMapConsumer; +}; const logger = createLogger('retrace'); -const { SourceMapConsumer } = SourceMap; -const sourceMaps = []; +const sourceMaps: SourceMap[] = []; -export const loadSourceMaps = async (bundleDir) => { +export async function loadSourceMaps(bundleDir: string): Promise { // Destroy and garbage collect consumers while (sourceMaps.length !== 0) { - const { consumer } = sourceMaps.shift(); - consumer.destroy(); + const map = sourceMaps.shift(); + if (!map?.consumer) continue; + map.consumer.destroy(); } + // Load new sourcemaps - const paths = await resolveGlob(bundleDir, '*.map'); - for (let path of paths) { + const files = await resolveGlob(bundleDir, '*.map'); + for (const file of files) { try { - const file = basename(path).replace('.map', ''); - const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8')), - ); + const loc = path.resolve(bundleDir, file); + const parsed = await Bun.file(loc).json(); + const consumer = await new SourceMapConsumer(parsed); + sourceMaps.push({ file, consumer }); } catch (err) { logger.error(err); } } - logger.log(`loaded ${sourceMaps.length} source maps`); -}; -export const retrace = (stack) => { + logger.log(`loaded ${sourceMaps.length} source maps`); +} + +export function retrace(stack: string): string | undefined { if (typeof stack !== 'string') { logger.log('ERROR: Stack is not a string!', stack); return stack; @@ -53,7 +53,7 @@ export const retrace = (stack) => { } // Find the correct source map const sourceMap = sourceMaps.find((sourceMap) => { - return frame.file.includes(sourceMap.file); + return frame.file!.includes(sourceMap.file); }); if (!sourceMap) { return frame; @@ -61,9 +61,8 @@ export const retrace = (stack) => { // Map the frame const { consumer } = sourceMap; const mappedFrame = consumer.originalPositionFor({ - source: basename(frame.file), - line: frame.lineNumber, - column: frame.column, + line: frame.lineNumber || 0, + column: frame.column || 0, }); return { ...frame, @@ -79,10 +78,11 @@ export const retrace = (stack) => { return ` at ${methodName}`; } const compactPath = file - .replace(/^webpack:\/\/\/?/, './') + .replace(/^rspack:\/\/\/?/, './') .replace(/.*node_modules\//, ''); return ` at ${methodName} (${compactPath}:${lineNumber})`; }) .join('\n'); - return header + '\n' + mappedStack; -}; + + return `${header}\n${mappedStack}`; +} diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js deleted file mode 100644 index 60cc78c1bd9..00000000000 --- a/tgui/packages/tgui-dev-server/link/server.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import http from 'http'; -import { inspect } from 'util'; -import { createLogger, directLog } from '../logging.js'; -import { require } from '../require.js'; -import { loadSourceMaps, retrace } from './retrace.js'; - -const WebSocket = require('ws'); - -const logger = createLogger('link'); - -const DEBUG = process.argv.includes('--debug'); - -export { loadSourceMaps }; - -export const setupLink = () => new LinkServer(); - -class LinkServer { - constructor() { - logger.log('setting up'); - this.wss = null; - this.setupWebSocketLink(); - this.setupHttpLink(); - } - - // WebSocket-based client link - setupWebSocketLink() { - const port = 3000; - this.wss = new WebSocket.Server({ port }); - this.wss.on('connection', (ws) => { - logger.log('client connected'); - ws.on('message', (json) => { - const msg = deserializeObject(json); - this.handleLinkMessage(ws, msg); - }); - ws.on('close', () => { - logger.log('client disconnected'); - }); - }); - logger.log(`listening on port ${port} (WebSocket)`); - } - - // One way HTTP-based client link for IE8 - setupHttpLink() { - const port = 3001; - this.httpServer = http.createServer((req, res) => { - if (req.method === 'POST') { - let body = ''; - req.on('data', (chunk) => { - body += chunk.toString(); - }); - req.on('end', () => { - const msg = deserializeObject(body); - this.handleLinkMessage(null, msg); - res.end(); - }); - return; - } - res.write('Hello'); - res.end(); - }); - this.httpServer.listen(port); - logger.log(`listening on port ${port} (HTTP)`); - } - - handleLinkMessage(ws, msg) { - const { type, payload } = msg; - if (type === 'log') { - const { level, ns, args } = payload; - // Skip debug messages - if (level <= 0 && !DEBUG) { - return; - } - // prettier-ignore - directLog(ns, ...args.map(arg => { - if (typeof arg === 'object') { - return inspect(arg, { - depth: Infinity, - colors: true, - compact: 8, - }); - } - return arg; - })); - return; - } - if (type === 'relay') { - for (let client of this.wss.clients) { - if (client === ws) { - continue; - } - this.sendMessage(client, msg); - } - return; - } - logger.log('unhandled message', msg); - } - - sendMessage(ws, msg) { - ws.send(JSON.stringify(msg)); - } - - broadcastMessage(msg) { - const clients = [...this.wss.clients]; - if (clients.length === 0) { - return; - } - logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); - for (let client of clients) { - const json = JSON.stringify(msg); - client.send(json); - } - } -} - -const deserializeObject = (str) => { - return JSON.parse(str, (key, value) => { - if (typeof value === 'object' && value !== null) { - if (value.__undefined__) { - // NOTE: You should not rely on deserialized object's undefined, - // this is purely for inspection purposes. - return { - [inspect.custom]: () => undefined, - }; - } - if (value.__number__) { - return parseFloat(value.__number__); - } - if (value.__error__) { - if (!value.stack) { - return value.string; - } - return retrace(value.stack); - } - return value; - } - return value; - }); -}; diff --git a/tgui/packages/tgui-dev-server/link/server.ts b/tgui/packages/tgui-dev-server/link/server.ts new file mode 100644 index 00000000000..9b2ef1e4c85 --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/server.ts @@ -0,0 +1,116 @@ +import { inspect } from 'node:util'; + +import type { ServerWebSocket } from 'bun'; + +import { createLogger, directLog } from '../logging'; +import { retrace } from './retrace'; + +let server: Bun.Server; +const logger = createLogger('link'); +const DEBUG = process.argv.includes('--debug'); + +export function setupLink() { + server = Bun.serve({ + fetch: upgradeServer, + development: true, + hostname: '127.0.0.1', + port: 3000, + websocket: { + open(ws) { + ws.subscribe('link'); + logger.log('client connected'); + }, + close(ws) { + ws.unsubscribe('link'); + logger.log('client disconnected'); + }, + message: handleLinkMessage, + }, + }); +} + +export function broadcastMessage(msg: Record): void { + const subscribers = server.subscriberCount('link'); + if (subscribers === 0) return; + + server?.publish('link', JSON.stringify(msg)); +} + +function deserializeObject(str: any): any { + return JSON.parse(str, (_key: string, value: any) => { + if (typeof value === 'object' && value !== null) { + if (value.__undefined__) { + // NOTE: You should not rely on deserialized object's undefined, + // this is purely for inspection purposes. + return { + [inspect.custom]: () => undefined, + }; + } + if (value.__number__) { + return parseFloat(value.__number__); + } + if (value.__error__) { + if (!value.stack) { + return value.string; + } + return retrace(value.stack); + } + return value; + } + return value; + }); +} + +function handleLinkMessage( + _ws: ServerWebSocket, + message: string | Buffer, +): void { + const deserializedMsg = deserializeObject(message); + const { type, payload } = deserializedMsg; + + if (type === 'log') { + const { level, ns, args } = payload; + // Skip debug messages + if (level <= 0 && !DEBUG) return; + + directLog( + ns, + ...args.map((arg) => { + if (typeof arg === 'object') { + return inspect(arg, { + depth: Infinity, + colors: true, + compact: 8, + }); + } + return arg; + }), + ); + + return; + } + if (type === 'relay') { + broadcastMessage(payload); + + return; + } + + logger.log('unhandled message', JSON.stringify(message)); +} + +function upgradeServer(req: Request, srv: Bun.Server) { + const client = crypto.randomUUID(); + + const upgraded = srv.upgrade(req, { + data: { + id: client, + createdAt: Date.now(), + }, + }); + + if (upgraded) { + return new Response('Ok'); + } else { + return new Response('Upgrade failed', { status: 500 }); + } +} diff --git a/tgui/packages/tgui-dev-server/logging.js b/tgui/packages/tgui-dev-server/logging.js deleted file mode 100644 index 4ec09008ff5..00000000000 --- a/tgui/packages/tgui-dev-server/logging.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const inception = Date.now(); - -// Runtime detection -const isNode = process && process.release && process.release.name === 'node'; -let isChrome = false; -try { - isChrome = window.navigator.userAgent.toLowerCase().includes('chrome'); -} catch {} - -// Timestamping function -const getTimestamp = () => { - const timestamp = String(Date.now() - inception) - .padStart(4, '0') - .padStart(7, ' '); - const seconds = timestamp.substr(0, timestamp.length - 3); - const millis = timestamp.substr(-3); - return `${seconds}.${millis}`; -}; - -const getPrefix = (() => { - if (isNode) { - // Escape sequences - const ESC = { - dimmed: '\x1b[38;5;240m', - bright: '\x1b[37;1m', - reset: '\x1b[0m', - }; - return (ns) => [ - `${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`, - ]; - } - if (isChrome) { - // Styles - const styles = { - dimmed: 'color: #888', - bright: 'font-weight: bold', - }; - return (ns) => [ - `%c${getTimestamp()}%c ${ns}`, - styles.dimmed, - styles.bright, - ]; - } - // prettier-ignore - return ns => [ - `${getTimestamp()} ${ns}`, - ]; -})(); - -/** - * Creates a logger object. - */ -export const createLogger = (ns) => ({ - log: (...args) => console.log(...getPrefix(ns), ...args), - trace: (...args) => console.trace(...getPrefix(ns), ...args), - debug: (...args) => console.debug(...getPrefix(ns), ...args), - info: (...args) => console.info(...getPrefix(ns), ...args), - warn: (...args) => console.warn(...getPrefix(ns), ...args), - error: (...args) => console.error(...getPrefix(ns), ...args), -}); - -/** - * Explicitly log with chosen namespace. - */ -export const directLog = (ns, ...args) => - console.log(...getPrefix(ns), ...args); diff --git a/tgui/packages/tgui-dev-server/logging.ts b/tgui/packages/tgui-dev-server/logging.ts new file mode 100644 index 00000000000..bf46b365ce3 --- /dev/null +++ b/tgui/packages/tgui-dev-server/logging.ts @@ -0,0 +1,72 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +type Fn = (...args: any[]) => void; + +const inception = Date.now(); + +// Runtime detection. Yes, even in bun! +const isNode = process?.release?.name === 'node'; +let isChrome = false; +try { + isChrome = window.navigator.userAgent.toLowerCase().includes('chrome'); +} catch {} + +// Timestamping function +function getTimestamp(): string { + const timestamp = String(Date.now() - inception) + .padStart(4, '0') + .padStart(7, ' '); + const seconds = timestamp.slice(0, timestamp.length - 3); + const millis = timestamp.slice(-3); + + return `${seconds}.${millis}`; +} + +const getPrefix = (() => { + if (isNode) { + // Escape sequences + const ESC = { + dimmed: '\x1b[38;5;240m', + bright: '\x1b[37;1m', + reset: '\x1b[0m', + }; + return (ns: string) => [ + `${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`, + ]; + } + if (isChrome) { + // Styles + const styles = { + dimmed: 'color: #888', + bright: 'font-weight: bold', + }; + return (ns: string) => [ + `%c${getTimestamp()}%c ${ns}`, + styles.dimmed, + styles.bright, + ]; + } + + return (ns: string) => [`${getTimestamp()} ${ns}`]; +})(); + +/** Creates a logger object. */ +export function createLogger(ns: string): Record { + return { + log: (...args) => console.log(...getPrefix(ns), ...args), + trace: (...args) => console.trace(...getPrefix(ns), ...args), + debug: (...args) => console.debug(...getPrefix(ns), ...args), + info: (...args) => console.info(...getPrefix(ns), ...args), + warn: (...args) => console.warn(...getPrefix(ns), ...args), + error: (...args) => console.error(...getPrefix(ns), ...args), + }; +} + +/** Explicitly log with chosen namespace. */ +export function directLog(ns: string, ...args: any[]): void { + console.log(...getPrefix(ns), ...args); +} diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index bd1ee1a5bd6..26049529bd6 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,13 +1,11 @@ { - "private": true, - "name": "tgui-dev-server", - "version": "4.3.1", - "type": "module", - "dependencies": { - "axios": "^1.15.0", - "glob": "^7.1.7", - "source-map": "^0.7.4", - "stacktrace-parser": "^0.1.10", - "ws": "^7.5.10" - } + "name": "tgui-dev-server", + "version": "6.0.0", + "dependencies": { + "axios": "^1.16.0", + "source-map": "^0.7.4", + "stacktrace-parser": "^0.1.11" + }, + "private": true, + "type": "module" } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.ts similarity index 52% rename from tgui/packages/tgui-dev-server/reloader.js rename to tgui/packages/tgui-dev-server/reloader.ts index 427d1aecbd6..fdbb2aa066c 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.ts @@ -4,16 +4,19 @@ * @license MIT */ -import fs from 'fs'; -import os from 'os'; -import { basename } from 'path'; -import { DreamSeeker } from './dreamseeker.js'; -import { createLogger } from './logging.js'; -import { resolveGlob, resolvePath } from './util.js'; -import { regQuery } from './winreg.js'; +import os from 'node:os'; +import path from 'node:path'; + +import { DreamSeeker } from './dreamseeker'; +import { createLogger } from './logging'; +import { resolveGlob, resolvePath } from './util'; +import { regQuery } from './winreg'; const logger = createLogger('reloader'); +// Basic glob pattern for bundle files +const bundleGlob = '*.{bundle,chunk,hot-update}.*'; + const HOME = os.homedir(); const SEARCH_LOCATIONS = [ // Custom location @@ -28,18 +31,20 @@ const SEARCH_LOCATIONS = [ `/mnt/c/Users/*/*/BYOND/cache`, ]; -let cacheRoot; +let cacheRoot: string; -export const findCacheRoot = async () => { +export async function findCacheRoot(): Promise { if (cacheRoot) { return cacheRoot; } logger.log('looking for byond cache'); // Find BYOND cache folders - for (let pattern of SEARCH_LOCATIONS) { + + for (const pattern of SEARCH_LOCATIONS) { if (!pattern) { continue; } + const paths = await resolveGlob(pattern); if (paths.length > 0) { cacheRoot = paths[0]; @@ -47,67 +52,66 @@ export const findCacheRoot = async () => { return cacheRoot; } } + // Query the Windows Registry if (process.platform === 'win32') { logger.log('querying windows registry'); - let userpath = await regQuery('HKCU\\Software\\Dantom\\BYOND', 'userpath'); + const userpath = await regQuery( + 'HKCU\\Software\\Dantom\\BYOND', + 'userpath', + ); if (userpath) { - // prettier-ignore - cacheRoot = userpath - .replace(/\\$/, '') - .replace(/\\/g, '/') - + '/cache'; - onCacheRootFound(cacheRoot); + cacheRoot = `${userpath.replace(/\\$/, '').replace(/\\/g, '/')}/cache`; + await onCacheRootFound(cacheRoot); return cacheRoot; } } logger.log('found no cache directories'); -}; +} -const onCacheRootFound = (cacheRoot) => { +async function onCacheRootFound(cacheRoot: string): Promise { logger.log(`found cache at '${cacheRoot}'`); // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. - fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); -}; + await Bun.write(`${cacheRoot}/dummy.htm`, ''); +} -export const reloadByondCache = async (bundleDir) => { +export async function reloadByondCache(bundleDir: string): Promise { const cacheRoot = await findCacheRoot(); - if (!cacheRoot) { - return; - } + if (!cacheRoot) return; + // Find tmp folders in cache - const cacheDirs = await resolveGlob(cacheRoot, './tmp*'); + const cacheDirs = await resolveGlob(cacheRoot, 'tmp*'); if (cacheDirs.length === 0) { logger.log('found no tmp folder in cache'); return; } - // Get dreamseeker instances - const pids = cacheDirs.map((cacheDir) => - parseInt(cacheDir.split('/cache/tmp').pop(), 10), - ); + + const pids = cacheDirs.map((cacheDir) => { + return parseInt(cacheDir.split('\\cache\\tmp')[1], 10); + }); + const dssPromise = DreamSeeker.getInstancesByPids(pids); // Copy assets - const assets = await resolveGlob( - bundleDir, - './*.+(bundle|chunk|hot-update).*', - ); - for (let cacheDir of cacheDirs) { - // Clear garbage - const garbage = await resolveGlob( - cacheDir, - './*.+(bundle|chunk|hot-update).*', - ); - try { - // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. - fs.closeSync(fs.openSync(cacheDir + '/dummy', 'w')); + const assets = await resolveGlob(bundleDir, bundleGlob); + + for (const cacheDir of cacheDirs) { + // Clear garbage + const garbage = await resolveGlob(cacheDir, bundleGlob); + for (const file of garbage) { + await Bun.file(file).delete(); + } + + try { + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515-516. + await Bun.write(`${cacheDir}/dummy.htm`, ''); - for (let file of garbage) { - fs.unlinkSync(file); - } // Copy assets - for (let asset of assets) { - const destination = resolvePath(cacheDir, basename(asset)); - fs.writeFileSync(destination, fs.readFileSync(asset)); + for (const asset of assets) { + const destination = resolvePath(cacheDir, path.basename(asset)); + const input = Bun.file(asset); + const output = Bun.file(destination); + + await Bun.write(output, input); } logger.log(`copied ${assets.length} files to '${cacheDir}'`); } catch (err) { @@ -119,11 +123,11 @@ export const reloadByondCache = async (bundleDir) => { const dss = await dssPromise; if (dss.length > 0) { logger.log(`notifying dreamseeker`); - for (let dreamseeker of dss) { + for (const dreamseeker of dss) { dreamseeker.topic({ tgui: 1, type: 'cacheReloaded', }); } } -}; +} diff --git a/tgui/packages/tgui-dev-server/require.js b/tgui/packages/tgui-dev-server/require.ts similarity index 73% rename from tgui/packages/tgui-dev-server/require.js rename to tgui/packages/tgui-dev-server/require.ts index 0551d630fc6..d1f5ec4ce16 100644 --- a/tgui/packages/tgui-dev-server/require.js +++ b/tgui/packages/tgui-dev-server/require.ts @@ -4,6 +4,6 @@ * @license MIT */ -import { createRequire } from 'module'; +import { createRequire } from 'node:module'; export const require = createRequire(import.meta.url); diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js deleted file mode 100644 index 9d07b96c71a..00000000000 --- a/tgui/packages/tgui-dev-server/util.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import fs from 'fs'; -import path from 'path'; -import { require } from './require.js'; - -const globPkg = require('glob'); - -export const resolvePath = path.resolve; - -/** - * Combines path.resolve with glob patterns. - */ -export const resolveGlob = (...sections) => { - const unsafePaths = globPkg.sync(path.resolve(...sections), { - strict: false, - silent: true, - }); - const safePaths = []; - for (let path of unsafePaths) { - try { - fs.statSync(path); - safePaths.push(path); - } catch {} - } - return safePaths; -}; diff --git a/tgui/packages/tgui-dev-server/util.ts b/tgui/packages/tgui-dev-server/util.ts new file mode 100644 index 00000000000..3c162b4abab --- /dev/null +++ b/tgui/packages/tgui-dev-server/util.ts @@ -0,0 +1,40 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import path from 'node:path'; + +import { Glob } from 'bun'; + +export const resolvePath = path.resolve; + +/** Combines path.resolve with glob patterns. */ +export async function resolveGlob( + directory: string, + pattern = '*', +): Promise { + // If no pattern is supplied, just return the directory if it exists + if (pattern === '*') { + try { + const stat = await Bun.file(directory).stat(); + if (stat?.isDirectory()) { + return [directory]; + } + } catch (e) { + return []; + } + return []; + } + + // Otherwise, use glob logic + const glob = new Glob(pattern); + const results: string[] = []; + + for await (const match of glob.scan({ onlyFiles: false, cwd: directory })) { + results.push(path.resolve(directory, match)); + } + + return results; +} diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js deleted file mode 100644 index 139610b79ce..00000000000 --- a/tgui/packages/tgui-dev-server/webpack.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import fs from 'fs'; -import { createRequire } from 'module'; -import { dirname } from 'path'; -import { loadSourceMaps, setupLink } from './link/server.js'; -import { createLogger } from './logging.js'; -import { reloadByondCache } from './reloader.js'; -import { resolveGlob } from './util.js'; - -const logger = createLogger('webpack'); - -/** - * @param {any} config - * @return {WebpackCompiler} - */ -export const createCompiler = async (options) => { - const compiler = new WebpackCompiler(); - await compiler.setup(options); - return compiler; -}; - -class WebpackCompiler { - async setup(options) { - // Create a require context that is relative to project root - // and retrieve all necessary dependencies. - const requireFromRoot = createRequire(dirname(import.meta.url) + '/../..'); - const webpack = await requireFromRoot('webpack'); - const createConfig = await requireFromRoot('./webpack.config.js'); - const config = createConfig({}, options); - // Inject the HMR plugin into the config if we're using it - if (options.hot) { - config.plugins.push(new webpack.HotModuleReplacementPlugin()); - } - this.webpack = webpack; - this.config = config; - this.bundleDir = config.output.path; - } - - async watch() { - logger.log('setting up'); - // Setup link - const link = setupLink(); - // Instantiate the compiler - const compiler = this.webpack.webpack(this.config); - // Clear garbage before compiling - compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { - const files = await resolveGlob(this.bundleDir, './*.hot-update.*'); - logger.log(`clearing garbage (${files.length} files)`); - for (let file of files) { - fs.unlinkSync(file); - } - logger.log('compiling'); - }); - // Start reloading when it's finished - compiler.hooks.done.tap('tgui-dev-server', async (stats) => { - // Load source maps - await loadSourceMaps(this.bundleDir); - // Reload cache - await reloadByondCache(this.bundleDir); - // Notify all clients that update has happened - link.broadcastMessage({ - type: 'hotUpdate', - }); - }); - // Start watching - logger.log('watching for changes'); - compiler.watch({}, (err, stats) => { - if (err) { - logger.error('compilation error', err); - return; - } - stats - .toString(this.config.devServer.stats) - .split('\n') - .forEach((line) => logger.log(line)); - }); - } -} diff --git a/tgui/packages/tgui-dev-server/webpack.ts b/tgui/packages/tgui-dev-server/webpack.ts new file mode 100644 index 00000000000..3b1eb522dea --- /dev/null +++ b/tgui/packages/tgui-dev-server/webpack.ts @@ -0,0 +1,69 @@ +import { createRequire } from 'node:module'; + +import { config } from '../../rspack.config-dev'; +import { loadSourceMaps } from './link/retrace'; +import { broadcastMessage, setupLink } from './link/server'; +import { createLogger } from './logging'; +import { reloadByondCache } from './reloader'; +import { resolveGlob } from './util'; + +const logger = createLogger('rspack'); + +export class RspackCompiler { + rspack: any; + config: any; + bundleDir: string; + + async setup() { + // Create a require context that is relative to project root + // and retrieve all necessary dependencies. + const requireFromRoot = createRequire(`${import.meta.dirname}/../../..`); + const rspack = await requireFromRoot('@rspack/core'); + + this.rspack = rspack; + this.config = config; + this.bundleDir = config.output?.path || ''; + } + + async watch() { + logger.log('setting up'); + setupLink(); + // Instantiate the compiler + const compiler = this.rspack.rspack(this.config); + + // Clear garbage before compiling + compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { + const files = await resolveGlob(this.bundleDir, '*.hot-update.*'); + for (const file of files) { + await Bun.file(file).delete(); + } + logger.log('compiling'); + }); + + // Start reloading when it's finished + compiler.hooks.done.tap('tgui-dev-server', async () => { + // Load source maps + await loadSourceMaps(this.bundleDir); + // Reload cache + await reloadByondCache(this.bundleDir); + // Notify all clients that update has happened + broadcastMessage({ + type: 'hotUpdate', + }); + }); + // Start watching + logger.log('watching for changes'); + compiler.watch({}, (err, stats) => { + if (err) { + logger.error('compilation error', err); + return; + } + stats + ?.toString(this.config.stats) + .split('\n') + .forEach((line) => { + logger.log(line); + }); + }); + } +} diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.ts similarity index 69% rename from tgui/packages/tgui-dev-server/winreg.js rename to tgui/packages/tgui-dev-server/winreg.ts index b61fddc1a25..c3c0a85a0bf 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.ts @@ -6,39 +6,47 @@ * @license MIT */ -import { exec } from 'child_process'; -import { promisify } from 'util'; -import { createLogger } from './logging.js'; +import { exec } from 'node:child_process'; +import { promisify } from 'node:util'; + +import { createLogger } from './logging'; const logger = createLogger('winreg'); -export const regQuery = async (path, key) => { +/** Query a registry key. */ +export async function regQuery( + path: string, + key: string, +): Promise { if (process.platform !== 'win32') { - return null; + return; } try { const command = `reg query "${path}" /v ${key}`; const { stdout } = await promisify(exec)(command); const keyPattern = ` ${key} `; const indexOfKey = stdout.indexOf(keyPattern); + if (indexOfKey === -1) { logger.error('could not find the registry key'); - return null; + return; } + const indexOfEol = stdout.indexOf('\r\n', indexOfKey); if (indexOfEol === -1) { logger.error('could not find the end of the line'); - return null; + return; } + const indexOfValue = stdout.indexOf(' ', indexOfKey + keyPattern.length); if (indexOfValue === -1) { logger.error('could not find the start of the key value'); - return null; + return; } - const value = stdout.substring(indexOfValue + 4, indexOfEol); - return value; + + return stdout.substring(indexOfValue + 4, indexOfEol); } catch (err) { logger.error(err); - return null; + return; } -}; +} diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.tsx similarity index 80% rename from tgui/packages/tgui-panel/Notifications.js rename to tgui/packages/tgui-panel/Notifications.tsx index 2b92995287f..9c87ca633a7 100644 --- a/tgui/packages/tgui-panel/Notifications.js +++ b/tgui/packages/tgui-panel/Notifications.tsx @@ -4,15 +4,17 @@ * @license MIT */ -import { Flex } from 'tgui/components'; +import { Flex } from 'tgui-core/components'; -export const Notifications = (props) => { +export function Notifications(props) { const { children } = props; - return
{children}
; -}; -const NotificationsItem = (props) => { + return
{children}
; +} + +function NotificationsItem(props) { const { rightSlot, children } = props; + return ( @@ -23,6 +25,6 @@ const NotificationsItem = (props) => { )} ); -}; +} Notifications.Item = NotificationsItem; diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.tsx similarity index 50% rename from tgui/packages/tgui-panel/Panel.js rename to tgui/packages/tgui-panel/Panel.tsx index 18976735de9..7ad6ebed3d0 100644 --- a/tgui/packages/tgui-panel/Panel.js +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -4,38 +4,38 @@ * @license MIT */ -import { Button, Section, Stack } from 'tgui/components'; +import { useAtom, useAtomValue } from 'jotai'; import { Pane } from 'tgui/layouts'; -import { NowPlayingWidget, useAudio } from './audio'; -import { ChatPanel, ChatTabs } from './chat'; -import { useGame } from './game'; +import { Button, Section, Stack } from 'tgui-core/components'; +import { visibleAtom } from './audio/atoms'; +import { NowPlayingWidget } from './audio/NowPlayingWidget'; +import { ChatPanel } from './chat/ChatPanel'; +import { ChatTabs } from './chat/ChatTabs'; +import { useChatPersistence } from './chat/use-chat-persistence'; +import { gameAtom } from './game/atoms'; +import { useKeepAlive } from './game/use-keep-alive'; import { Notifications } from './Notifications'; -import { PingIndicator } from './ping'; +import { PingIndicator } from './ping/PingIndicator'; import { ReconnectButton } from './reconnect'; -import { SettingsPanel, useSettings } from './settings'; +import { settingsVisibleAtom } from './settings/atoms'; +import { SettingsPanel } from './settings/SettingsPanel'; +import { useSettings } from './settings/use-settings'; + +export function Panel(props) { + const [audioVisible, setAudioVisible] = useAtom(visibleAtom); + const game = useAtomValue(gameAtom); + const { settings } = useSettings(); + const [settingsVisible, setSettingsVisible] = useAtom(settingsVisibleAtom); + useChatPersistence(); + useKeepAlive(); -export const Panel = (props, context) => { - // IE8-10: Needs special treatment due to missing Flex support - if (Byond.IS_LTE_IE10) { - return ; - } - const audio = useAudio(context); - const settings = useSettings(context); - const game = useGame(context); - if (process.env.NODE_ENV !== 'production') { - const { useDebug, KitchenSink } = require('tgui/debug'); - const debug = useDebug(context); - if (debug.kitchenSink) { - return ; - } - } return ( - +
- + @@ -44,42 +44,40 @@ export const Panel = (props, context) => {
- {audio.visible && ( + {audioVisible && (
)} - {settings.visible && ( + {settingsVisible && ( )}
- + @@ -101,29 +99,4 @@ export const Panel = (props, context) => { ); -}; - -const HoboPanel = (props, context) => { - const settings = useSettings(context); - return ( - - - - {(settings.visible && ) || ( - - )} - - - ); -}; +} diff --git a/tgui/packages/tgui-panel/app.tsx b/tgui/packages/tgui-panel/app.tsx new file mode 100644 index 00000000000..efe198ae3a7 --- /dev/null +++ b/tgui/packages/tgui-panel/app.tsx @@ -0,0 +1,12 @@ +import { Provider } from 'jotai'; +import { store } from './events/store'; +import { Panel } from './Panel'; + +/** Just an expandable wrapper for setup shenanigans and providers */ +export function App() { + return ( + + + + ); +} diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx similarity index 51% rename from tgui/packages/tgui-panel/audio/NowPlayingWidget.js rename to tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx index af5380a7a5b..74f6f14c0c8 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx @@ -4,57 +4,62 @@ * @license MIT */ -import { toFixed } from 'common/math'; -import { useDispatch, useSelector } from 'common/redux'; -import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; -import { useSettings } from '../settings'; -import { selectAudio } from './selectors'; +import { useAtomValue } from 'jotai'; +import { Button, Collapsible, Flex, Knob, Section } from 'tgui-core/components'; +import { toFixed } from 'tgui-core/math'; +import { useSettings } from '../settings/use-settings'; +import { metaAtom, playingAtom } from './atoms'; +import { player } from './handlers'; -export const NowPlayingWidget = (props, context) => { - const audio = useSelector(context, selectAudio), - dispatch = useDispatch(context), - settings = useSettings(context), - title = audio.meta?.title, - URL = audio.meta?.link, - Artist = audio.meta?.artist || 'Unknown Artist', - upload_date = audio.meta?.upload_date || 'Unknown Date', - album = audio.meta?.album || 'Unknown Album', - duration = audio.meta?.duration, - date = !isNaN(upload_date) - ? upload_date?.substring(0, 4) + - '-' + - upload_date?.substring(4, 6) + - '-' + - upload_date?.substring(6, 8) - : upload_date; +export function NowPlayingWidget(props) { + const { settings, updateSettings } = useSettings(); + const meta = useAtomValue(metaAtom); + const { + album = 'Unknown Album', + artist = 'Unknown Artist', + duration, + link, + title, + upload_date = 'Unknown Data', + } = meta || {}; + + const playing = useAtomValue(playingAtom); + + const date = !Number.isNaN(upload_date) + ? upload_date?.substring(0, 4) + + '-' + + upload_date?.substring(4, 6) + + '-' + + upload_date?.substring(6, 8) + : upload_date; return ( - {(audio.playing && ( + {playing ? ( { - +
- {URL !== 'Song Link Hidden' && ( + {link !== 'Song Link Hidden' && ( - Url: {URL} + URL: {link} )} Duration: {duration} - {Artist !== 'Song Artist Hidden' && - Artist !== 'Unknown Artist' && ( + {artist !== 'Song Artist Hidden' && + artist !== 'Unknown Artist' && ( - Artist: {Artist} + Artist: {artist} )} {album !== 'Song Album Hidden' && album !== 'Unknown Album' && ( @@ -72,22 +77,14 @@ export const NowPlayingWidget = (props, context) => { } - )) || ( + ) : ( Nothing to play. )} - {audio.playing && ( + {playing && ( - - - - -
- {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && !typeDef.admin, - ).map((typeDef) => ( - - dispatch( - toggleAcceptedType({ - pageId: page.id, - type: typeDef.type, - }), - ) - } - > - {typeDef.name} - - ))} - - {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && typeDef.admin, - ).map((typeDef) => ( - - dispatch( - toggleAcceptedType({ - pageId: page.id, - type: typeDef.type, - }), - ) - } - > - {typeDef.name} - - ))} - -
-
- ); -}; diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.tsx b/tgui/packages/tgui-panel/chat/ChatPageSettings.tsx new file mode 100644 index 00000000000..5057cf22d40 --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPageSettings.tsx @@ -0,0 +1,113 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { + Button, + Collapsible, + Divider, + Input, + Section, + Stack, +} from 'tgui-core/components'; +import { MESSAGE_TYPES } from './constants'; +import { useChatPages } from './use-chat-pages'; + +export function ChatPageSettings(props) { + const { + page, + moveChatLeft, + moveChatRight, + updateChatPage, + removeChatPage, + toggleAcceptedType, + } = useChatPages(); + + return ( +
+ + {!page.isMain && ( + + + + )} + + +
+ {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && !typeDef.admin, + ).map((typeDef) => ( + toggleAcceptedType(typeDef.type)} + > + {typeDef.name} + + ))} + + {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && typeDef.admin, + ).map((typeDef) => ( + toggleAcceptedType(typeDef.type)} + > + {typeDef.name} + + ))} + +
+
+ ); +} diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.js b/tgui/packages/tgui-panel/chat/ChatPanel.js deleted file mode 100644 index 1577e933fb4..00000000000 --- a/tgui/packages/tgui-panel/chat/ChatPanel.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { shallowDiffers } from 'common/react'; -import { Component, createRef } from 'inferno'; -import { Button } from 'tgui/components'; -import { chatRenderer } from './renderer'; - -export class ChatPanel extends Component { - constructor() { - super(); - this.ref = createRef(); - this.state = { - scrollTracking: true, - }; - this.handleScrollTrackingChange = (value) => - this.setState({ - scrollTracking: value, - }); - } - - componentDidMount() { - chatRenderer.mount(this.ref.current); - chatRenderer.events.on( - 'scrollTrackingChanged', - this.handleScrollTrackingChange, - ); - this.componentDidUpdate(); - } - - componentWillUnmount() { - chatRenderer.events.off( - 'scrollTrackingChanged', - this.handleScrollTrackingChange, - ); - } - - componentDidUpdate(prevProps) { - requestAnimationFrame(() => { - chatRenderer.ensureScrollTracking(); - }); - const shouldUpdateStyle = - !prevProps || shallowDiffers(this.props, prevProps); - if (shouldUpdateStyle) { - chatRenderer.assignStyle({ - width: '100%', - 'white-space': 'pre-wrap', - 'font-size': this.props.fontSize, - 'line-height': this.props.lineHeight, - }); - } - } - - render() { - const { scrollTracking } = this.state; - return ( - <> -
- {!scrollTracking && ( - - )} - - ); - } -} diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.tsx b/tgui/packages/tgui-panel/chat/ChatPanel.tsx new file mode 100644 index 00000000000..17171ddf81b --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPanel.tsx @@ -0,0 +1,76 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useAtom, useAtomValue } from 'jotai'; +import { useEffect, useRef } from 'react'; +import { Button } from 'tgui-core/components'; +import { + chatPagesRecordAtom, + currentPageIdAtom, + scrollTrackingAtom, +} from './atom'; +import { chatRenderer } from './renderer'; +import type { Page } from './types'; + +type Props = { + fontSize?: string; + lineHeight: string | number; +}; + +export function ChatPanel(props: Props) { + const ref = useRef(null); + const scrollTracking = useAtomValue(scrollTrackingAtom); + // Page stuff + const currentPageId = useAtomValue(currentPageIdAtom); + const [pagesRecord, setPagesRecord] = useAtom(chatPagesRecordAtom); + + /** Mounts the renderer */ + useEffect(() => { + if (ref.current) { + chatRenderer.mount(ref.current); + } + }, []); + + /** Resets unread count when scroll tracking is enabled */ + useEffect(() => { + if (scrollTracking) { + const draft: Page = { + ...pagesRecord[currentPageId], + unreadCount: 0, + }; + + setPagesRecord({ + ...pagesRecord, + [currentPageId]: draft, + }); + } + }, [scrollTracking]); + + /** Updates the style of the chat panel */ + useEffect(() => { + chatRenderer.assignStyle({ + width: '100%', + 'white-space': 'pre-wrap', + 'font-size': props.fontSize, + 'line-height': props.lineHeight, + }); + }, [props.fontSize, props.lineHeight]); + + return ( + <> +
+ {!scrollTracking && ( + + )} + + ); +} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.js deleted file mode 100644 index 601cd111589..00000000000 --- a/tgui/packages/tgui-panel/chat/ChatTabs.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useDispatch, useSelector } from 'common/redux'; -import { Box, Tabs, Flex, Button } from 'tgui/components'; -import { changeChatPage, addChatPage } from './actions'; -import { selectChatPages, selectCurrentChatPage } from './selectors'; -import { openChatSettings } from '../settings/actions'; - -const UnreadCountWidget = ({ value }) => ( - - {Math.min(value, 99)} - -); - -export const ChatTabs = (props, context) => { - const pages = useSelector(context, selectChatPages); - const currentPage = useSelector(context, selectCurrentChatPage); - const dispatch = useDispatch(context); - return ( - - - - {pages.map((page) => ( - 0 && ( - - ) - } - onClick={() => - dispatch( - changeChatPage({ - pageId: page.id, - }), - ) - } - > - {page.name} - - ))} - - - - + /> ); -}; +} diff --git a/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx b/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx new file mode 100644 index 00000000000..cf0a8c19a5c --- /dev/null +++ b/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx @@ -0,0 +1,202 @@ +import { useState } from 'react'; +import { + Button, + Collapsible, + Divider, + Input, + LabeledList, + Section, + Slider, + Stack, +} from 'tgui-core/components'; +import { toFixed } from 'tgui-core/math'; +import { capitalize } from 'tgui-core/string'; +import { chatRenderer } from '../chat/renderer'; +import { FONTS, THEMES } from './constants'; +import { resetPaneSplitters, setEditPaneSplitters } from './scaling'; +import { exportChatSettings, importChatSettings } from './settingsImExport'; +import { useSettings } from './use-settings'; + +export function SettingsGeneral(props) { + const { settings, updateSettings } = useSettings(); + const [freeFont, setFreeFont] = useState(false); + + const [editingPanes, setEditingPanes] = useState(false); + + return ( +
+ + + {THEMES.map((THEME) => ( + + ))} + + + + + + + + + + + + + + {!freeFont ? ( + { + setFreeFont(!freeFont); + }} + > + Custom font + + } + > + {FONTS.map((FONT) => ( + + ))} + + ) : ( + + + updateSettings({ + fontFamily: value, + }) + } + /> + + + )} + + + + + + toFixed(value)} + onChange={(_, value) => updateSettings({ fontSize: value })} + /> + + + + + toFixed(value, 2)} + onChange={(_, value) => + updateSettings({ + lineHeight: value, + }) + } + /> + + + + + + + + + + Import settings + + + + + + + chatRenderer.clearChat()} + > + Clear chat + + + +
+ ); +} diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.js deleted file mode 100644 index 9c49a6c6b94..00000000000 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ /dev/null @@ -1,451 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { toFixed } from 'common/math'; -import { useLocalState } from 'tgui/backend'; -import { useDispatch, useSelector } from 'common/redux'; -import { - Box, - Button, - ColorBox, - Divider, - Dropdown, - Flex, - Input, - LabeledList, - NumberInput, - Section, - Stack, - Tabs, - TextArea, -} from 'tgui/components'; -import { ChatPageSettings } from '../chat'; -import { - rebuildChat, - saveChatToDisk, - clearChatMessages, -} from '../chat/actions'; -import { THEMES } from '../themes'; -import { - changeSettingsTab, - updateSettings, - addHighlightSetting, - removeHighlightSetting, - updateHighlightSetting, -} from './actions'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; -import { resetPaneSplitters, setEditPaneSplitters } from './scaling'; -import { - selectActiveTab, - selectSettings, - selectHighlightSettings, - selectHighlightSettingById, -} from './selectors'; -import { IMPL_IFRAME_INDEXED_DB, storage } from 'common/storage'; - -export const SettingsPanel = (props, context) => { - const activeTab = useSelector(context, selectActiveTab); - const dispatch = useDispatch(context); - return ( - - -
- - {SETTINGS_TABS.map((tab) => ( - - dispatch( - changeSettingsTab({ - tabId: tab.id, - }), - ) - } - > - {tab.name} - - ))} - -
-
- - {activeTab === 'general' && } - {activeTab === 'chatPage' && } - {activeTab === 'textHighlight' && } - -
- ); -}; - -export const SettingsGeneral = (props, context) => { - const { theme, fontFamily, fontSize, lineHeight, maxMessages } = useSelector( - context, - selectSettings, - ); - const dispatch = useDispatch(context); - const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); - const [editingPanes, setEditingPanes] = useLocalState( - context, - 'uiScaling', - false, - ); - return ( -
- - - - dispatch( - updateSettings({ - theme: value, - }), - ) - } - /> - - - - - - - - - - - - - - - {(!freeFont && ( - - dispatch( - updateSettings({ - fontFamily: value, - }), - ) - } - /> - )) || ( - - dispatch( - updateSettings({ - fontFamily: value, - }), - ) - } - /> - )} - - - - -
- ); -}; - -const TextHighlightSettings = (props, context) => { - const highlightSettings = useSelector(context, selectHighlightSettings); - const settings = useSelector(context, selectSettings); - const dispatch = useDispatch(context); - return ( -
-
- - {highlightSettings.map((id, i) => ( - - ))} - {highlightSettings.length < MAX_HIGHLIGHT_SETTINGS && ( - -
- - - - - Can freeze the chat for a while. - - -
- ); -}; - -const TextHighlightSetting = (props, context) => { - const { id, ...rest } = props; - const highlightSettingById = useSelector(context, selectHighlightSettingById); - const dispatch = useDispatch(context); - const { - highlightColor, - highlightText, - highlightWholeMessage, - backgroundHighlightColor, - backgroundHighlightOpacity, - matchWord, - matchCase, - } = highlightSettingById[id]; - return ( - - - -
+ + ); +} diff --git a/tgui/packages/tgui/stories/Collapsible.stories.js b/tgui/packages/tgui/stories/Collapsible.stories.js index eace08607ba..55e9fb0aac6 100644 --- a/tgui/packages/tgui/stories/Collapsible.stories.js +++ b/tgui/packages/tgui/stories/Collapsible.stories.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Button, Collapsible, Section } from '../components'; +import { Button, Collapsible, Section } from 'tgui-core/components'; import { BoxWithSampleText } from './common'; export const meta = { @@ -12,7 +12,7 @@ export const meta = { render: () => , }; -const Story = (props, context) => { +const Story = (props) => { return (
}> diff --git a/tgui/packages/tgui/stories/Collapsible.stories.tsx b/tgui/packages/tgui/stories/Collapsible.stories.tsx new file mode 100644 index 00000000000..24689697a1a --- /dev/null +++ b/tgui/packages/tgui/stories/Collapsible.stories.tsx @@ -0,0 +1,24 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Button, Collapsible, Section } from 'tgui-core/components'; + +import { BoxWithSampleText } from './common'; + +export const meta = { + title: 'Collapsible', + render: () => , +}; + +function Story() { + return ( +
+ }> + + +
+ ); +} diff --git a/tgui/packages/tgui/stories/Flex.stories.js b/tgui/packages/tgui/stories/Flex.stories.js index 64dc79edfc4..73e5c755177 100644 --- a/tgui/packages/tgui/stories/Flex.stories.js +++ b/tgui/packages/tgui/stories/Flex.stories.js @@ -4,15 +4,15 @@ * @license MIT */ +import { Button, Flex, Section } from 'tgui-core/components'; import { useLocalState } from '../backend'; -import { Button, Flex, Section } from '../components'; export const meta = { title: 'Flex & Sections', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { const [grow, setGrow] = useLocalState(context, 'fs_grow', 1); const [direction, setDirection] = useLocalState( context, diff --git a/tgui/packages/tgui/stories/Flex.stories.tsx b/tgui/packages/tgui/stories/Flex.stories.tsx new file mode 100644 index 00000000000..86333b8dc92 --- /dev/null +++ b/tgui/packages/tgui/stories/Flex.stories.tsx @@ -0,0 +1,68 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { useState } from 'react'; +import { Button, Flex, Section } from 'tgui-core/components'; + +export const meta = { + title: 'Flex & Sections', + render: () => , +}; + +function Story() { + const [grow, setGrow] = useState(1); + const [direction, setDirection] = useState('column'); + const [fill, setFill] = useState(true); + const [hasTitle, setHasTitle] = useState(true); + + return ( + + +
+ + + + +
+
+ + + +
+ Content +
+
+ +
+ Content +
+
+
+
+
+ ); +} diff --git a/tgui/packages/tgui/stories/Input.stories.js b/tgui/packages/tgui/stories/Input.stories.js index 66fcd602b32..9da0b4615d1 100644 --- a/tgui/packages/tgui/stories/Input.stories.js +++ b/tgui/packages/tgui/stories/Input.stories.js @@ -4,7 +4,6 @@ * @license MIT */ -import { useLocalState } from '../backend'; import { Box, DraggableControl, @@ -15,14 +14,15 @@ import { NumberInput, Section, Slider, -} from '../components'; +} from 'tgui-core/components'; +import { useLocalState } from '../backend'; export const meta = { title: 'Input', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { const [number, setNumber] = useLocalState(context, 'number', 0); const [text, setText] = useLocalState(context, 'text', 'Sample text'); return ( @@ -46,52 +46,6 @@ const Story = (props, context) => { onChange={(e, value) => setNumber(value)} /> - - setNumber(value)} - /> - - - setNumber(value)} - /> - - - setNumber(value)} - /> - setNumber(value)} - /> - { dragMatrix={[0, -1]} step={1} stepPixelSize={5} - onDrag={(e, value) => setNumber(value)} + onChange={(e, value) => setNumber(value)} > {(control) => ( diff --git a/tgui/packages/tgui/stories/Input.stories.tsx b/tgui/packages/tgui/stories/Input.stories.tsx new file mode 100644 index 00000000000..5e5af5c2c36 --- /dev/null +++ b/tgui/packages/tgui/stories/Input.stories.tsx @@ -0,0 +1,74 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { + Box, + DraggableControl, + Icon, + Input, + Knob, + LabeledList, + NumberInput, + Section, + Slider, +} from 'tgui-core/components'; +import { useLocalState } from '../backend'; + +export const meta = { + title: 'Input', + render: () => , +}; + +const Story = (props) => { + const [string, setNumber] = useLocalState('string', 0); + const [text, setText] = useLocalState('text', 'Sample text'); + return ( +
+ + + setText(value)} /> + + + setNumber(value)} + /> + + + + setNumber(value)} + > + {(control) => ( + + + {control.inputElement} + + )} + + + + +
+ ); +}; diff --git a/tgui/packages/tgui/stories/LabeledList.stories.js b/tgui/packages/tgui/stories/LabeledList.stories.js index 2a94bb9c74b..c85f13313e9 100644 --- a/tgui/packages/tgui/stories/LabeledList.stories.js +++ b/tgui/packages/tgui/stories/LabeledList.stories.js @@ -4,14 +4,14 @@ * @license MIT */ -import { Button, LabeledList } from '../components'; +import { Button, LabeledList } from 'tgui-core/components'; export const meta = { title: 'LabeledList', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { return ( <> diff --git a/tgui/packages/tgui/stories/LabeledList.stories.tsx b/tgui/packages/tgui/stories/LabeledList.stories.tsx new file mode 100644 index 00000000000..5dbfa8feb2a --- /dev/null +++ b/tgui/packages/tgui/stories/LabeledList.stories.tsx @@ -0,0 +1,73 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Button, LabeledList } from 'tgui-core/components'; + +export const meta = { + title: 'LabeledList', + render: () => , +}; + +function Story() { + return ( + <> + + Entry 1 + Nodes as labels:}> + Entry 2 + + + Entry 3 + + + Entry 4 + + Test} label="Buttons prop"> + Entry 5 + + + + Entry 6 + + + Entry 7 + + + Entry 8 + + +
+
+
+ + + Entry 1 + + + Entry 2 + + + Entry 3 + + +
+
+
+ + + Entry 1 + + + + ); +} diff --git a/tgui/packages/tgui/stories/Popper.stories.js b/tgui/packages/tgui/stories/Popper.stories.js index 5a984ac6fea..548214ef46a 100644 --- a/tgui/packages/tgui/stories/Popper.stories.js +++ b/tgui/packages/tgui/stories/Popper.stories.js @@ -1,4 +1,4 @@ -import { Box, Popper } from '../components'; +import { Box, Popper } from 'tgui-core/components'; export const meta = { title: 'Popper', diff --git a/tgui/packages/tgui/stories/ProgressBar.stories.js b/tgui/packages/tgui/stories/ProgressBar.stories.js index a05f6b2e85c..4da721cd4bc 100644 --- a/tgui/packages/tgui/stories/ProgressBar.stories.js +++ b/tgui/packages/tgui/stories/ProgressBar.stories.js @@ -4,7 +4,6 @@ * @license MIT */ -import { useLocalState } from '../backend'; import { Box, Button, @@ -12,14 +11,15 @@ import { LabeledList, ProgressBar, Section, -} from '../components'; +} from 'tgui-core/components'; +import { useLocalState } from '../backend'; export const meta = { title: 'ProgressBar', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { const [progress, setProgress] = useLocalState(context, 'progress', 0.5); const [color, setColor] = useLocalState(context, 'color', ''); diff --git a/tgui/packages/tgui/stories/ProgressBar.stories.tsx b/tgui/packages/tgui/stories/ProgressBar.stories.tsx new file mode 100644 index 00000000000..8e6314b421b --- /dev/null +++ b/tgui/packages/tgui/stories/ProgressBar.stories.tsx @@ -0,0 +1,54 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { useState } from 'react'; +import { + Box, + Button, + Input, + LabeledList, + ProgressBar, + Section, +} from 'tgui-core/components'; + +export const meta = { + title: 'ProgressBar', + render: () => , +}; + +function Story() { + const [progress, setProgress] = useState(0.5); + const [color, setColor] = useState(''); + + const color_data = color + ? { color: color } + : { + ranges: { + good: [0.5, Infinity], + bad: [-Infinity, 0.1], + average: [0, 0.5], + } as Record, + }; + + return ( +
+ + Value: {Number(progress).toFixed(1)} + + + + + + + + + + + + +
+ ); +} diff --git a/tgui/packages/tgui/stories/Stack.stories.js b/tgui/packages/tgui/stories/Stack.stories.js index 09d8066133d..0d84e6e9bb8 100644 --- a/tgui/packages/tgui/stories/Stack.stories.js +++ b/tgui/packages/tgui/stories/Stack.stories.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Box, Section, Stack } from '../components'; +import { Box, Section, Stack } from 'tgui-core/components'; export const meta = { title: 'Stack', @@ -29,7 +29,7 @@ const SmallStackItems = () => ( ); -const Story = (props, context) => { +const Story = (props) => { return (
diff --git a/tgui/packages/tgui/stories/Stack.stories.tsx b/tgui/packages/tgui/stories/Stack.stories.tsx new file mode 100644 index 00000000000..a92416250f1 --- /dev/null +++ b/tgui/packages/tgui/stories/Stack.stories.tsx @@ -0,0 +1,59 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Box, Section, Stack } from 'tgui-core/components'; + +export const meta = { + title: 'Stack', + render: () => , +}; + +function Filler() { + return ( + + A + + ); +} + +function SmallStackItems() { + return ( + <> + + + + + + + + + ); +} + +function Story() { + return ( +
+ + + + + + + + + + + + + + + + + + +
+ ); +} diff --git a/tgui/packages/tgui/stories/Storage.stories.js b/tgui/packages/tgui/stories/Storage.stories.js index 3172a097d24..b667e88736c 100644 --- a/tgui/packages/tgui/stories/Storage.stories.js +++ b/tgui/packages/tgui/stories/Storage.stories.js @@ -5,7 +5,7 @@ */ import { storage } from 'common/storage'; -import { Button, LabeledList, NoticeBox, Section } from '../components'; +import { Button, LabeledList, NoticeBox, Section } from 'tgui-core/components'; import { formatSiUnit } from '../format'; export const meta = { @@ -13,7 +13,7 @@ export const meta = { render: () => , }; -const Story = (props, context) => { +const Story = (props) => { if (!window.localStorage) { return Local storage is not available.; } diff --git a/tgui/packages/tgui/stories/Storage.stories.tsx b/tgui/packages/tgui/stories/Storage.stories.tsx new file mode 100644 index 00000000000..c5234a1e31d --- /dev/null +++ b/tgui/packages/tgui/stories/Storage.stories.tsx @@ -0,0 +1,42 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { storage } from 'common/storage'; +import { Button, LabeledList, NoticeBox, Section } from 'tgui-core/components'; + +export const meta = { + title: 'Storage', + render: () => , +}; + +const Story = (props) => { + if (!window.localStorage) { + return Local storage is not available.; + } + + return ( +
{ + localStorage.clear(); + storage.clear(); + }} + > + Clear + + } + > + + + {localStorage.length} + + +
+ ); +}; diff --git a/tgui/packages/tgui/stories/Tabs.stories.js b/tgui/packages/tgui/stories/Tabs.stories.js index b2b51c3ea74..177354a8b3b 100644 --- a/tgui/packages/tgui/stories/Tabs.stories.js +++ b/tgui/packages/tgui/stories/Tabs.stories.js @@ -4,8 +4,8 @@ * @license MIT */ +import { Button, Section, Tabs } from 'tgui-core/components'; import { useLocalState } from '../backend'; -import { Button, Section, Tabs } from '../components'; export const meta = { title: 'Tabs', @@ -14,7 +14,7 @@ export const meta = { const TAB_RANGE = ['Tab #1', 'Tab #2', 'Tab #3', 'Tab #4']; -const Story = (props, context) => { +const Story = (props) => { const [tabProps, setTabProps] = useLocalState(context, 'tabProps', {}); return ( <> @@ -101,7 +101,7 @@ const Story = (props, context) => { ); }; -const TabsPrefab = (props, context) => { +const TabsPrefab = (props) => { const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0); const [tabProps] = useLocalState(context, 'tabProps', {}); return ( diff --git a/tgui/packages/tgui/stories/Tabs.stories.tsx b/tgui/packages/tgui/stories/Tabs.stories.tsx new file mode 100644 index 00000000000..507a6c0b643 --- /dev/null +++ b/tgui/packages/tgui/stories/Tabs.stories.tsx @@ -0,0 +1,152 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { useState } from 'react'; +import { Button, Section, Tabs } from 'tgui-core/components'; + +export const meta = { + title: 'Tabs', + render: () => , +}; + +const TAB_RANGE = ['Tab #1', 'Tab #2', 'Tab #3', 'Tab #4'] as const; + +type TabProps = Partial<{ + centered: boolean; + fluid: boolean; + icon: boolean; + leftSlot: boolean; + rightSlot: boolean; + vertical: boolean; +}>; + +function Story() { + const [tabProps, setTabProps] = useState({}); + + return ( + <> +
+ + setTabProps({ + ...tabProps, + vertical: !tabProps.vertical, + }) + } + > + Vertical + + + setTabProps({ + ...tabProps, + leftSlot: !tabProps.leftSlot, + }) + } + > + leftSlot + + + setTabProps({ + ...tabProps, + rightSlot: !tabProps.rightSlot, + }) + } + > + rightSlot + + + setTabProps({ + ...tabProps, + icon: !tabProps.icon, + }) + } + > + icon + + + setTabProps({ + ...tabProps, + fluid: !tabProps.fluid, + }) + } + > + fluid + + + setTabProps({ + ...tabProps, + centered: !tabProps.centered, + }) + } + > + centered + +
+
+ +
+
+ + Some text +
+
+ Section-less tabs appear the same as tabs in a fitted section: +
+ + + ); +} + +function TabsPrefab() { + const [tabIndex, setTabIndex] = useState(0); + const [tabProps] = useState({}); + + return ( + + {TAB_RANGE.map((text, i) => ( + + ) + } + rightSlot={ + tabProps.rightSlot && ( + + + + {positions.map((position) => ( + + ))} + +
+ ); +} diff --git a/tgui/packages/tgui/stories/common.js b/tgui/packages/tgui/stories/common.js index 08703e32d2d..e30dd817b2b 100644 --- a/tgui/packages/tgui/stories/common.js +++ b/tgui/packages/tgui/stories/common.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Box } from '../components'; +import { Box } from 'tgui-core/components'; export const BoxWithSampleText = (props) => { return ( diff --git a/tgui/packages/tgui/stories/common.tsx b/tgui/packages/tgui/stories/common.tsx new file mode 100644 index 00000000000..3810dc39272 --- /dev/null +++ b/tgui/packages/tgui/stories/common.tsx @@ -0,0 +1,19 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Box } from 'tgui-core/components'; + +export function BoxWithSampleText(props) { + return ( + + Jackdaws love my big sphinx of quartz. + + The wide electrification of the southern provinces will give a powerful + impetus to the growth of agriculture. + + + ); +} diff --git a/tgui/packages/tgui/styles/assets/bg-deforest.svg b/tgui/packages/tgui/styles/assets/bg-deforest.svg new file mode 100644 index 00000000000..018c2e984bd --- /dev/null +++ b/tgui/packages/tgui/styles/assets/bg-deforest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tgui/packages/tgui/styles/atomic/candystripe.scss b/tgui/packages/tgui/styles/atomic/candystripe.scss deleted file mode 100644 index 30159bf99c3..00000000000 --- a/tgui/packages/tgui/styles/atomic/candystripe.scss +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.candystripe:nth-child(odd) { - background-color: rgba(0, 0, 0, 0.25); -} diff --git a/tgui/packages/tgui/styles/atomic/centered-image.scss b/tgui/packages/tgui/styles/atomic/centered-image.scss deleted file mode 100644 index cce5bfdf2c1..00000000000 --- a/tgui/packages/tgui/styles/atomic/centered-image.scss +++ /dev/null @@ -1,7 +0,0 @@ -.centered-image { - position: absolute; - height: 100%; - left: 50%; - top: 50%; - transform: translateX(-50%) translateY(-50%) scale(0.8); -} diff --git a/tgui/packages/tgui/styles/atomic/color.scss b/tgui/packages/tgui/styles/atomic/color.scss deleted file mode 100644 index e2563f86fa5..00000000000 --- a/tgui/packages/tgui/styles/atomic/color.scss +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../colors.scss'; - -$fg-map: colors.$fg-map !default; -$bg-map: colors.$bg-map !default; - -@each $color-name, $color-value in $fg-map { - .color-#{$color-name} { - color: $color-value !important; - } -} - -@each $color-name, $color-value in $bg-map { - .color-bg-#{$color-name} { - background-color: $color-value !important; - } -} diff --git a/tgui/packages/tgui/styles/atomic/debug-layout.scss b/tgui/packages/tgui/styles/atomic/debug-layout.scss deleted file mode 100644 index d015185927a..00000000000 --- a/tgui/packages/tgui/styles/atomic/debug-layout.scss +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.debug-layout, -.debug-layout *:not(g):not(path) { - color: rgba(255, 255, 255, 0.9) !important; - background: transparent !important; - outline: 1px solid rgba(255, 255, 255, 0.5) !important; - box-shadow: none !important; - filter: none !important; - - &:hover { - outline-color: rgba(255, 255, 255, 0.8) !important; - } -} diff --git a/tgui/packages/tgui/styles/atomic/fit-text.scss b/tgui/packages/tgui/styles/atomic/fit-text.scss deleted file mode 100644 index 1d49e13c8e3..00000000000 --- a/tgui/packages/tgui/styles/atomic/fit-text.scss +++ /dev/null @@ -1,14 +0,0 @@ -$mqIterations: 19; -@mixin fontResize($iterations) { - $i: 1; - @while $i <= $iterations { - @media all and (min-width: 100px * $i) { - .fit-text { - font-size: 0.1em * $i; - } - } - $i: $i + 1; - } -} - -@include fontResize($mqIterations); diff --git a/tgui/packages/tgui/styles/atomic/links.scss b/tgui/packages/tgui/styles/atomic/links.scss deleted file mode 100644 index 8754c3bc2e1..00000000000 --- a/tgui/packages/tgui/styles/atomic/links.scss +++ /dev/null @@ -1,12 +0,0 @@ -@use '../colors.scss'; - -a { - &:link, - &:visited { - color: colors.$blue; - } - &:hover, - &:active { - color: colors.$primary; - } -} diff --git a/tgui/packages/tgui/styles/atomic/outline.scss b/tgui/packages/tgui/styles/atomic/outline.scss deleted file mode 100644 index a91625de9ca..00000000000 --- a/tgui/packages/tgui/styles/atomic/outline.scss +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../colors.scss'; - -.outline-dotted { - outline-style: dotted !important; -} - -.outline-dashed { - outline-style: dashed !important; -} - -.outline-solid { - outline-style: solid !important; -} - -.outline-double { - outline-style: double !important; -} - -.outline-groove { - outline-style: groove !important; -} - -.outline-ridge { - outline-style: ridge !important; -} - -.outline-inset { - outline-style: inset !important; -} - -.outline-outset { - outline-style: outset !important; -} - -$fg-map: colors.$fg-map !default; -$bg-map: colors.$bg-map !default; - -@each $color-name, $color-value in $fg-map { - .outline-color-#{$color-name} { - outline: 0.167rem solid $color-value !important; - } -} diff --git a/tgui/packages/tgui/styles/atomic/text.scss b/tgui/packages/tgui/styles/atomic/text.scss deleted file mode 100644 index 4889041e6af..00000000000 --- a/tgui/packages/tgui/styles/atomic/text.scss +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.text-right { - text-align: right; -} - -.text-baseline { - text-align: baseline; -} - -.text-justify { - text-align: justify; -} - -.text-nowrap { - white-space: nowrap; -} - -.text-pre { - white-space: pre; -} - -.text-bold { - font-weight: bold; -} - -.text-italic { - font-style: italic; -} - -.text-underline { - text-decoration: underline; -} diff --git a/tgui/packages/tgui/styles/base_original.scss b/tgui/packages/tgui/styles/base_original.scss new file mode 100644 index 00000000000..3a99d5d28d7 --- /dev/null +++ b/tgui/packages/tgui/styles/base_original.scss @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +@use 'sass:color'; +@use 'sass:math'; + +$color-fg: #ffffff !default; +$color-bg: #252525 !default; +$color-bg-section: rgba(0, 0, 0, 0.33) !default; +$color-bg-grad-spread: 2% !default; +$color-bg-start: color.adjust( + $color-bg, + $lightness: $color-bg-grad-spread +) !default; +$color-bg-end: color.adjust( + $color-bg, + $lightness: -$color-bg-grad-spread +) !default; + +$unit: 12px; +$font-size: 1 * $unit !default; +$border-radius: 0.16em !default; + +@function em($px) { + @return 1em * math.div($px, $unit); +} + +@function rem($px) { + @return 1rem * math.div($px, $unit); +} diff --git a/tgui/packages/tgui/styles/colors.scss b/tgui/packages/tgui/styles/colors.scss index 1521c1e5f6f..0434c897022 100644 --- a/tgui/packages/tgui/styles/colors.scss +++ b/tgui/packages/tgui/styles/colors.scss @@ -22,7 +22,9 @@ $purple: #a333c8 !default; $pink: #e03997 !default; $brown: #a5673f !default; $grey: #767676 !default; +$gray: $grey !default; $light-grey: #aaa !default; +$light-gray: $light-grey !default; $silver: #c0c0c0 !default; $crimson: #dc143c !default; $cyan: #00ffff !default; @@ -41,15 +43,22 @@ $bg-lightness: -15% !default; $fg-lightness: 10% !default; @function bg($color) { - @return color.scale($color, $lightness: $bg-lightness); + @if meta.type-of($color) == 'color' { + @return color.scale($color, $lightness: $bg-lightness); + } + + @return hsl(from $color h s calc(l - var(--adjust-color))); } @function fg($color) { - @return color.scale($color, $lightness: $fg-lightness); + @if meta.type-of($color) == 'color' { + @return color.scale($color, $lightness: $fg-lightness); + } + + @return hsl(from $color h s calc(l + var(--adjust-color))); } // Mappings of color names - $_gen_map: ( 'black': $black, 'white': $white, @@ -65,7 +74,9 @@ $_gen_map: ( 'pink': $pink, 'brown': $brown, 'grey': $grey, + 'gray': $gray, 'light-grey': $light-grey, + 'light-gray': $light-gray, 'silver': $silver, 'crimson': $crimson, 'cyan': $cyan, @@ -78,23 +89,38 @@ $_gen_map: ( 'label': $label, ); -// Foreground color names for which to generate a color map +// Modern tgui-core atomic styles expect a generic color map. +$color-map-keys: map.keys($_gen_map) !default; +$color-map: (); +@each $color-name in $color-map-keys { + $color-map: map.merge( + $color-map, + ( + $color-name: map.get($_gen_map, $color-name), + ) + ); +} + +// Legacy Aurora theme styles configure these maps directly. $fg-map-keys: map.keys($_gen_map) !default; -// Background color names for which to generate a color map $bg-map-keys: map.keys($_gen_map) !default; $fg-map: (); @each $color-name in $fg-map-keys { - // prettier-ignore - $fg-map: map-merge($fg-map, ( - $color-name: fg(map.get($_gen_map, $color-name)), - )); + $fg-map: map.merge( + $fg-map, + ( + $color-name: fg(map.get($_gen_map, $color-name)), + ) + ); } $bg-map: (); @each $color-name in $bg-map-keys { - // prettier-ignore - $bg-map: map-merge($bg-map, ( - $color-name: bg(map.get($_gen_map, $color-name)), - )); + $bg-map: map.merge( + $bg-map, + ( + $color-name: bg(map.get($_gen_map, $color-name)), + ) + ); } diff --git a/tgui/packages/tgui/styles/colors_original.scss b/tgui/packages/tgui/styles/colors_original.scss new file mode 100644 index 00000000000..1521c1e5f6f --- /dev/null +++ b/tgui/packages/tgui/styles/colors_original.scss @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +@use 'sass:color'; +@use 'sass:map'; +@use 'sass:meta'; + +// Base colors +$black: #000000 !default; +$white: #ffffff !default; +$red: #db2828 !default; +$orange: #f2711c !default; +$yellow: #fbd608 !default; +$olive: #b5cc18 !default; +$green: #20b142 !default; +$teal: #00b5ad !default; +$blue: #2185d0 !default; +$violet: #6435c9 !default; +$purple: #a333c8 !default; +$pink: #e03997 !default; +$brown: #a5673f !default; +$grey: #767676 !default; +$light-grey: #aaa !default; +$silver: #c0c0c0 !default; +$crimson: #dc143c !default; +$cyan: #00ffff !default; +$gold: #ffd700 !default; +$magenta: #ff00ff !default; +$lime: #32cd32 !default; + +$primary: #4972a1 !default; +$good: #5baa27 !default; +$average: #f08f11 !default; +$bad: #db2828 !default; +$label: #7e90a7 !default; + +// Background and foreground color lightness ratios +$bg-lightness: -15% !default; +$fg-lightness: 10% !default; + +@function bg($color) { + @return color.scale($color, $lightness: $bg-lightness); +} + +@function fg($color) { + @return color.scale($color, $lightness: $fg-lightness); +} + +// Mappings of color names + +$_gen_map: ( + 'black': $black, + 'white': $white, + 'red': $red, + 'orange': $orange, + 'yellow': $yellow, + 'olive': $olive, + 'green': $green, + 'teal': $teal, + 'blue': $blue, + 'violet': $violet, + 'purple': $purple, + 'pink': $pink, + 'brown': $brown, + 'grey': $grey, + 'light-grey': $light-grey, + 'silver': $silver, + 'crimson': $crimson, + 'cyan': $cyan, + 'gold': $gold, + 'magenta': $magenta, + 'lime': $lime, + 'good': $good, + 'average': $average, + 'bad': $bad, + 'label': $label, +); + +// Foreground color names for which to generate a color map +$fg-map-keys: map.keys($_gen_map) !default; +// Background color names for which to generate a color map +$bg-map-keys: map.keys($_gen_map) !default; + +$fg-map: (); +@each $color-name in $fg-map-keys { + // prettier-ignore + $fg-map: map-merge($fg-map, ( + $color-name: fg(map.get($_gen_map, $color-name)), + )); +} + +$bg-map: (); +@each $color-name in $bg-map-keys { + // prettier-ignore + $bg-map: map-merge($bg-map, ( + $color-name: bg(map.get($_gen_map, $color-name)), + )); +} diff --git a/tgui/packages/tgui/styles/components/BlockQuote.scss b/tgui/packages/tgui/styles/components/BlockQuote.scss deleted file mode 100644 index 4e54030e5b6..00000000000 --- a/tgui/packages/tgui/styles/components/BlockQuote.scss +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; - -$color-default: colors.fg(colors.$label) !default; - -.BlockQuote { - color: $color-default; - border-left: base.em(2px) solid $color-default; - padding-left: 0.5em; - margin-bottom: 0.5em; - - &:last-child { - margin-bottom: 0; - } -} diff --git a/tgui/packages/tgui/styles/components/Button.scss b/tgui/packages/tgui/styles/components/Button.scss deleted file mode 100644 index f559cc26359..00000000000 --- a/tgui/packages/tgui/styles/components/Button.scss +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$color-default: colors.bg(colors.$primary) !default; -$color-disabled: #999999 !default; -$color-selected: colors.bg(colors.$green) !default; -$color-caution: colors.bg(colors.$yellow) !default; -$color-danger: colors.bg(colors.$red) !default; -$color-transparent-text: rgba(255, 255, 255, 0.5) !default; -$border-radius: base.$border-radius !default; -$bg-map: colors.$bg-map !default; - -@mixin button-color($color) { - // Adapt text color to background luminance to ensure high contast - $luminance: luminance($color); - $text-color: if($luminance > 0.4, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1)); - - transition: - color 50ms, - background-color 50ms; - background-color: $color; - color: $text-color; - - &:hover { - transition: - color 0ms, - background-color 0ms; - } - - &:focus { - transition: - color 100ms, - background-color 100ms; - } - - &:hover, - &:focus { - background-color: lighten($color, 30%); - color: $text-color; - } -} - -.Button { - position: relative; - display: inline-block; - line-height: 1.667em; - padding: 0 0.5em; - margin-right: base.em(2px); - white-space: nowrap; - outline: 0; - border-radius: $border-radius; - margin-bottom: base.em(2px); - // Disable selection in buttons - user-select: none; - -ms-user-select: none; - - &:last-child { - margin-right: 0; - margin-bottom: 0; - } - - .fa, - .fas, - .far { - margin-left: -0.25em; - margin-right: -0.25em; - min-width: 1.333em; - text-align: center; - } -} - -.Button--hasContent { - // Add a margin to the icon to keep it separate from the text - .fa, - .fas, - .far { - margin-right: 0.25em; - } -} - -.Button--hasContent.Button--iconPosition--right { - .fa, - .fas, - .far { - margin-right: 0px; - margin-left: 3px; - } -} - -.Button--ellipsis { - overflow: hidden; - text-overflow: ellipsis; -} - -.Button--fluid { - display: block; - margin-left: 0; - margin-right: 0; -} - -.Button--circular { - border-radius: 50%; -} - -.Button--compact { - padding: 0 0.25em; - line-height: 1.333em; -} - -@each $color-name, $color-value in $bg-map { - .Button--color--#{$color-name} { - @include button-color($color-value); - } -} - -.Button--color--default { - @include button-color($color-default); -} - -.Button--color--caution { - @include button-color($color-caution); -} - -.Button--color--danger { - @include button-color($color-danger); -} - -.Button--color--transparent { - @include button-color(base.$color-bg); - background-color: rgba(base.$color-bg, 0); - color: $color-transparent-text; -} - -.Button--disabled { - background-color: $color-disabled !important; -} - -.Button--selected { - @include button-color($color-selected); -} - -.Button--flex { - display: inline-flex; //Inline even for fluid - flex-direction: column; -} - -.Button--flex--fluid { - width: 100%; -} - -.Button--verticalAlignContent--top { - justify-content: flex-start; -} - -.Button--verticalAlignContent--middle { - justify-content: center; -} - -.Button--verticalAlignContent--bottom { - justify-content: flex-end; -} - -.Button__content { - display: block; - align-self: stretch; -} diff --git a/tgui/packages/tgui/styles/components/ColorBox.scss b/tgui/packages/tgui/styles/components/ColorBox.scss deleted file mode 100644 index 739cacee0e4..00000000000 --- a/tgui/packages/tgui/styles/components/ColorBox.scss +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.ColorBox { - display: inline-block; - width: 1em; - height: 1em; - line-height: 1em; - text-align: center; -} diff --git a/tgui/packages/tgui/styles/components/Dialog.scss b/tgui/packages/tgui/styles/components/Dialog.scss deleted file mode 100644 index c7b7fd13261..00000000000 --- a/tgui/packages/tgui/styles/components/Dialog.scss +++ /dev/null @@ -1,105 +0,0 @@ -@use '../base'; - -$background-color: base.$color-bg !default; - -.Dialog { - position: fixed; - left: 0; - top: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.5); - display: flex; - align-items: center; - justify-content: center; -} - -.Dialog__content { - background-color: $background-color; - font-family: Consolas, monospace; - font-size: base.em(14px); - display: flex; - flex-direction: column; -} - -.Dialog__header { - display: flex; - height: 2em; - line-height: 1.928em; - background-color: rgba(0, 0, 0, 0.5); - user-select: none; - -ms-user-select: none; -} - -.Dialog__title { - display: inline; - font-style: italic; - margin-left: 1rem; - margin-right: 2rem; - flex-grow: 1; - opacity: 0.33; -} - -.Dialog__body { - margin: 2rem 1rem 2rem 1rem; - flex-grow: 1; -} - -.Dialog__footer { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding: 1rem; - background-color: rgba(0, 0, 0, 0.25); -} - -.Dialog__button { - margin: 0 1rem 0 1rem; - height: 2rem; - min-width: 6rem; - text-align: center; -} - -.SaveAsDialog__inputs { - display: flex; - flex-direction: row; - align-items: center; - padding-left: 3rem; - justify-content: flex-end; - margin-right: 1rem; -} - -.SaveAsDialog__input { - margin-left: 1rem; - width: 80%; -} - -.SaveAsDialog__label { - vertical-align: center; -} - -.Dialog__FileList { - position: relative; - display: flex; - flex-wrap: wrap; - flex-grow: 1; - align-content: flex-start; - max-height: 20rem; - overflow: auto; - overflow-y: scroll; -} - -.Dialog__FileEntry { - text-align: center; - margin: 1rem; -} - -.Dialog__FileIcon { - display: inline-block; - margin: 0 0 1rem 0; - position: relative; - width: 6vh; - height: auto; - text-align: center; - cursor: default; -} diff --git a/tgui/packages/tgui/styles/components/Dimmer.scss b/tgui/packages/tgui/styles/components/Dimmer.scss deleted file mode 100644 index 32a43ce509e..00000000000 --- a/tgui/packages/tgui/styles/components/Dimmer.scss +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ -$background-dimness: 0.75 !default; - -.Dimmer { - // Align everything in the middle. - // A fat middle finger for anything less than IE11. - display: flex; - justify-content: center; - align-items: center; - // Fill positioned parent - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - // Dim everything around it - background-color: rgba(0, 0, 0, $background-dimness); - z-index: 1; -} diff --git a/tgui/packages/tgui/styles/components/Divider.scss b/tgui/packages/tgui/styles/components/Divider.scss deleted file mode 100644 index e4df190e62c..00000000000 --- a/tgui/packages/tgui/styles/components/Divider.scss +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$color: rgba(255, 255, 255, 0.1) !default; -$thickness: base.em(2px) !default; -$spacing: 0.5em; - -.Divider--horizontal { - margin: $spacing 0; - - &:not(.Divider--hidden) { - border-top: $thickness solid $color; - } -} - -.Divider--vertical { - height: 100%; - margin: 0 $spacing; - - &:not(.Divider--hidden) { - border-left: $thickness solid $color; - } -} diff --git a/tgui/packages/tgui/styles/components/Dropdown.scss b/tgui/packages/tgui/styles/components/Dropdown.scss deleted file mode 100644 index 6909f8d9312..00000000000 --- a/tgui/packages/tgui/styles/components/Dropdown.scss +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -.Dropdown { - position: relative; -} - -.Dropdown__control { - position: relative; - display: inline-block; - font-family: Verdana, sans-serif; - font-size: base.em(12px); - width: base.em(100px); - line-height: base.em(17px); - user-select: none; -} - -.Dropdown__arrow-button { - float: right; - padding-left: 0.35em; - width: 1.2em; - height: base.em(22px); - border-left: base.em(1px) solid #000; - border-left: base.em(1px) solid rgba(0, 0, 0, 0.25); -} - -.Dropdown__menu { - position: absolute; - overflow-y: auto; - z-index: 5; - width: base.em(100px); - max-height: base.em(200px); - overflow-y: scroll; - border-radius: 0 0 base.em(2px) base.em(2px); - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.75); -} - -.Dropdown__menu-noscroll { - position: absolute; - overflow-y: auto; - z-index: 5; - width: base.em(100px); - max-height: base.em(200px); - border-radius: 0 0 base.em(2px) base.em(2px); - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.75); -} - -.Dropdown__menuentry { - padding: base.em(2px) base.em(4px); - font-family: Verdana, sans-serif; - font-size: base.em(12px); - line-height: base.em(17px); - transition: background-color 100ms ease-out; - - &:hover { - background-color: rgba(255, 255, 255, 0.2); - transition: background-color 0ms; - } -} - -.Dropdown__over { - top: auto; - bottom: 100%; -} - -.Dropdown__selected-text { - display: inline-block; - text-overflow: ellipsis; - white-space: nowrap; - height: base.em(17px); - width: calc(100% - 1.2em); -} diff --git a/tgui/packages/tgui/styles/components/Flex.scss b/tgui/packages/tgui/styles/components/Flex.scss deleted file mode 100644 index d4b6b8ec388..00000000000 --- a/tgui/packages/tgui/styles/components/Flex.scss +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.Flex { - display: -ms-flexbox; - display: flex; -} - -.Flex--inline { - display: inline-flex; -} - -.Flex--iefix { - display: block; -} - -.Flex--iefix.Flex--inline { - display: inline-block; -} - -.Flex__item--iefix { - display: inline-block; -} - -.Flex--iefix--column { - & > .Flex__item--iefix { - display: block; - } -} diff --git a/tgui/packages/tgui/styles/components/Icon.scss b/tgui/packages/tgui/styles/components/Icon.scss deleted file mode 100644 index 320117a65f3..00000000000 --- a/tgui/packages/tgui/styles/components/Icon.scss +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @file - * @copyright 2020 - * @author ThePotato97 (https://github.com/ThePotato97) - * @license ISC - */ - -.IconStack > .Icon { - position: absolute; - width: 100%; - text-align: center; -} - -.IconStack { - position: relative; - display: inline-block; - height: 1.2em; - line-height: 2em; - vertical-align: middle; - - &:after { - color: transparent; - content: '.'; - } -} diff --git a/tgui/packages/tgui/styles/components/Input.scss b/tgui/packages/tgui/styles/components/Input.scss deleted file mode 100644 index 0e8e509df0b..00000000000 --- a/tgui/packages/tgui/styles/components/Input.scss +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../functions.scss' as *; - -$text-color: base.$color-fg !default; -$background-color: #0a0a0a !default; -$border-color: #88bfff !default; -$border-radius: base.$border-radius !default; -$font-family: Verdana, sans-serif !default; - -.Input { - position: relative; - display: inline-block; - width: base.em(120px); - border: base.em(1px) solid $border-color; - border: base.em(1px) solid rgba($border-color, 0.75); - border-radius: $border-radius; - color: $text-color; - background-color: $background-color; - padding: 0 base.em(4px); - margin-right: base.em(2px); - line-height: base.em(17px); - overflow: visible; -} - -.Input--fluid { - display: block; - width: auto; -} - -.Input__baseline { - display: inline-block; - color: transparent; -} - -.Input__input { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - border: 0; - outline: 0; - width: 100%; - font-size: base.em(12px); - line-height: base.em(17px); - height: base.em(17px); - margin: 0; - padding: 0 0.5em; - font-family: $font-family; - background-color: transparent; - color: $text-color; - color: inherit; - - &::placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } - - &:-ms-input-placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } -} - -.Input--monospace .Input__input { - font-family: 'Consolas', monospace; -} diff --git a/tgui/packages/tgui/styles/components/Knob.scss b/tgui/packages/tgui/styles/components/Knob.scss deleted file mode 100644 index 1a5f0d10a99..00000000000 --- a/tgui/packages/tgui/styles/components/Knob.scss +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$bg-map: colors.$bg-map !default; -$fg-map: colors.$fg-map !default; -$ring-color: #6a96c9 !default; -$knob-color: #333333 !default; -$popup-background-color: #000000 !default; -$popup-text-color: #ffffff !default; - -$inner-padding: 0.1em; - -.Knob { - position: relative; - font-size: 1rem; - width: 2.6em; - height: 2.6em; - margin: 0 auto; - margin-bottom: -0.2em; - cursor: n-resize; - - // Adjusts a baseline in a way, that makes knob middle-aligned - // when it flows with the text. - &:after { - content: '.'; - color: transparent; - line-height: 2.5em; - } -} - -.Knob__circle { - position: absolute; - top: $inner-padding; - bottom: $inner-padding; - left: $inner-padding; - right: $inner-padding; - margin: 0.3em; - background-color: $knob-color; - background-image: linear-gradient( - to bottom, - rgba(255, 255, 255, 0.15) 0%, - rgba(255, 255, 255, 0) 100% - ); - border-radius: 50%; - box-shadow: 0 0.05em 0.5em 0 rgba(0, 0, 0, 0.5); -} - -.Knob__cursorBox { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; -} - -.Knob__cursor { - position: relative; - top: 0.05em; - margin: 0 auto; - width: 0.2em; - height: 0.8em; - background-color: rgba(255, 255, 255, 0.9); -} - -.Knob__popupValue { - position: absolute; - top: -2rem; - right: 50%; - font-size: 1rem; - text-align: center; - padding: 0.25rem 0.5rem; - color: $popup-text-color; - background-color: $popup-background-color; - transform: translateX(50%); - white-space: nowrap; -} - -.Knob__ring { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - padding: $inner-padding; -} - -$pi: 3.1416; - -.Knob__ringTrackPivot { - transform: rotateZ(135deg); -} - -.Knob__ringTrack { - // transform-origin: 50% 50%; - fill: transparent; - stroke: rgba(255, 255, 255, 0.1); - stroke-width: 8; - stroke-linecap: round; - stroke-dasharray: 75 * $pi; -} - -.Knob__ringFillPivot { - transform: rotateZ(135deg); -} - -.Knob--bipolar .Knob__ringFillPivot { - transform: rotateZ(270deg); -} - -.Knob__ringFill { - fill: transparent; - stroke: $ring-color; - stroke-width: 8; - stroke-linecap: round; - stroke-dasharray: 100 * $pi; - transition: stroke 50ms ease-out; -} - -@each $color-name, $color-value in $fg-map { - .Knob--color--#{$color-name} { - .Knob__ringFill { - stroke: $color-value; - } - } -} diff --git a/tgui/packages/tgui/styles/components/LabeledList.scss b/tgui/packages/tgui/styles/components/LabeledList.scss deleted file mode 100644 index 94adf932549..00000000000 --- a/tgui/packages/tgui/styles/components/LabeledList.scss +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -.LabeledList { - display: table; - // IE8: Does not support calc - width: 100%; - // Compensate for negative margin - width: calc(100% + 1em); - border-collapse: collapse; - border-spacing: 0; - margin: -0.25em -0.5em; - margin-bottom: 0; - padding: 0; -} - -.LabeledList__row { - display: table-row; -} - -.LabeledList__row:last-child .LabeledList__cell { - padding-bottom: 0; -} - -.LabeledList__cell { - display: table-cell; - margin: 0; - padding: 0.25em 0.5em; - border: 0; - text-align: left; -} - -.LabeledList__label--nowrap { - width: 1%; - white-space: nowrap; - min-width: 5em; -} - -.LabeledList__buttons { - width: 0.1%; - white-space: nowrap; - text-align: right; - padding-top: base.em(1px); - padding-bottom: 0; -} diff --git a/tgui/packages/tgui/styles/components/MenuBar.scss b/tgui/packages/tgui/styles/components/MenuBar.scss deleted file mode 100644 index 0f5eb47380c..00000000000 --- a/tgui/packages/tgui/styles/components/MenuBar.scss +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$separator-color: base.$color-bg-section; -$background-color: base.$color-bg !default; -$dropdown-z-index: 5; - -.MenuBar { - display: flex; -} - -.MenuBar__font { - font-family: Verdana, sans-serif; - font-size: base.em(12px); - line-height: base.em(17px); -} - -.MenuBar__hover { - &:hover { - background-color: lighten($background-color, 30%); - transition: background-color 0ms; - } -} - -.MenuBar__MenuBarButton { - padding: 0.2rem 0.5rem 0.2rem 0.5rem; -} - -.MenuBar__menu { - position: absolute; - z-index: $dropdown-z-index; - background-color: $background-color; - padding: 0.3rem 0.3rem 0.3rem 0.3rem; - box-shadow: 4px 6px 5px -2px rgba(0, 0, 0, 0.55); -} - -.MenuBar__MenuItem { - z-index: $dropdown-z-index; - transition: background-color 100ms ease-out; - background-color: $background-color; - white-space: nowrap; - padding: 0.3rem 2rem 0.3rem 3rem; -} - -.MenuBar__MenuItemToggle { - padding: 0.3rem 2rem 0.3rem 0; -} - -.MenuBar__MenuItemToggle__check { - display: inline-block; - vertical-align: middle; - min-width: 3rem; - margin-left: 0.3rem; -} - -.MenuBar__over { - top: auto; - bottom: 100%; -} - -.MenuBar__MenuBarButton-text { - text-overflow: clip; - white-space: nowrap; - height: base.em(17px); -} - -.MenuBar__Separator { - display: block; - margin: 0.3rem 0.3rem 0.3rem 2.3rem; - border-top: 1px solid $separator-color; -} diff --git a/tgui/packages/tgui/styles/components/Modal.scss b/tgui/packages/tgui/styles/components/Modal.scss deleted file mode 100644 index 005ffe31656..00000000000 --- a/tgui/packages/tgui/styles/components/Modal.scss +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$background-color: base.$color-bg !default; - -.Modal { - background-color: $background-color; - max-width: calc(100% - 1rem); - padding: 1rem; -} diff --git a/tgui/packages/tgui/styles/components/NoticeBox.scss b/tgui/packages/tgui/styles/components/NoticeBox.scss deleted file mode 100644 index 0394ffaa660..00000000000 --- a/tgui/packages/tgui/styles/components/NoticeBox.scss +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -// NoticeBox -$background-color: #bb9b68 !default; -$color-stripes: rgba(0, 0, 0, 0.1) !default; -$color-border: #272727 !default; -$bg-map: colors.$bg-map !default; - -.NoticeBox { - // Adapt text color to background luminance to ensure high contast - $luminance: luminance($background-color); - $text-color: if($luminance > 0.35, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1)); - - padding: 0.33em 0.5em; - margin-bottom: 0.5em; - box-shadow: none; - font-weight: bold; - font-style: italic; - color: $text-color; - background-color: $background-color; - background-image: repeating-linear-gradient( - -45deg, - transparent, - transparent base.em(10px), - $color-stripes base.em(10px), - $color-stripes base.em(20px) - ); -} - -@mixin box-color($color) { - $luminance: luminance($color); - $text-color: if($luminance > 0.35, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1)); - color: $text-color; - background-color: color.adjust($color, $saturation: -15%, $lightness: -15%); -} - -@each $color-name, $color-value in $bg-map { - .NoticeBox--color--#{$color-name} { - @include box-color($color-value); - } -} - -.NoticeBox--type--info { - @include box-color(colors.$blue); -} - -.NoticeBox--type--success { - @include box-color(colors.$green); -} - -.NoticeBox--type--warning { - @include box-color(colors.$orange); -} - -.NoticeBox--type--danger { - @include box-color(colors.$red); -} diff --git a/tgui/packages/tgui/styles/components/NumberInput.scss b/tgui/packages/tgui/styles/components/NumberInput.scss deleted file mode 100644 index ef2aba4d474..00000000000 --- a/tgui/packages/tgui/styles/components/NumberInput.scss +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use '../base.scss'; -@use '../functions.scss' as *; -@use './Input.scss'; - -$text-color: Input.$text-color !default; -$background-color: Input.$background-color !default; -$border-color: Input.$border-color !default; -$border-radius: Input.$border-radius !default; - -.NumberInput { - position: relative; - display: inline-block; - border: base.em(1px) solid $border-color; - border: base.em(1px) solid rgba($border-color, 0.75); - border-radius: $border-radius; - color: $border-color; - background-color: $background-color; - padding: 0 base.em(4px); - margin-right: base.em(2px); - line-height: base.em(17px); - text-align: right; - overflow: visible; - cursor: n-resize; -} - -.NumberInput--fluid { - display: block; -} - -.NumberInput__content { - margin-left: 0.5em; -} - -.NumberInput__barContainer { - position: absolute; - top: base.em(2px); - bottom: base.em(2px); - left: base.em(2px); -} - -.NumberInput__bar { - position: absolute; - bottom: 0; - left: 0; - width: base.em(3px); - box-sizing: border-box; - border-bottom: base.em(1px) solid $border-color; - background-color: $border-color; -} - -.NumberInput__input { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - border: 0; - outline: 0; - width: 100%; - font-size: base.em(12px); - line-height: base.em(17px); - height: base.em(17px); - margin: 0; - padding: 0 0.5em; - font-family: Verdana, sans-serif; - background-color: $background-color; - color: $text-color; - text-align: right; -} diff --git a/tgui/packages/tgui/styles/components/ProgressBar.scss b/tgui/packages/tgui/styles/components/ProgressBar.scss deleted file mode 100644 index e13d25e8375..00000000000 --- a/tgui/packages/tgui/styles/components/ProgressBar.scss +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$color-default-fill: colors.bg(colors.$primary) !default; -$background-color: rgba(0, 0, 0, 0) !default; -$border-radius: base.$border-radius !default; -$bg-map: colors.$bg-map !default; - -.ProgressBar { - display: inline-block; - position: relative; - width: 100%; - padding: 0 0.5em; - border-width: base.em(1px) !important; - border-style: solid !important; - border-radius: $border-radius; - background-color: $background-color; - transition: border-color 900ms ease-out; -} - -.ProgressBar__fill { - position: absolute; - top: -0.5px; - left: 0px; - bottom: -0.5px; -} - -.ProgressBar__fill--animated { - transition: - background-color 900ms ease-out, - width 900ms ease-out; -} - -.ProgressBar__content { - position: relative; - line-height: base.em(17px); - width: 100%; - text-align: right; -} - -.ProgressBar--color--default { - border: base.em(1px) solid $color-default-fill; - - .ProgressBar__fill { - background-color: $color-default-fill; - } -} - -@each $color-name, $color-value in $bg-map { - .ProgressBar--color--#{$color-name} { - border-color: $color-value !important; - - .ProgressBar__fill { - background-color: $color-value; - } - } -} diff --git a/tgui/packages/tgui/styles/components/RoundGauge.scss b/tgui/packages/tgui/styles/components/RoundGauge.scss deleted file mode 100644 index be95519d646..00000000000 --- a/tgui/packages/tgui/styles/components/RoundGauge.scss +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) 2020 bobbahbrown (https://github.com/bobbahbrown) - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$fg-map: colors.$fg-map !default; -$ring-color: #6a96c9 !default; - -.RoundGauge { - font-size: 1rem; - width: 2.6em; - height: 1.3em; - margin: 0 auto; - margin-bottom: 0.2em; -} - -$pi: 3.1416; - -.RoundGauge__ringTrack { - fill: transparent; - stroke: rgba(255, 255, 255, 0.1); - stroke-width: 10; - stroke-dasharray: 50 * $pi; - stroke-dashoffset: 50 * $pi; -} - -.RoundGauge__ringFill { - fill: transparent; - stroke: $ring-color; - stroke-width: 10; - stroke-dasharray: 100 * $pi; - transition: stroke 50ms ease-out; -} - -.RoundGauge__needle, -.RoundGauge__ringFill { - transition: transform 50ms ease-in-out; -} - -.RoundGauge__needleLine, -.RoundGauge__needleMiddle { - fill: colors.$bad; -} - -.RoundGauge__alert { - fill-rule: evenodd; - clip-rule: evenodd; - stroke-linejoin: round; - stroke-miterlimit: 2; - fill: rgba(255, 255, 255, 0.1); -} - -.RoundGauge__alert.max { - fill: colors.$bad; -} - -@each $color-name, $color-value in $fg-map { - .RoundGauge--color--#{$color-name}.RoundGauge__ringFill { - stroke: $color-value; - } -} - -@each $color-name, $color-value in $fg-map { - .RoundGauge__alert--#{$color-name} { - fill: $color-value; - transition: opacity 0.6s cubic-bezier(0.25, 1, 0.5, 1); - animation: RoundGauge__alertAnim - 1s - cubic-bezier(0.34, 1.56, 0.64, 1) - infinite; - } -} - -@keyframes RoundGauge__alertAnim { - 0% { - opacity: 0.1; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0.1; - } -} diff --git a/tgui/packages/tgui/styles/components/Section.scss b/tgui/packages/tgui/styles/components/Section.scss deleted file mode 100644 index d1f81b1f766..00000000000 --- a/tgui/packages/tgui/styles/components/Section.scss +++ /dev/null @@ -1,143 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss'; - -$title-text-color: base.$color-fg !default; -$background-color: base.$color-bg-section !default; -$separator-color: colors.$primary !default; - -.Section { - position: relative; - margin-bottom: 0.5em; - background-color: functions.fake-alpha($background-color, base.$color-bg); - background-color: $background-color; - box-sizing: border-box; - - &:last-child { - margin-bottom: 0; - } -} - -.Section__title { - position: relative; - padding: 0.5em; - border-bottom: base.em(2px) solid $separator-color; -} - -.Section__titleText { - font-size: base.em(14px); - font-weight: bold; - color: $title-text-color; -} - -.Section__buttons { - position: absolute; - display: inline-block; - right: 0.5em; - margin-top: base.em(-1px); -} - -.Section__rest { - position: relative; -} - -.Section__content { - padding: 0.66em 0.5em; -} - -.Section--fitted > .Section__rest > .Section__content { - padding: 0; -} - -.Section--fill { - display: flex; - flex-direction: column; - height: 100%; -} - -.Section--fill > .Section__rest { - flex-grow: 1; -} - -.Section--fill > .Section__rest > .Section__content { - height: 100%; -} - -.Section--fill.Section--scrollable > .Section__rest > .Section__content { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.Section--fill.Section--iefix { - display: table !important; - width: 100% !important; - height: 100% !important; - border-collapse: collapse; - border-spacing: 0; - - & > .Section__rest { - display: table-row !important; - height: 100% !important; - } -} - -.Section--scrollable { - overflow-x: hidden; - overflow-y: hidden; - - & > .Section__rest > .Section__content { - overflow-y: scroll; - overflow-x: hidden; - } -} - -.Section--scrollableHorizontal { - overflow-x: hidden; - overflow-y: hidden; - - & > .Section__rest > .Section__content { - overflow-y: hidden; - overflow-x: scroll; - } -} - -.Section--scrollable.Section--scrollableHorizontal { - overflow-x: hidden; - overflow-y: hidden; - - & > .Section__rest > .Section__content { - overflow-y: scroll; - overflow-x: scroll; - } -} - -// Nested sections -.Section .Section { - background-color: transparent; - margin-left: -0.5em; - margin-right: -0.5em; - - // Remove extra space above the first nested section - &:first-child { - margin-top: -0.5em; - } -} - -// Level 2 section title -.Section .Section .Section__titleText { - font-size: base.em(13px); -} - -// Level 3 section title -.Section .Section .Section .Section__titleText { - font-size: base.em(12px); -} diff --git a/tgui/packages/tgui/styles/components/Slider.scss b/tgui/packages/tgui/styles/components/Slider.scss deleted file mode 100644 index 83baf71dc09..00000000000 --- a/tgui/packages/tgui/styles/components/Slider.scss +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$cursor-color: base.$color-fg !default; -$popup-background-color: #000000 !default; -$popup-text-color: #ffffff !default; - -.Slider { - cursor: e-resize; -} - -.Slider__cursorOffset { - position: absolute; - top: 0; - left: 0; - bottom: 0; - transition: none !important; -} - -.Slider__cursor { - position: absolute; - top: 0; - right: base.em(-1px); - bottom: 0; - width: 0; - border-left: base.em(2px) solid $cursor-color; -} - -.Slider__pointer { - position: absolute; - right: base.em(-5px); - bottom: base.em(-4px); - width: 0; - height: 0; - border-left: base.em(5px) solid transparent; - border-right: base.em(5px) solid transparent; - border-bottom: base.em(5px) solid $cursor-color; -} - -.Slider__popupValue { - position: absolute; - right: 0; - top: -2rem; - font-size: 1rem; - padding: 0.25rem 0.5rem; - color: $popup-text-color; - background-color: $popup-background-color; - transform: translateX(50%); - white-space: nowrap; -} diff --git a/tgui/packages/tgui/styles/components/Stack.scss b/tgui/packages/tgui/styles/components/Stack.scss deleted file mode 100644 index ab2c6f24931..00000000000 --- a/tgui/packages/tgui/styles/components/Stack.scss +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) 2021 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use './Divider.scss'; - -.Stack--fill { - height: 100%; -} - -.Stack--horizontal > .Stack__item { - margin-left: 0.5em; - - &:first-child { - margin-left: 0; - } -} - -.Stack--vertical > .Stack__item { - margin-top: 0.5em; - - &:first-child { - margin-top: 0; - } -} - -.Stack--horizontal > .Stack__divider:not(.Stack__divider--hidden) { - border-left: Divider.$thickness solid Divider.$color; -} - -.Stack--vertical > .Stack__divider:not(.Stack__divider--hidden) { - border-top: Divider.$thickness solid Divider.$color; -} diff --git a/tgui/packages/tgui/styles/components/Table.scss b/tgui/packages/tgui/styles/components/Table.scss deleted file mode 100644 index ecc47e5ba9a..00000000000 --- a/tgui/packages/tgui/styles/components/Table.scss +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.Table { - display: table; - width: 100%; - border-collapse: collapse; - border-spacing: 0; - margin: 0; -} - -.Table--collapsing { - width: auto; -} - -.Table__row { - display: table-row; -} - -.Table__cell { - display: table-cell; - padding: 0 0.25em; - - &:first-child { - padding-left: 0; - } - - &:last-child { - padding-right: 0; - } -} - -.Table__row--header .Table__cell, -.Table__cell--header { - font-weight: bold; - padding-bottom: 0.5em; -} - -.Table__cell--collapsing { - width: 1%; - white-space: nowrap; -} diff --git a/tgui/packages/tgui/styles/components/Tabs.scss b/tgui/packages/tgui/styles/components/Tabs.scss deleted file mode 100644 index 2ab09125027..00000000000 --- a/tgui/packages/tgui/styles/components/Tabs.scss +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use 'sass:math'; -@use '../base.scss'; -@use '../colors.scss'; - -$color-default: color.scale( - colors.fg(colors.$primary), - $lightness: 75% -) !default; -$text-color: rgba(255, 255, 255, 0.5) !default; -$text-color-selected: color.scale($color-default, $lightness: 25%) !default; -$tab-color: transparent !default; -$tab-color-hovered: rgba(255, 255, 255, 0.075) !default; -$tab-color-selected: rgba(255, 255, 255, 0.125) !default; -$border-radius: base.$border-radius !default; -$fg-map: colors.$fg-map !default; - -.Tabs { - display: flex; - align-items: stretch; - overflow: hidden; - background-color: base.$color-bg-section; -} - -.Tabs--fill { - height: 100%; -} - -// Interoperability with sections -.Section .Tabs { - background-color: transparent; -} - -.Section:not(.Section--fitted) .Tabs { - margin: 0 -0.5em 0.5em; - - &:first-child { - margin-top: -0.5em; - } -} - -.Tabs--vertical { - flex-direction: column; - padding: 0.25em 0 0.25em 0.25em; -} - -.Tabs--horizontal { - margin-bottom: 0.5em; - padding: 0.25em 0.25em 0 0.25em; - - &:last-child { - margin-bottom: 0; - } -} - -.Tabs__Tab { - flex-grow: 0; -} - -.Tabs--fluid .Tabs__Tab { - flex-grow: 1; -} - -.Tab { - display: flex; - align-items: center; - justify-content: space-between; - background-color: $tab-color; - color: $text-color; - min-height: 2.25em; - min-width: 4em; -} - -.Tab:not(.Tab--selected):hover { - background-color: $tab-color-hovered; -} - -.Tab--selected { - background-color: $tab-color-selected; - color: $text-color-selected; -} - -.Tab__text { - flex-grow: 1; - margin: 0 0.5em; -} - -.Tab__left { - min-width: 1.5em; - text-align: center; - margin-left: 0.25em; -} - -.Tab__right { - min-width: 1.5em; - text-align: center; - margin-right: 0.25em; -} - -.Tabs--horizontal { - .Tab { - border-top: math.div(1em, 6) solid transparent; - border-bottom: math.div(1em, 6) solid transparent; - border-top-left-radius: 0.25em; - border-top-right-radius: 0.25em; - } - - .Tab--selected { - border-bottom: math.div(1em, 6) solid $color-default; - } -} - -.Tabs--vertical { - .Tab { - min-height: 2em; - border-left: math.div(1em, 6) solid transparent; - border-right: math.div(1em, 6) solid transparent; - border-top-left-radius: 0.25em; - border-bottom-left-radius: 0.25em; - } - - .Tab--selected { - border-right: math.div(1em, 6) solid $color-default; - } -} - -@each $color-name, $color-value in $fg-map { - .Tab--selected.Tab--color--#{$color-name} { - color: color.scale($color-value, $lightness: 25%); - } - - .Tabs--horizontal .Tab--selected.Tab--color--#{$color-name} { - border-bottom-color: $color-value; - } - - .Tabs--vertical .Tab--selected.Tab--color--#{$color-name} { - border-right-color: $color-value; - } -} diff --git a/tgui/packages/tgui/styles/components/TextArea.scss b/tgui/packages/tgui/styles/components/TextArea.scss deleted file mode 100644 index ec8e0c7a317..00000000000 --- a/tgui/packages/tgui/styles/components/TextArea.scss +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../functions.scss' as *; -@use './Input.scss'; - -$text-color: Input.$text-color !default; -$background-color: Input.$background-color !default; -$border-color: Input.$border-color !default; -$border-radius: Input.$border-radius !default; - -.TextArea { - position: relative; - display: inline-block; - border: base.em(1px) solid $border-color; - border: base.em(1px) solid rgba($border-color, 0.75); - border-radius: $border-radius; - background-color: $background-color; - margin-right: base.em(2px); - line-height: base.em(17px); - box-sizing: border-box; - width: 100%; -} - -.TextArea--fluid { - display: block; - width: auto; - height: auto; -} - -.TextArea--noborder { - border: 0px; -} - -.TextArea__textarea.TextArea__textarea--scrollable { - overflow: auto; - overflow-x: hidden; - overflow-y: scroll; -} - -.TextArea__textarea { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - border: 0; - outline: 0; - width: 100%; - height: 100%; - font-size: 1em; - line-height: base.em(17px); - min-height: base.em(17px); - margin: 0; - padding: 0 0.5em; - font-family: inherit; - background-color: transparent; - color: inherit; - box-sizing: border-box; - // Make sure the div and the textarea wrap words in the same way - word-wrap: break-word; - overflow: hidden; - - &::placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } - - &:-ms-input-placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } -} - -.TextArea__textarea_custom { - overflow: visible; - white-space: pre-wrap; -} - -.TextArea__nowrap { - white-space: nowrap; - overflow-wrap: normal; - overflow-x: scroll; -} diff --git a/tgui/packages/tgui/styles/components/Tooltip.scss b/tgui/packages/tgui/styles/components/Tooltip.scss deleted file mode 100644 index 497813a206d..00000000000 --- a/tgui/packages/tgui/styles/components/Tooltip.scss +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../functions.scss' as *; - -$color: #ffffff !default; -$background-color: #000000 !default; -$border-radius: base.$border-radius !default; - -.Tooltip { - z-index: 2; - padding: 0.5em 0.75em; - pointer-events: none; - text-align: left; - transition: opacity 150ms ease-out; - background-color: $background-color; - color: $color; - box-shadow: 0.1em 0.1em 1.25em -0.1em rgba(0, 0, 0, 0.5); - border-radius: $border-radius; - max-width: base.em(250px); -} diff --git a/tgui/packages/tgui/styles/css-variables.scss b/tgui/packages/tgui/styles/css-variables.scss new file mode 100644 index 00000000000..bddcdb2ef80 --- /dev/null +++ b/tgui/packages/tgui/styles/css-variables.scss @@ -0,0 +1,13 @@ +/** + * Internal variables + * For more, see: https://github.com/tgstation/tgui-core + * Files: vars-colors.scss | vars-components.scss | vars-vaules.scss + */ + +:root { + /* TitleBar */ + --titlebar-background: var(--color-secondary); + --titlebar-text: var(--color-text-translucent-light); + --titlebar-shadow-color: var(--color-border-dark); + --titlebar-shadow-core: var(--color-border-dark); +} diff --git a/tgui/packages/tgui/styles/functions.scss b/tgui/packages/tgui/styles/functions.scss index 28185755e88..c4b512a3e17 100644 --- a/tgui/packages/tgui/styles/functions.scss +++ b/tgui/packages/tgui/styles/functions.scss @@ -3,15 +3,9 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:map'; @use 'sass:math'; -@use 'sass:meta'; -// Type-casting -// -------------------------------------------------------- - -// Get a unit-less numeric value +/* Type-casting: Get a unit-less numeric value */ @function num($value) { @if meta.type-of($value) != number { @error 'Could not convert `#{$value}` - must be `type-of number`'; @@ -23,60 +17,6 @@ @return math.div($value, $value * 0 + 1); } -// Color -// -------------------------------------------------------- - -// Increases perceptual color lightness. -@function lighten($color, $percent) { - $scaled: hsl( - color.hue($color), - color.saturation($color), - color.lightness($color) * (1 + num($percent)) - ); - $mixed: color.mix(#ffffff, $color, 100% * num($percent)); - @return color.mix($scaled, $mixed, 75%); -} - -// Returns the NTSC luminance of `$color` as a float (between 0 and 1). -// 1 is pure white, 0 is pure black. -@function luminance($color) { - $colors: ( - 'red': color.red($color), - 'green': color.green($color), - 'blue': color.blue($color), - ); - - @each $name, $value in $colors { - $adjusted: 0; - $value: math.div($value, 255); - @if $value < 0.03928 { - $value: math.div($value, 12.92); - } @else { - $value: math.div($value + 0.055, 1.055); - $value: math.pow($value, 2.4); - } - // prettier-ignore - $colors: map.merge($colors, ( - $name: $value, - )); - } - - // prettier-ignore - @return (map.get($colors, 'red') * .2126) - + (map.get($colors, 'green') * .7152) - + (map.get($colors, 'blue') * .0722); -} - -// Blends an RGBA color with a static background color based on its -// alpha channel. Returns an RGB color, which is compatible with IE8. -@function fake-alpha($color-rgba, $color-background) { - @return color.mix( - color.change($color-rgba, $alpha: 1), - $color-background, - color.alpha($color-rgba) * 100% - ); -} - // Multiplies our viewport units by the DPI scaling amount // to ensure that they display correctly when using differently-scaled windows @function vp($viewportUnit) { diff --git a/tgui/packages/tgui/styles/interfaces/Accounting.scss b/tgui/packages/tgui/styles/interfaces/Accounting.scss new file mode 100644 index 00000000000..d48ef846d73 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Accounting.scss @@ -0,0 +1,42 @@ +.Accounting__Toolbar { + outline: solid 1px; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); + color: grey; +} + +.Accounting__Window { + flex-direction: column; + outline: solid 1px black; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); +} + +.Accounting__WindowContent { + background-color: white; + outline: solid; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); +} + +.Accounting__TableHeader { + border-style: solid; + border-width: 2px; + border-left: 0px; + border-right: 0px; + border-bottom: 0px; +} + +.Accounting__TableCellSides { + border-style: solid; + border-width: 1px; + border-top: 0px; + border-right: 0px; + border-bottom: 0px; +} diff --git a/tgui/packages/tgui/styles/interfaces/AlertModal.scss b/tgui/packages/tgui/styles/interfaces/AlertModal.scss index beff2b5535e..2a531c4186b 100644 --- a/tgui/packages/tgui/styles/interfaces/AlertModal.scss +++ b/tgui/packages/tgui/styles/interfaces/AlertModal.scss @@ -17,14 +17,14 @@ .AlertModal__Loader { width: 100%; position: relative; - height: 4px; + height: var(--border-thickness-large); } .AlertModal__LoaderProgress { position: absolute; - transition: - background-color 500ms ease-out, - width 500ms ease-out; - background-color: colors.bg(colors.$primary); + transition-property: background-color, width; + transition-duration: var(--transition-time-slow); + transition-timing-function: ease-out; + background-color: var(--color-primary); height: 100%; } diff --git a/tgui/packages/tgui/styles/interfaces/AnomalyTower.scss b/tgui/packages/tgui/styles/interfaces/AnomalyTower.scss new file mode 100644 index 00000000000..340acd85c2d --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/AnomalyTower.scss @@ -0,0 +1,33 @@ +.AnomalyTower__HazardBg { + background-size: 42.42px 42.42px; // ~30 * sqrt(2) to avoid weird artifacts + background-image: repeating-linear-gradient( + 45deg, + #ffc107, + #ffc107 15px, + #000000 15px, + #000000 30px + ); + + border-style: outset; + border-color: #333333; +} + +.AnomalyTower__HazardButton { + border-radius: 50px; + border-style: outset; + border-color: #bebebe; + + box-shadow: 0 0 20px #0c0c0c; + + width: 100px; + height: 100px; + color: red; +} + +.AnomalyTower__Charge { + font-family: 'Consolas', monospace; + background-color: black; + + border-style: ridge; + border-color: #8f8f8f; +} diff --git a/tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss b/tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss new file mode 100644 index 00000000000..74b2b985282 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss @@ -0,0 +1,193 @@ +.theme-Heretic { + --background-color: radial-gradient( + circle, + rgb(3, 3, 7) 54%, + rgb(9, 9, 26) 60%, + rgb(8, 5, 15) 80%, + rgb(13, 7, 26) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(3, 3, 7) 54%, + rgb(9, 9, 26) 60%, + rgb(8, 5, 15) 80%, + rgb(13, 7, 26) 100% + ); + + &--AshPath { + --background-color: radial-gradient( + circle, + rgba(24, 9, 9, 1) 54%, + rgba(31, 10, 10, 1) 60%, + rgba(46, 11, 11, 1) 80%, + rgba(47, 14, 14, 1) 100% + ); + --background-color-title: radial-gradient( + circle, + rgba(24, 9, 9, 1) 54%, + rgba(31, 10, 10, 1) 60%, + rgba(46, 11, 11, 1) 80%, + rgba(47, 14, 14, 1) 100% + ); + } + + &--RustPath { + // brown like poop + --background-color: radial-gradient( + circle, + rgba(120, 48, 9) 54%, + rgba(139, 48, 9) 60%, + rgb(150, 48, 9) 80%, + rgba(160, 48, 9) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(107, 48, 48) 54%, + rgb(211, 19, 19) 60%, + rgb(221, 84, 25) 80%, + rgb(230, 81, 12) 100% + ); + } + + &--FleshPath { + --background-color: radial-gradient( + circle, + rgb(153, 26, 26) 54%, + rgba(130, 9, 9, 1) 60%, + rgb(150, 33, 30) 80%, + rgb(141, 30, 26) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(100, 0, 0) 54%, + rgb(100, 2, 2) 60%, + rgba(150, 8, 5, 1) 80%, + rgb(200, 34, 0) 100% + ); + } + + &--VoidPath { + --background-color: radial-gradient( + circle, + rgb(13, 13, 66) 54%, + rgb(22, 22, 66) 60%, + rgb(25, 25, 99) 80%, + rgb(42, 42, 192) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(13, 13, 66) 54%, + rgb(22, 22, 66) 60%, + rgb(25, 25, 99) 80%, + rgb(42, 42, 192) 100% + ); + } + + &--BladePath { + --background-color: radial-gradient( + circle, + rgb(139, 141, 137) 54%, + rgb(139, 141, 137) 60%, + rgb(170, 188, 186) 80%, + rgba(185, 188, 182) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(139, 141, 137) 54%, + rgb(139, 141, 137) 60%, + rgb(170, 188, 186) 80%, + rgba(185, 188, 182) 100% + ); + } + + &--CosmicPath { + --background-color: radial-gradient( + circle, + rgb(78, 38, 110) 54%, + rgb(78, 38, 110) 60%, + rgb(78, 38, 110) 80%, + rgb(78, 38, 110) 100% + ); + --background-color-title: radial-gradient( + circle, + rgba(3, 3, 7, 1) 54%, + rgba(9, 9, 26, 1) 60%, + rgba(8, 5, 15, 1) 80%, + rgba(13, 7, 26, 1) 100% + ); + } + + &--LockPath { + --background-color: radial-gradient( + circle, + rgba(3, 3, 7, 1) 54%, + rgba(9, 9, 26, 1) 60%, + rgba(8, 5, 15, 1) 80%, + rgba(13, 7, 26, 1) 100% + ); + --background-color-title: radial-gradient( + circle, + rgba(3, 3, 7, 1) 54%, + rgba(9, 9, 26, 1) 60%, + rgba(8, 5, 15, 1) 80%, + rgba(13, 7, 26, 1) 100% + ); + } + + &--MoonPath { + --background-color: radial-gradient( + circle, + rgb(215, 179, 218) 54%, + rgb(163, 139, 165) 60%, + rgb(108, 92, 109) 80%, + rgba(13, 7, 26, 1) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(215, 179, 218) 54%, + rgb(163, 139, 165) 60%, + rgb(108, 92, 109) 80%, + rgba(13, 7, 26, 1) 100% + ); + } + + .TitleBar { + background: var(--background-color); + } + + .Window { + background: var(--background-color); + + &__content { + background-image: none; + } + } + + &--ascended { + --background-color: radial-gradient( + circle, + rgba(24, 9, 9, 1) 54%, + rgba(31, 10, 10, 1) 60%, + rgba(46, 11, 11, 1) 80%, + rgba(47, 14, 14, 1) 100% + ); + } +} + +.path-title { + padding: 0; + margin: 0; + text-align: center; +} + +.Passive { + margin: 0.5em 0; + background-color: #808080; + border-radius: 5px; + width: 50%; + padding: 0.5em; + + &--Active { + background-color: #62cc67; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/Changelog.scss b/tgui/packages/tgui/styles/interfaces/Changelog.scss new file mode 100644 index 00000000000..f459f697a09 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Changelog.scss @@ -0,0 +1,13 @@ +.Changelog { + &__Button { + height: 22px; + } + + &__Cell { + padding: var(--space-s) 0; + + &--Icon { + width: 25px; + } + } +} diff --git a/tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss b/tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss new file mode 100644 index 00000000000..c3be10fe06e --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss @@ -0,0 +1,23 @@ +.Tab_Flash { + box-shadow: 0 0 1px 2px #48abe0; + animation: shadowFade 0.5s forwards; +} + +@keyframes shadowFade { + to { + box-shadow: 0 0 0 0 #48abe0; + } +} + +.Marquee { + animation: marquee 5s linear infinite; +} + +@keyframes marquee { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(-100%); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/ColorPicker.scss b/tgui/packages/tgui/styles/interfaces/ColorPicker.scss new file mode 100644 index 00000000000..f9d9d317695 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/ColorPicker.scss @@ -0,0 +1,150 @@ +/** + * MIT License + * https://github.com/omgovich/react-colorful/ + * + * Copyright (c) 2020 Vlad Shilov + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +@use '../colors.scss'; +@use '../base.scss'; + +.react-colorful { + position: relative; + display: flex; + flex-direction: column; + width: 200px; + height: 200px; + user-select: none; + cursor: default; +} + +.react-colorful__saturation_value { + position: relative; + flex-grow: 1; + border-color: transparent; /* Fixes https://github.com/omgovich/react-colorful/issues/139 */ + border-bottom: 12px solid #000; + border-radius: 8px 8px 0 0; + background-image: + linear-gradient(to top, rgba(0, 0, 0, 255), rgba(0, 0, 0, 0)), + linear-gradient(to right, rgba(255, 255, 255, 255), rgba(255, 255, 255, 0)); +} + +.react-colorful__pointer-fill, +.react-colorful__alpha-gradient { + content: ''; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + pointer-events: none; + border-radius: inherit; +} + +/* Improve elements rendering on light backgrounds */ +.react-colorful__alpha-gradient, +.react-colorful__saturation_value { + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05); +} + +.react-colorful__hue, +.react-colorful__r, +.react-colorful__g, +.react-colorful__b, +.react-colorful__alpha, +.react-colorful__saturation, +.react-colorful__value { + position: relative; + height: 24px; +} + +.react-colorful__hue { + background: linear-gradient( + to right, + #f00 0%, + #ff0 17%, + #0f0 33%, + #0ff 50%, + #00f 67%, + #f0f 83%, + #f00 100% + ); +} + +.react-colorful__r { + background: linear-gradient(to right, #000, #f00); +} + +.react-colorful__g { + background: linear-gradient(to right, #000, #0f0); +} + +.react-colorful__b { + background: linear-gradient(to right, #000, #00f); +} + +/* Round bottom corners of the last element: `Hue` for `ColorPicker` or `Alpha` for `AlphaColorPicker` */ +.react-colorful__last-control { + border-radius: 0 0 8px 8px; +} + +.react-colorful__interactive { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + border-radius: inherit; + outline: none; + /* Don't trigger the default scrolling behavior when the event is originating from this element */ + touch-action: none; +} + +.react-colorful__pointer { + position: absolute; + z-index: 1; + box-sizing: border-box; + width: 28px; + height: 28px; + transform: translate(-50%, -50%); + background-color: #cfcfcf; + border: 2px solid #cfcfcf; + border-radius: 50%; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4); +} + +.react-colorful__interactive:focus .react-colorful__pointer { + transform: translate(-50%, -50%) scale(1.1); + background-color: #fff; + border-color: #fff; +} + +/* Chessboard-like pattern for alpha related elements */ +.react-colorful__alpha, +.react-colorful__alpha-pointer { + background-color: #fff; + background-image: url('data:image/svg+xml,'); +} + +.react-colorful__saturation-pointer, +.react-colorful__value-pointer, +.react-colorful__hue-pointer, +.react-colorful__r-pointer, +.react-colorful__g-pointer, +.react-colorful__b-pointer { + z-index: 1; + width: 20px; + height: 20px; +} + +/* Display the saturation value pointer over the hue one */ +.react-colorful__saturation_value-pointer { + z-index: 3; +} diff --git a/tgui/packages/tgui/styles/interfaces/CrewManifest.scss b/tgui/packages/tgui/styles/interfaces/CrewManifest.scss index 6c70acf4abc..85895c60af1 100644 --- a/tgui/packages/tgui/styles/interfaces/CrewManifest.scss +++ b/tgui/packages/tgui/styles/interfaces/CrewManifest.scss @@ -1,51 +1,56 @@ -@use '../colors.scss'; - -$departmental-colors: ( - 'Command': #114dc1, - 'Command Support': #114dc1, - 'Security': #991818, - 'Engineering': #c67519, - 'Medical': #15903a, - 'Science': #a44799, - 'Operations': #593616, - 'Service': #90524b, - 'Civilian': #999999, - 'Equipment': #6c5b73, - 'Miscellaneous': #5d6a67, +$department_map: ( + 'Cargo': var(--color-brown), + 'Command': var(--color-yellow), + 'Security': var(--color-red), + 'Engineering': var(--color-orange), + 'Medical': var(--color-teal), + 'Misc': var(--color-white), + 'Science': var(--color-purple), + 'Service': var(--color-green), + 'Silicon': var(--color-pink), ); -$status-colors: ( - 'active': colors.$green, - 'ssd': colors.$orange, - 'missing': colors.$orange, - 'deceased': colors.$red, - 'physically-unfit': colors.$yellow, - 'disabled': colors.$yellow, - 'away-mission': colors.$blue, -); - -@each $dept, $color in $departmental-colors { - .text-dept-#{to-lower-case($dept)} { - color: $color !important; - } - .bg-dept-#{to-lower-case($dept)} { - background-color: $color !important; - } - .border-dept-#{to-lower-case($dept)} { - border-color: $color !important; - .Section { - &__title { - border-color: $color; - } - &__titleText { - color: $color; +.CrewManifest { + @each $department-name, $color-value in $department_map { + &--#{$department-name} { + .Section { + &__title { + border-color: $color-value; + } + &__titleText { + color: $color-value; + } } } } -} -@each $status, $color in $status-colors { - .manifest-indicator-#{$status} { - color: $color !important; + &__Cell { + padding: var(--space-s) 0; + + &--Rank { + color: var(--color-label); + } + } + + &__Icons { + padding: var(--space-s) var(--space-l); + text-align: right; + } + + &__Icon { + color: var(--color-label); + position: relative; + + &:not(:last-child) { + margin-right: var(--space-m); + } + + &--Chevron { + padding-right: var(--space-xs); + } + + &--Command { + color: var(--color-yellow); + } } } diff --git a/tgui/packages/tgui/styles/interfaces/DeForestLogo.scss b/tgui/packages/tgui/styles/interfaces/DeForestLogo.scss new file mode 100644 index 00000000000..5c247781bd0 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/DeForestLogo.scss @@ -0,0 +1,7 @@ +.deforest_logo { + background-color: hsl(150, 100%, 18%); + -webkit-mask-image: url('../assets/bg-deforest.svg'); + mask-image: url('../assets/bg-deforest.svg'); + mask-repeat: no-repeat; + mask-position: center; +} diff --git a/tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss b/tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss new file mode 100644 index 00000000000..d5adcaa4e0b --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss @@ -0,0 +1,230 @@ +@use '../colors.scss'; +@use '../base.scss'; + +.BoardTab { + display: flex; + align-items: center; + justify-content: space-between; + color: var(--color-black); + min-height: 2.25em; + min-width: 4em; + border-radius: var(--border-radius-large) var(--border-radius-large) 0 0; + transform-origin: 50% 100%; + transition-property: background-color, transform; + transition-duration: var(--transition-time-medium); +} + +.BoardTab__Text { + margin-right: var(--space-m); +} + +.BoardTab__Contain { + flex-grow: 1; + margin: 0 var(--space-m); +} + +.BoardTab__Perspective:not(.BoardTab__Contain) { + perspective-origin: 50%; + transform: perspective(100px) rotateX(25deg); +} + +.BoardTab__Selected { + background-color: hsl(45, 82%, 66%); +} + +.BoardTabs { + display: flex; + align-items: stretch; + overflow: hidden; +} + +.Evidence__Pin { + box-shadow: var(--shadow-glow-small) hsla(0, 0%, 0%, 0.33); + background-color: hsl(0, 65%, 40%); + border-radius: var(--border-radius-circular); + width: 16px; + height: 16px; + transition: + transform 0.2s ease, + box-shadow 0.2s ease; + border: 1px solid hsla(0, 0%, 0%, 0.3); + background-image: radial-gradient( + circle at 30% 30%, + rgba(255, 255, 255, 0.5) 0%, + rgba(255, 255, 255, 0) 60% + ); +} + +.Evidence__Pin:hover { + transform: scale(1.2); + cursor: var(--cursor-pointer); + box-shadow: 0 0 12px hsla(0, 72%, 50%, 0.7); +} + +.Evidence__Pin--connecting { + background-color: hsl(0, 82%, 60%); + box-shadow: 0 0 15px hsla(0, 72%, 50%, 0.9); + transform: scale(1.3); +} + +.Evidence__Box { + cursor: var(--cursor-pointer); + box-shadow: 0 4px 12px hsla(0, 0%, 0%, 0.6); + padding: var(--space-m); + color: var(--color-black); + min-width: 200px; + max-width: 300px; + background-color: hsl(46, 39%, 94%); + border: 2px solid hsl(35, 30%, 50%); + user-select: none; + -ms-user-select: none; + text-wrap: wrap; + position: relative; + background-image: repeating-linear-gradient( + 0deg, + rgba(0, 0, 0, 0.06) 0px, + rgba(0, 0, 0, 0.06) 1px, + transparent 1px, + transparent 22px + ); + transition: all 0.3s ease; +} + +.Evidence__Box:hover { + box-shadow: 0 8px 16px hsla(0, 0%, 0%, 0.7); + transform: translateY(-4px) rotate(0.5deg); + border-color: hsl(35, 40%, 40%); + transition: transform 0.3s ease; +} + +.Evidence--dragging .Evidence__Box { + animation: card-sway 1s ease-in-out infinite; + box-shadow: 0 12px 24px hsla(0, 0%, 0%, 0.7); + transform: translateY(-8px) rotate(1deg) translateX(10px); + transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); + border-color: hsl(35, 40%, 30%); + z-index: 100; +} + +.Evidence__Box::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient( + 135deg, + rgba(255, 255, 255, 0.3) 0%, + rgba(255, 255, 255, 0) 50% + ); + pointer-events: none; +} + +.Evidence__Box::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 20px; + height: 20px; + background: linear-gradient( + 135deg, + transparent 0%, + transparent 50%, + rgba(0, 0, 0, 0.05) 50%, + rgba(0, 0, 0, 0.05) 100% + ); + pointer-events: none; +} + +.Evidence__Box__TextBox { + border-top: var(--border-thickness-tiny) dashed hsl(36, 29%, 80%); + text-wrap: wrap; + padding: var(--space-m) 0; + margin-top: var(--space-m); + max-width: 240px; + text-align: center; + font-family: 'Courier New', Courier, monospace; + color: #333; + + &.title { + border-top: none; + margin-top: 0; + font-weight: bold; + font-size: 1.1em; + color: #22131b; + text-transform: uppercase; + letter-spacing: 1px; + text-align: center; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + } +} + +.Board__Content { + position: relative; + background-color: hsl(45, 82%, 66%); + padding: var(--space-m); + overflow: hidden; + height: 95%; + background-image: + radial-gradient(circle, rgba(0, 0, 0, 0.1) 1px, transparent 1px), + radial-gradient(circle, rgba(0, 0, 0, 0.1) 1px, transparent 1px); + background-size: 16px 16px; + background-position: + 0 0, + 8px 8px; +} + +.Evidence__Icon { + image-rendering: pixelated; + margin-top: var(--space-m); + border: var(--border-thickness-large) solid hsl(0, 0%, 88%); + width: 100%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + transition: transform 0.2s ease; + filter: sepia(20%); +} + +.Evidence__Icon:hover { + transform: scale(1.02); + filter: sepia(0%); +} + +@each $color-name, $color-value in colors.$color-map { + .BoardTab__#{$color-name} { + cursor: var(--cursor-pointer); + background-color: hsl(from $color-value h s calc(l + var(--adjust-color))); + color: var(--color-text-fixed-black); + } + + .BoardTab__#{$color-name}:hover { + background-color: hsl( + from $color-value h s calc(l + var(--adjust-color) * 2.5) + ); + } +} + +@keyframes float { + 0% { + transform: translateY(0px); + } + 50% { + transform: translateY(-5px); + } + 100% { + transform: translateY(0px); + } +} + +@keyframes card-sway { + 0% { + transform: rotate(-1deg) translateX(0); + } + 50% { + transform: rotate(1deg) translateX(5px); + } + 100% { + transform: rotate(-1deg) translateX(0); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/Emojipedia.scss b/tgui/packages/tgui/styles/interfaces/Emojipedia.scss new file mode 100644 index 00000000000..d6ec654cc80 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Emojipedia.scss @@ -0,0 +1,8 @@ +.emojipedia16x16 { + transform-origin: center; + margin: var(--space-m); + + &:hover { + transform: scale(1.5); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/EventLogger.scss b/tgui/packages/tgui/styles/interfaces/EventLogger.scss new file mode 100644 index 00000000000..f8e33cbf22b --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/EventLogger.scss @@ -0,0 +1,16 @@ +// Custom HTML tooltip shown on timeline mark hover, rendered at fixed position +.evlog-mark-tooltip { + position: fixed; + background: #1e1e2e; + border: 1px solid #555; + border-radius: 4px; + padding: 4px 8px; + white-space: pre-wrap; + font-size: 11px; + color: #ccc; + pointer-events: none; + z-index: 9999; + min-width: 120px; + max-width: 320px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6); +} diff --git a/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss b/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss new file mode 100644 index 00000000000..c2135bc9b0e --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss @@ -0,0 +1,108 @@ +.ExperimentTechwebServer__Web, +.ExperimentConfigure__ExperimentPanel { + background: var(--color-black); + border: var(--border-thickness-tiny) solid var(--color-primary); + margin: var(--space-s) 0; + + &--selected { + border: var(--border-thickness-tiny) solid var(--button-background-selected); + } +} + +.ExperimentTechwebServer__WebHeader { + background: var(--color-primary); + padding: var(--space-xs); +} + +.ExperimentTechwebServer__WebName { + font-size: 18px; +} + +.ExperimentTechwebServer__WebContent { + padding: var(--space-sm); +} + +.ExperimentTechwebServer__WebContent > .LabeledList { + margin: var(--space-s) var(--space-s) var(--space-s) var(--space-xl); +} + +.ExperimentConfigure__ExperimentName { + font-weight: bold; + border-radius: 0; +} + +.ExperimentConfigure__ExperimentNameFakeButton { + background-color: var(--color-primary); + font-weight: bold; + border-radius: 0; + position: relative; + display: block; + margin-left: 0; + margin-right: 0; + white-space: nowrap; + line-height: var(--button-height); + padding: 0 var(--space-m); + margin-bottom: var(--space-xs); + border-radius: var(--button-border-radius); + outline: none; + &__content { + display: block; + align-self: stretch; + } +} + +.ExperimentConfigure__ExperimentContent { + /* prettier-ignore */ + padding: var(--space-s) calc(var(--space-xl) * 1.5) var(--space-s) var(--space-s); +} + +.ExperimentStage__Indicator { + font-weight: bold; + text-align: center; +} + +.ExperimentStage__StageContainer.complete .ExperimentStage__Description { + opacity: 0.4; + text-decoration: line-through; +} + +.ExperimentStage__StageContainer { + margin-bottom: var(--space-m); +} + +.ExperimentStage__Table { + border-collapse: separate; + border-spacing: var(--space-s) var(--space-s); +} + +.ExperimentConfigure__PerformExperiment { + text-align: center; + padding: var(--space-l) 0; +} + +.ExperimentConfigure__ExperimentsContainer { + height: 100%; + display: flex; + flex-direction: column; +} + +.ExperimentConfigure__ExperimentsContainer > :last-child { + flex: 1; +} + +// Required for the time being otherwise we'll end up coloring the tooltip +// by accident when we color the tag. +.ExperimentConfigure__TagContainer { + position: absolute; + right: 0; + top: 0; +} + +.ExperimentConfigure__PerformanceHint * { + position: absolute; + width: 100%; + height: 100%; + right: 0; + top: 0; + color: var(--color-text-translucent); +} diff --git a/tgui/packages/tgui/styles/interfaces/Fabricator.scss b/tgui/packages/tgui/styles/interfaces/Fabricator.scss new file mode 100644 index 00000000000..e464611f5fb --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Fabricator.scss @@ -0,0 +1,207 @@ +@use '~tgui-core/styles/components/Button' as button; + +.Fabricator__Recipe { + padding: var(--space-s) 0; + border-bottom: var(--border-radius-tiny) solid var(--color-black); + position: relative; + + &:last-child { + border-bottom: 0; + } +} + +.Fabricator__PrintAmount { + min-height: 100%; +} + +.Fabricator__PrintAmount { + transition: opacity var(--transition-time-slow) ease-out; +} + +.Fabricator__PrintAmount--disabled { + opacity: 0.5; + background-color: transparent; +} + +.Fabricator__PrintAmount--disabled { + text-decoration: line-through; +} + +.MaterialDock { + position: relative; + padding: var(--space-m); + border-radius: 0 0 var(--border-radius-small) var(--border-radius-small); + transition: opacity var(--transition-time-slow) ease-in-out; +} + +.MaterialDock--active { + background-color: hsl(0, 0%, 6.7%); + transition: background-color var(--transition-time-fas) ease-out; +} + +.MaterialDock__Label { + transition: opacity var(--transition-time-slow) ease-out; +} + +.MaterialDock--disabled .MaterialDock__Label { + opacity: 0.5; +} + +.MaterialDock__Dock { + position: absolute; + background-color: hsl(0, 0%, 6.7%); + bottom: 100%; + left: 0; + width: 100%; + padding: var(--space-xl); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + text-align: center; + box-shadow: 0 0 3px var(--color-black); +} + +.MaterialDock--active .MaterialDock__Dock { + animation: materialdock-open var(--transition-time-medium) ease-out; + @keyframes materialdock-open { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } + } +} + +.MaterialDock__Button { + width: 100%; + height: 0; + padding-bottom: 100%; + position: relative; + box-shadow: 0 0 3px var(--color-black); +} + +.FabricatorRecipe { + display: flex; + width: auto; + border-bottom: var(--border-thickness-tiny) solid hsla(0, 0%, 0%, 0.5); + position: relative; + + &:last-child { + border-bottom: 0; + } + + &__Progress { + position: absolute; + bottom: 0; + left: 0; + height: 4px; + background-color: hsla(0, 0%, 100%, 0.25); + border-radius: var(--border-radius-medium); + transition: width var(--transition-time-slowest) linear; + } + + &__Title, + &__Button { + position: relative; + display: flex; + align-items: center; + justify-content: flex-start; + margin: 0; + padding: var(--space-s) var(--space-m); + border-radius: 0; + + @include button.button-color(); + @include button.button-color-transparent(); + + &:first-child { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + } + + &:last-child { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } + + &--disabled { + opacity: 0.5; + } + } + + &__Title { + flex-grow: 1; + } + + &__Icon { + width: 32px; + height: 32px; + margin-right: var(--space-xl); + } + + &__Button { + justify-self: flex-end; + + &--icon { + padding: 0 var(--space-xl); + } + + &--disabled { + text-decoration: line-through; + } + } +} + +.FabricatorMaterialIcon { + display: inline-block; + position: relative; + width: 32px; + height: 32px; + + &__Icon { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + transition: opacity var(--transition-time-slow) ease-out; + + &--active { + opacity: 1; + } + } +} + +.FabricatorTabs { + .FabricatorTabs { + margin-top: var(--space-m); + padding-left: var(--space-s); + } + + &__Tab { + cursor: var(--cursor-pointer); + padding: var(--space-m); + background-color: var(--tab-background); + color: var(--tab-color); + border-right: var(--tab-indicator-size) solid transparent; + border-radius: var(--tab-border-radius) 0 0 var(--tab-border-radius); + transition-property: border-color, background-color; + transition-duration: var(--transition-time-fast); + transition-timing-function: ease-out; + + &:hover, + &--active { + background-color: var(--tab-background-hover); + } + + &--active { + cursor: var(--cursor-default); + color: var(--tab-color-selected); + border-color: var(--color-primary); + } + } + + &__Label { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/HellishRunes.scss b/tgui/packages/tgui/styles/interfaces/HellishRunes.scss new file mode 100644 index 00000000000..0861cad58ff --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/HellishRunes.scss @@ -0,0 +1,20 @@ +@use '../colors.scss'; +@use '../base.scss'; + +.HellishRunes__demonrune { + font-size: 20px; + margin-top: -240px; + animation-duration: 5s; + animation-name: demonrune; + animation-timing-function: linear; + animation-iteration-count: infinite; +} + +@keyframes demonrune { + from { + transform: translate(0px, 0px); + } + to { + transform: translate(0px, 194px); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss b/tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss new file mode 100644 index 00000000000..0e92f8a78b4 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss @@ -0,0 +1,4 @@ +.HotkeysHelp__pill { + border-radius: var(--border-radius-large); + background-color: hsla(0, 0%, 100%, 0.125); +} diff --git a/tgui/packages/tgui/styles/interfaces/Hypertorus.scss b/tgui/packages/tgui/styles/interfaces/Hypertorus.scss new file mode 100644 index 00000000000..bb0e7dbfad5 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Hypertorus.scss @@ -0,0 +1,158 @@ +@use '../colors.scss'; + +/// Index @{ + +.hypertorus-layout { + margin-right: -0.5em; +} + +.hypertorus-layout > * { + margin-bottom: 0.5em; + margin-right: 0.5em; +} + +/// @} + +/// Recipes @{ + +// Subtle horizontal stripes for the table +.hypertorus-recipes__row:nth-child(odd) { + background-color: rgba(0, 0, 0, 0.37); +} +.hypertorus-recipes__row:nth-child(even) { + background-color: rgba(14, 14, 14, 0.37); +} + +// Highlight an active row +.hypertorus-recipes__activerow:nth-child(odd) { + background-color: rgba(20, 50, 81, 0.37); +} +.hypertorus-recipes__activerow:nth-child(even) { + background-color: rgba(29, 61, 98, 0.37); +} + +// Headers shouldn't get stripes, but should take the label text color. +// Headers get left borders as a separator, except if they're furtherest left. +.hypertorus-recipes__row.Table__row--header { + color: colors.fg(var(--color-label)); + background-color: rgba(0, 0, 0, 0); +} +.hypertorus-recipes__row.Table__row--header > td { + border-left: 1px solid colors.bg(var(--color-label)); + text-align: center; +} +.hypertorus-recipes__row.Table__row--header > td:first-child { + border-left: none; +} + +// Recipe icons are red, unless they're in a header +.hypertorus-recipes__icon { + text-align: center; + position: relative; + color: colors.fg(var(--color-red)); + width: 10px; +} +.hypertorus-recipes__row.Table__row--header * .hypertorus-recipes__icon { + color: colors.fg(var(--color-label)); +} + +/// @} + +/// Temperatures @{ + +// Note: Height must be kept in sync with Hypertorus/Temperatures.js +$height: 200px; + +// Calculate the space needed for the labels to the left of the chart +$yAxisLabelWidth: 60px; +$yAxisIconPadding: 2px; +$yAxisIconWidth: 14px; +$yAxisMargin: $yAxisLabelWidth + $yAxisIconWidth + $yAxisIconPadding * 2; + +// Relative container respects the padding provided by Section +.hypertorus-temperatures__container { + position: relative; + margin-right: 10px; + overflow-y: hidden; +} + +.hypertorus-temperatures__y-axis-marks { + margin-left: 1px; + margin-right: 1px; + width: $yAxisMargin; +} + +.hypertorus-temperatures__x-axis { + background-color: colors.bg(var(--color-label)); + position: absolute; + top: $height; + height: 1px; + left: $yAxisMargin; + right: 0; +} + +.hypertorus-temperatures__y-axis { + background-color: colors.bg(var(--color-label)); + position: absolute; + width: 1px; + left: $yAxisMargin; + height: $height; +} + +// Note: top set in js +.hypertorus-temperatures__y-axis-tick-anchor { + position: absolute; + left: 0px; + right: 0; +} + +.hypertorus-temperatures__y-axis-tick { + background-color: colors.bg(var(--color-label)); + position: absolute; + left: $yAxisMargin; + right: 0; + height: 1px; +} + +.hypertorus-temperatures__y-axis-label { + text-align: right; + color: colors.fg(var(--color-label)); + position: absolute; + top: 0; + left: 0; + width: $yAxisMargin; +} + +.hypertorus-temperatures__y-axis-icon { + display: inline-block; + margin-right: $yAxisIconPadding; +} + +.hypertorus-temperatures__chart { + left: 0; + right: 0; + margin-left: $yAxisMargin; +} + +.hypertorus-temperatures__vertical-bar { + height: $height; + position: relative; + width: 17px; + bottom: 0; +} + +// Note: top set in js +.hypertorus-temperatures__vertical-bar > * { + position: absolute; + left: -0.5px; + right: -0.5px; + bottom: 0px; + border-radius: 0.16em; +} + +.hypertorus__unselectable { + user-select: none; + -ms-user-select: none; +} + +/// @} diff --git a/tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss b/tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss new file mode 100644 index 00000000000..6c344819924 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss @@ -0,0 +1,143 @@ +@use 'sass:map'; +@use '../colors.scss'; +@use '../base.scss'; + +$map-keys: colors.$color-map !default; + +.CircuitInfo__Examined { + background-color: var(--color-black); + padding: var(--space-ml); + border-radius: var(--border-radius-large); + + user-select: none; + pointer-events: none; +} + +.ObjectComponent { + pointer-events: auto; +} + +.ObjectComponent__Titlebar { + border-top-left-radius: var(--border-radius-huge); + border-top-right-radius: var(--border-radius-huge); + + white-space: nowrap; + + -ms-user-select: none; + user-select: none; +} + +.ObjectComponent__Content { + white-space: nowrap; + background-color: hsla(0, 0%, 0%, 0.5); + + -ms-user-select: none; + user-select: none; +} + +.ObjectComponent__Greyed_Content { + white-space: nowrap; + background-color: hsla(0, 0%, 7.5%, 0.5); + + -ms-user-select: none; + user-select: none; +} + +.ObjectComponent__Port { + position: relative; + width: 13px; + height: 13px; +} + +.ObjectComponent__PortPos { + position: absolute; + inset: 0; +} + +.Tooltip__Port { + backdrop-filter: var(--tooltip-blur); + background-color: var(--tooltip-background); + border-radius: var(--tooltip-border-radius); + box-shadow: 0.1em 0.1em 1.25em -0.1em hsla(0, 0%, 0%, 0.5); + color: var(--tooltip-color); + max-width: base.em(250px); + padding: var(--space-m) var(--space-l); + text-align: left; +} + +@each $color-name, $color-value in $map-keys { + .color-stroke-#{$color-name} { + stroke: hsl(from $color-value h s calc(l + var(--adjust-color))) !important; + } + + .color-fill-#{$color-name} { + fill: hsl(from $color-value h s calc(l + var(--adjust-color))) !important; + } +} + +.IntegratedCircuit__BlueBorder { + border: var(--border-thickness-tiny) solid var(--color-border-primary); + border-radius: var(--border-radius-small); +} + +$category-colors: ( + 'Utility': ( + bg: hsl(136, 77%, 23%), + contrast: white, + ), + 'Entity': ( + bg: hsl(288, 60%, 49%), + contrast: white, + ), + 'Sensor': ( + bg: hsl(337, 67%, 66%), + contrast: white, + ), + 'Math': ( + bg: hsl(113, 65%, 47%), + contrast: black, + ), + 'Unassigned': ( + bg: hsl(208, 65%, 47%), + contrast: white, + ), + 'String': ( + bg: hsl(24, 84%, 48%), + contrast: white, + ), + 'List': ( + bg: hsl(0, 0%, 67%), + contrast: black, + ), + 'Action': ( + bg: hsl(178, 59%, 45%), + contrast: black, + ), + 'ID': ( + bg: hsl(52, 75%, 48%), + contrast: black, + ), + 'NTNet': ( + bg: hsl(239, 64%, 44%), + contrast: white, + ), + 'Abstract': ( + bg: hsl(208, 65%, 47%), + contrast: white, + ), + 'Admin': ( + bg: hsl(0, 72%, 50%), + contrast: white, + ), + 'BCI': ( + bg: black, + contrast: white, + ), +); + +@each $category-name, $values in $category-colors { + .ObjectComponent__Category__#{$category-name} { + background-color: map.get($values, bg); + color: map.get($values, contrast); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss b/tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss new file mode 100644 index 00000000000..501b6c6e4c9 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss @@ -0,0 +1,18 @@ +.LibraryAdmin_RecordCell { + text-align: center; + vertical-align: middle; + padding: var(--space-sm) 0; + white-space: nowrap; +} + +.LibraryAdmin_RecordHeader { + text-align: center; + font-size: 150%; + vertical-align: middle; + padding: var(--space-sm) 0; + white-space: nowrap; +} + +.LibraryAdmin_RecordCell:nth-child(odd) { + background: hsla(0, 0%, 0%, 0.1); +} diff --git a/tgui/packages/tgui/styles/interfaces/LibraryComputer.scss b/tgui/packages/tgui/styles/interfaces/LibraryComputer.scss new file mode 100644 index 00000000000..581932265ac --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/LibraryComputer.scss @@ -0,0 +1,11 @@ +.LibraryComputer__CultNonsense { + font-size: 28px; + width: 100%; + font-family: copperplate; + height: 100%; +} + +.LibraryComputer__CultText { + font-family: copperplate; + font-size: 20px; +} diff --git a/tgui/packages/tgui/styles/interfaces/ListInput.scss b/tgui/packages/tgui/styles/interfaces/ListInput.scss index a7c74e6252d..43fb73ea9bc 100644 --- a/tgui/packages/tgui/styles/interfaces/ListInput.scss +++ b/tgui/packages/tgui/styles/interfaces/ListInput.scss @@ -11,20 +11,20 @@ } .ListInput__Section .Section__titleText { - font-size: base.em(12px); + font-size: 1rem; } .ListInput__Loader { - width: 100%; position: relative; + width: 100%; height: 4px; } .ListInput__LoaderProgress { position: absolute; - transition: - background-color 500ms ease-out, - width 500ms ease-out; - background-color: colors.bg(colors.$primary); height: 100%; + background-color: colors.bg(var(--color-primary)); + transition-property: background-color, width; + transition-duration: var(--transition-time-slow); + transition-timing-function: ease-out; } diff --git a/tgui/packages/tgui/styles/interfaces/LoreConsole.scss b/tgui/packages/tgui/styles/interfaces/LoreConsole.scss deleted file mode 100644 index 8aa6e81c243..00000000000 --- a/tgui/packages/tgui/styles/interfaces/LoreConsole.scss +++ /dev/null @@ -1,17 +0,0 @@ -@use '../base.scss'; - -$background-color: rgba(0, 0, 0, 0.33) !default; - -.LoreConsole__titleText { - font-size: 300%; - font-weight: bold; - margin: 0; - padding: 4px; -} - -.LoreConsole__entryText { - color: chocolate; - font-size: 150%; - font-family: 'Courier New', Courier, monospace; - padding: 32px; -} diff --git a/tgui/packages/tgui/styles/interfaces/Mecha.scss b/tgui/packages/tgui/styles/interfaces/Mecha.scss new file mode 100644 index 00000000000..7697262b0d1 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Mecha.scss @@ -0,0 +1,41 @@ +.Mecha__displayBox { + background-color: hsl(150, 100%, 1%); + border: 0.167em inset hsl(50, 33%, 91%); + color: hsl(132, 100%, 45%); + font-size: 2em; + font-family: monospace; + padding: 0.25em; +} + +.Mecha__displayBoxRed { + background-color: hsl(150, 100%, 1%); + border: 0.167em inset hsl(50, 33%, 91%); + color: hsl(0, 89%, 64%); + font-size: 2em; + font-family: var(--font-family-mono); + padding: 0.25em; +} + +.Mecha__Button { + outline-width: 0.25rem !important; + border-width: 0.65rem !important; + padding-left: 0 !important; + padding-right: 0 !important; +} + +.Mecha__ButtonDanger { + background-color: var(--button-background-danger) !important; + border-color: var(--button-background-danger) !important; + outline-width: 0.25rem !important; + border-width: 0.65rem !important; + padding-left: 0 !important; + padding-right: 0 !important; + &:hover { + background-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/NtosMessenger.scss b/tgui/packages/tgui/styles/interfaces/NtosMessenger.scss new file mode 100644 index 00000000000..b89209d4fb9 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NtosMessenger.scss @@ -0,0 +1,101 @@ +/* Some themes have bad contrast on primary color */ +.NtosChatMessage { + .theme-ntOS95 & { + --color-primary: var(--color-section); + border: var(--border-thickness-small) outset var(--95-outline); + } + + .theme-ntos_terminal & { + --color-primary: hsl(from var(--terminal-color) h s calc(l - 40)); + } +} + +.NtosChatMessage { + display: inline-flex; + flex-direction: column; + max-width: 25rem; + margin: 0; + padding: var(--space-sm) var(--space-ml); + border-radius: var(--border-radius-small); + background-color: hsl(from var(--color-primary) h s calc(l - 12.5)); + + &_outgoing { + @extend .NtosChatMessage; + background-color: hsl(from var(--color-primary) h s calc(l + 7.5)); + text-align: right; + float: right; + } + + &__timestamp { + height: 0.9rem; + margin-top: var(--space-sm); + margin-left: var(--space-m); + } + + &__content { + display: flex; + justify-content: space-between; + min-width: 9rem; + overflow-wrap: break-word; + text-align: left; + word-break: break-word; + } + + &__everyone { + margin-top: var(--space-m); + font-size: 0.8rem; + color: lightgrey; + } + + &__image { + image-rendering: pixelated; + align-self: flex-start; + margin-top: var(--space-m); + max-width: 25rem; + } +} + +.NtosChatLog { + padding: var(--space-l); + min-height: 99.5%; + margin: 0; +} + +.NtosChatLog__ImagePreview { + width: fit-content; + height: fit-content; + + & img { + image-rendering: pixelated; + height: auto; + width: 30rem; + justify-self: center; + align-self: center; + } +} + +.UnreadDivider { + position: relative; + display: flex; + font-size: 1rem; + text-align: center; + + & > span { + color: var(--color-red); + } + + & > div { + display: inline-flex; + flex: 1; + border-bottom: var(--border-thickness-small) solid var(--color-red); + height: 50%; + + &:last-child { + margin-left: 1%; + } + + &:first-child { + margin-right: 1%; + } + } +} diff --git a/tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss b/tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss new file mode 100644 index 00000000000..f3dbed400a6 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss @@ -0,0 +1,34 @@ +@use '../colors.scss'; + +.NtosNanopaint__NewDialog__TemplateCell { + border-radius: 0%; + background-color: var(--color-base); + + &:nth-child(odd) { + background-color: colors.fg(var(--color-base)); + } + + &:hover { + background-color: colors.fg(var(--color-primary)); + } +} + +.NtosNanopaint__NewDialog__TemplatePreview { + border-color: black; + border-width: 1px; + background-color: white; + margin: 0.5rem; +} + +.NtosNanopaint__SelectDialog__EntryCell { + border-radius: 0%; + background-color: var(--color-base); + + &.Button--selected { + background-color: var(--color-primary); + } + + &:hover { + background-color: colors.fg(var(--color-primary)); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss b/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss new file mode 100644 index 00000000000..2d3431ef322 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss @@ -0,0 +1,43 @@ +.NtosNotepad__layout { + display: flex; + flex-direction: column; + height: 100%; +} + +.NtosNotepad__AboutDialog__logo { + display: inline-block; + text-align: center; + width: 100%; + font-family: var(--font-family-mono); + font-size: 2rem; +} + +.NtosNotepad__AboutDialog__text { + display: flex; + flex-direction: column; + font-size: 1rem; +} + +.NtosNotepad__textarea { + background-color: var(--color-section); + height: 100%; + resize: none; + color: inherit; + outline: none; + width: 100%; + font-family: var(--font-family-mono); +} + +.NtosNotepad__StatusBar { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-end; +} + +.NtosNotepad__StatusBar__entry { + display: block; + border-left: var(--color-thickness-tiny) solid var(--color-border-dark); + padding-left: var(--space-xl); + padding-right: var(--space-s); +} diff --git a/tgui/packages/tgui/styles/interfaces/NuclearBomb.scss b/tgui/packages/tgui/styles/interfaces/NuclearBomb.scss new file mode 100644 index 00000000000..5aaee319114 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NuclearBomb.scss @@ -0,0 +1,102 @@ +@use 'sass:color'; + +@use '../base.scss'; +@use '../colors.scss'; +@use '../functions.scss' as *; + +:root { + --nuclear-beige: hsl(50, 33%, 84%); +} + +.NuclearBomb__displayBox { + background-color: hsl(150, 100%, 1%); + border: var(--border-thickness-small) inset var(--nuclear-beige); + color: hsl(132, 100%, 45%); + font-size: 2em; + font-family: var(--font-family-mono); + padding: var(--space-s); +} + +.NuclearBomb__Button { + outline-width: 0.25rem !important; + border-width: 0.65rem !important; + padding-left: 0 !important; + padding-right: 0 !important; + transition-duration: 0s; + border-style: outset !important; + border-color: var(--nuclear-beige); + + i.Icon { + margin: 0; + } + + &:active { + border-style: inset !important; + + .Button__content { + opacity: 0.75; + transform: translate(0px, 2px); + } + } +} + +.NuclearBomb__Button--keypad { + background-color: var(--nuclear-beige); + border-color: ar(--nuclear-beige); + + &:hover:not(:active) { + background-color: hsl( + from var(--nuclear-beige) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--nuclear-beige) h s calc(l + var(--adjust-hover)) + ) !important; + } +} + +.NuclearBomb__Button--1, +.NuclearBomb__Button--2, +.NuclearBomb__Button--3, +.NuclearBomb__Button--4, +.NuclearBomb__Button--5, +.NuclearBomb__Button--6, +.NuclearBomb__Button--7, +.NuclearBomb__Button--8, +.NuclearBomb__Button--9, +.NuclearBomb__Button--0 { + color: rgb(56, 52, 52); + background-color: var(--nuclear-beige) !important; +} + +.NuclearBomb__Button--E { + background-color: var(--button-background-caution) !important; + border-color: var(--button-background-caution) !important; + &:hover:not(:active) { + background-color: hsl( + from var(--button-background-caution) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--button-background-caution) h s calc(l + var(--adjust-hover)) + ) !important; + } +} + +.NuclearBomb__Button--C { + background-color: var(--button-background-danger) !important; + border-color: var(--button-background-danger) !important; + &:hover:not(:active) { + background-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + } +} + +.NuclearBomb__NTIcon { + background-image: url('tgui-core/assets/bg-nanotrasen.svg'); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} diff --git a/tgui/packages/tgui/styles/interfaces/OperatingComputer.scss b/tgui/packages/tgui/styles/interfaces/OperatingComputer.scss new file mode 100644 index 00000000000..b7b3cf03fbf --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/OperatingComputer.scss @@ -0,0 +1,25 @@ +.theme-operating_computer { + .Layout__content { + background-image: url('../assets/bg-deforest.svg'); + background-size: 90%; + } + // Base + --color-base: hsl(150, 100%, 18%); + --color-primary: hsl(from var(--color-base) h s calc(l + 5)); + --color-border-primary: hsla(0, 0%, 100%, 0.75); + --secondary-lightness-adjustment: -10; + --base-gradient-spread: 0; + + // Components + --button-background-selected: hsl(0, 90.3%, 32.35%); + --button-background-caution: hsl(29.5, 90.95%, 39.02%); + --button-background-danger: hsl(61.15, 100%, 30.78%); + --button-border-radius: 0; + + --collapsible-background-selected: hsl(0, 90.3%, 32.35%); + --collapsible-background-caution: hsl(29.5, 90.95%, 39.02%); + --collapsible-background-danger: hsl(61.15, 100%, 30.78%); + + --progress-bar-background: hsla(0, 0%, 0%, 0.5); + --tab-background-selected: var(--color-base); +} diff --git a/tgui/packages/tgui/styles/interfaces/Orbit.scss b/tgui/packages/tgui/styles/interfaces/Orbit.scss new file mode 100644 index 00000000000..aeeab2bcca9 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Orbit.scss @@ -0,0 +1,19 @@ +.JobIcon { + background: var(--color-black); + width: 20px; + height: 20px; + padding: var(--space-xxs) var(--space-xxs) 0; + overflow: hidden; +} + +.OrbitItem__selected { + position: absolute; + top: 0; + right: 0; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid white; + transform: translateX(-50%); +} diff --git a/tgui/packages/tgui/styles/interfaces/Paper.scss b/tgui/packages/tgui/styles/interfaces/Paper.scss new file mode 100644 index 00000000000..8bbfe4601ab --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Paper.scss @@ -0,0 +1,18 @@ +/** + * @file + * @copyright 2020 + * @author ThePotato97 (https://github.com/ThePotato97) + * @license ISC + */ + +.Paper { + &__Stamp { + position: absolute; + pointer-events: none; + user-select: none; + } + &__Page { + word-break: break-word; + word-wrap: break-word; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss b/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss new file mode 100644 index 00000000000..cff7b09fbe8 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss @@ -0,0 +1,240 @@ +@use 'sass:color'; +@use 'sass:map'; +@use '../colors.scss'; +@use '../base.scss'; + +$department_map: ( + 'Assistant': var(--color-gray), + 'Captain': colors.fg(var(--color-blue)), + 'Cargo': var(--color-brown), + 'Command': var(--color-yellow), + 'Security': var(--color-red), + 'Engineering': hsl(from var(--color-orange) h s calc(l + 7.5)), + 'Medical': var(--color-teal), + 'Science': colors.fg(var(--color-purple)), + 'Service': var(--color-green), + 'Silicon': var(--color-pink), +); + +.ChoicedSelection { + padding: var(--space-m); + background-color: var(--color-base); + box-shadow: 0 0.5em 1em hsla(0, 0%, 0%, 0.5); +} + +.PreferencesMenu { + &__Antags { + &__antagSelection { + gap: var(--space-l); + + @mixin animate-hover { + .antagonist-icon-parent .antagonist-icon { + &:hover { + transform: scale(1.3); + transition: transform var(--transition-time-fast) ease-out; + } + } + } + + &__antagonist { + .antagonist-icon-parent { + cursor: var(--cursor-pointer); + border-style: solid; + border-radius: var(--border-radius-circular); + border-width: var(--border-thickness-large); + box-sizing: content-box; + overflow: hidden; + position: relative; + + height: 96px; + width: 96px; + + .antagonist-icon { + image-rendering: pixelated; + border-radius: var(--border-radius-circular); + overflow: hidden; + transition: transform var(--transition-time-fast) ease-in; + } + } + + &--off { + @include animate-hover; + + .antagonist-icon-parent { + border-color: var(--color-red); + + .antagonist-icon { + opacity: 0.5; + + &:hover { + opacity: 1; + } + } + } + } + + &--on { + @include animate-hover; + + .antagonist-icon-parent { + border-color: var(--color-green); + } + } + + &--banned { + .antagonist-icon-parent { + border-color: var(--color-grey); + } + + .antagonist-icon { + opacity: 0.5; + } + } + + .antagonist-banned-slash { + background: var(--color-grey); + + width: 100%; + height: 3px; + + position: absolute; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%) rotate(35deg); + + opacity: 0.8; + } + + .antagonist-days-left { + text-align: center; + text-shadow: 1px 1px 1px hsl(0, 0%, 13.3%); + + width: 100%; + + position: absolute; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); + } + } + } + } + + &__Jobs { + > * { + flex: 1; + } + + &__departments { + @each $department-name, $color-value in $department_map { + &--#{$department-name} { + &.head { + background: $color-value; + + .job-name { + font-weight: bold; + } + } + + background: colors.fg($color-value); + border: var(--border-thickness-small) outset colors.fg($color-value); + color: black; + + > * { + height: calc(100% + 0.2em); + padding-bottom: 0.2em; + } + + .options { + margin-right: var(--space-xxs); + background: hsla(0, 0%, 0%, 0.2); + height: 100%; + } + } + + &--Captain { + border: var(--border-thickness-medium) + outset + hsla(60, 100%, 39.2%, 1); + + &:first-child { + border-top: var(--border-thickness-medium) + outset + hsla(60, 100%, 39.2%, 1); + } + + .job-name { + font-size: 17px; + } + } + } + + &__priority { + border: var(--border-thickness-tiny) solid hsla(0, 0%, 0%, 0.3); + + &--off::after { + content: ''; + + background: hsla(0, 0%, 0%, 0.2); + display: block; + height: 80%; + left: 50%; + position: relative; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(40deg); + width: 2px; + } + } + } + + &__PriorityHeader { + font-weight: bold; + transform: translateX(-4px) translateY(-8px) rotate(315deg); + white-space: nowrap; + width: 19px; + } + } + + &__Quirks { + &__QuirkList { + scrollbar-color: var(--color-grey) transparent; + background-color: var(--color-light-grey); + width: 100%; + overflow-x: hidden; + overflow-y: scroll; + + &__quirk { + cursor: var(--cursor-pointer); + background-color: var(--color-white); + border-bottom: var(--border-thickness-tiny) solid var(--color-black); + color: hsl(0, 0%, 6.7%); + transition: background-color var(--transition-time-fast) ease-in; + + $quality_map: ( + 'positive': var(--color-green), + 'neutral': var(--color-white), + 'negative': var(--color-red), + ); + + @each $quality, $color-value in $quality_map { + &--#{$quality} { + background-color: $color-value; + transition: background-color var(--transition-time-fast) ease-in; + } + } + + &:hover { + background-color: var(--color-grey); + transition: background-color var(--transition-time-fast) ease-out; + + @each $quality, $color-value in $quality_map { + .PreferencesMenu__Quirks__QuirkList__quirk--#{$quality} { + background-color: hsl(from $color-value h s calc(l - 10)); + transition: background-color var(--transition-time-fast) ease-out; + } + } + } + } + } + } +} diff --git a/tgui/packages/tgui/styles/interfaces/Radio.scss b/tgui/packages/tgui/styles/interfaces/Radio.scss deleted file mode 100644 index 8d2a1370936..00000000000 --- a/tgui/packages/tgui/styles/interfaces/Radio.scss +++ /dev/null @@ -1,53 +0,0 @@ -/* Radio Channels */ -.radio { - color: #00a700; -} -.deptradio { - color: #ff00ff; -} -.comradio { - color: #5b8deb; -} -.syndradio { - color: #ac6667; -} -.coalitionradio { - color: #0091ce; -} -.centradio { - color: #7272a7; -} -.airadio { - color: #ec00ec; -} -.entradio { - color: #cfcfcf; -} -.hailradio { - color: #8b4cd8; -} -.shipradio { - color: #738465; -} - -.secradio { - color: #e21111; -} -.engradio { - color: #cc7b01; -} -.medradio { - color: #0f7e62; -} -.sciradio { - color: #c03bc0; -} -.supradio { - color: #c09141; -} -.srvradio { - color: #7fc732; -} -.expradio { - color: #ffeeb5; -} diff --git a/tgui/packages/tgui/styles/interfaces/RequestManager.scss b/tgui/packages/tgui/styles/interfaces/RequestManager.scss index 1003440243a..3780d07b0a0 100644 --- a/tgui/packages/tgui/styles/interfaces/RequestManager.scss +++ b/tgui/packages/tgui/styles/interfaces/RequestManager.scss @@ -3,100 +3,81 @@ * SPDX-License-Identifier: MIT */ -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss'; - -$color-prayer: colors.bg(colors.$purple) !default; -$color-centcom: colors.bg(colors.$yellow) !default; -$color-syndicate: colors.bg(colors.$red) !default; -$color-nuke: colors.bg(colors.$yellow) !default; -$color-fax: colors.bg(colors.$green) !default; -$color-music: colors.bg(colors.$teal) !default; -$color-muted: colors.bg(colors.$label) !default; -$color-header: colors.bg(colors.$label) !default; -$background-color: base.$color-bg-section !default; -$text-color: base.$color-fg !default; - .RequestManager__request_centcom, .RequestManager__request_nuke, .RequestManager__request_prayer, .RequestManager__request_syndicate { - margin-right: 0.5rem; + margin-right: var(--space-m); } .RequestManager__request_prayer { - color: $color-prayer; + color: var(--color-purple); } .RequestManager__request_centcom { - color: $color-centcom; + color: var(--color-yellow); } .RequestManager__request_syndicate { - color: $color-syndicate; + color: var(--color-red); } .RequestManager__request_nuke { - color: $color-nuke; + color: var(--color-orange); } .RequestManager__request_fax { - color: $color-fax; + color: var(--color-green); } .RequestManager__request_internet_sound { - color: $color-music; + color: var(--color-teal); } .RequestManager__header { line-height: 1.375rem; min-height: 1.375rem; - color: $color-muted; + padding: 0; + color: var(--color-label); white-space: break-spaces; - word-wrap: pre-wrap; vertical-align: baseline; - margin-bottom: 0; - padding-bottom: 0.1rem; + margin-bottom: var(--space-xs); } .RequestManager__headerText { - margin-right: 0.5rem; + margin-right: var(--space-m); font-size: 1rem; font-weight: bold; - color: $color-header; + color: var(--color-label); } .RequestManager__timestamp { - font-size: 0.75rem; -} - -.RequestManager__row:first-of-type { - margin-top: 0rem; + font-size: var(--space-l); } .RequestManager__row { - padding-top: 0.125rem; - padding-bottom: 0.125rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - margin-top: 0.75rem; + padding: var(--space-s) var(--space-m); + margin-top: var(--space-l); min-height: 2.75rem; -} -.RequestManager__row:hover { - background-color: rgba(0, 0, 0, 0.25); -} + &:first-of-type { + margin-top: 0; + } -.RequestManager__row:hover .RequestManager__controlsContainer { - opacity: 1; + &:hover { + background-color: hsl(from var(--color-hover) h s 0); + } + + &:hover .RequestManager__controlsContainer { + opacity: 1; + } } .RequestManager__controlsContainer { opacity: 0; position: absolute; - right: 3px; - top: 3px; + right: var(--space-s); + top: var(--space-s); } .RequestManager__row { @@ -104,13 +85,17 @@ $text-color: base.$color-fg !default; } .RequestManager__filterPanel { - margin: 0.5rem; - padding: 0.5rem; - background-color: functions.fake-alpha($background-color, base.$color-bg); - background-color: $background-color; - color: $text-color; -} + overflow: hidden; + margin: var(--space-m); + padding: var(--space-m); + background-color: var(--color-section); + color: var(--color-text); + border: var(--border-thickness-tiny) solid var(--color-border); + border-radius: var(--border-radius-medium); + box-shadow: var(--shadow-glow-medium) hsla(0, 0%, 0%, 0.5); + backdrop-filter: var(--blur-medium); -.RequestManager__filterPanel tr:not(:last-of-type) { - margin-bottom: 0.5rem; + tr:not(:last-of-type) { + margin-bottom: var(--space-m); + } } diff --git a/tgui/packages/tgui/styles/interfaces/Roulette.scss b/tgui/packages/tgui/styles/interfaces/Roulette.scss new file mode 100644 index 00000000000..72dfc49b5b6 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Roulette.scss @@ -0,0 +1,96 @@ +.Roulette__container { + display: flex; +} + +.Roulette__board-cell { + display: table-cell; + padding: 0; + margin: 0; + border: var(--border-thickness-tiny) solid var(--color-white); + vertical-align: bottom; +} + +.Roulette__board-cell-number { + width: 35px; +} + +.Roulette__board-cell-number--colspan-2 { + width: 71px; +} + +.Roulette__board-cell-number--colspan-4 { + width: 143px; +} + +.Roulette__board-button { + display: table-cell !important; + border: none !important; + width: inherit; + height: 40px; + padding: 0; + margin: 0; + text-align: center; + vertical-align: middle; +} + +.Roulette__board-button--rowspan-3 { + height: 122px; +} + +.Roulette__board-button-text { + text-align: center; + font-size: 16px; + font-weight: bold; +} + +.Roulette__lowertable { + margin-top: 8px; + border-collapse: collapse; + border: var(--border-thickness-tiny) solid var(--color-white); + border-spacing: 0; +} + +.Roulette__lowertable--cell { + border: var(--border-thickness-small) solid var(--color-white); + padding: 0px; + margin: 0px; +} + +.Roulette__lowertable--betscell { + vertical-align: top; +} + +.Roulette__lowertable--spinresult { + text-align: center; + font-size: 100px; + font-weight: bold; + vertical-align: middle; +} + +.Roulette__lowertable--spinresult-black { + background-color: var(--color-black); +} + +.Roulette__lowertable--spinresult-red { + background-color: var(--color-red); +} + +.Roulette__lowertable--spinresult-green { + background-color: var(--color-green); +} + +.Roulette__lowertable--spinbutton { + margin: 0 !important; + border: none !important; + font-size: 50px; + line-height: 60px !important; + text-align: center; + font-weight: bold; +} + +.Roulette__lowertable--header { + width: 1%; + text-align: center; + font-size: 16px; + font-weight: bold; +} diff --git a/tgui/packages/tgui/styles/interfaces/Safe.scss b/tgui/packages/tgui/styles/interfaces/Safe.scss new file mode 100644 index 00000000000..8e24d2c83a3 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Safe.scss @@ -0,0 +1,92 @@ +.Safe__engraving { + position: absolute; + width: 95%; + height: 96%; + left: 2.5%; + top: 2%; + border: var(--border-thickness-larger) outset hsl(217, 27%, 34%); + padding: var(--space-m); + text-align: center; +} + +.Safe__engraving-arrow { + color: var(--color-primary); +} + +.Safe__engraving-hinge { + content: ' '; + background-color: hsl(217, 27%, 15%); + width: 25px; + height: 40px; + position: absolute; + right: -15px; + margin-top: -20px; +} + +.Safe__dialer { + margin-bottom: 1.25rem; + .Button { + width: 80px; + } +} + +.Safe__dialer-right { + .Button { + i { + z-index: -100; + } + } +} + +.Safe__dialer-number { + color: hsl(0, 0%, 73.3%); + display: inline; + background-color: hsl(217, 27%, 15%); + font-size: 1.5rem; + font-weight: bold; + padding: 0 var(--space-m); +} + +.Safe__contents { + border: 10px solid hsl(217, 27%, 15%); + background-color: hsl(217, 27%, 10%); + height: calc(85% + 7.5px); + text-align: left; + padding: var(--space-m); +} + +.Safe__help { + position: absolute; + top: 73%; + left: 10px; + width: 50%; + + font-family: 'Comic Sans MS', cursive, sans-serif; + font-style: italic; + color: black; + box-shadow: 5px 5px hsl(0, 0%, 6.7%); + background-image: linear-gradient( + to bottom, + hsl(50, 20%, 58.8%) 0%, + hsl(50, 6%, 45.5%) 100% + ); + transform: rotate(-1deg); + + &:before { + content: ' '; + display: block; + width: 24px; + height: 40px; + background-image: linear-gradient( + to bottom, + transparent 0%, + hsl(0, 0%, 100%) 100% + ); + box-shadow: 1px 1px hsl(0, 0%, 6.7%); + opacity: 0.2; + position: absolute; + top: -30px; + left: calc(50% - 12px); + transform: rotate(-5deg); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/SlotMachine.scss b/tgui/packages/tgui/styles/interfaces/SlotMachine.scss new file mode 100644 index 00000000000..48583d4d982 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/SlotMachine.scss @@ -0,0 +1,186 @@ +.SlotMachine__Banner { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 60px; + font-size: 18px; + text-align: center; + text-shadow: + 2px 2px 6px #000, + 0 2px #000, + 0 -2px #000, + 2px 0 #000, + -2px 0 #000; + + background: linear-gradient(-45deg, #d16949, #ce3771, #229dca, #189175); + background-size: 400% 400%; + animation: SlotMachine__GradientMove 10s ease infinite; +} + +@keyframes SlotMachine__GradientMove { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +.SlotMachine__Banner--winning { + animation: SlotMachine__Winning 0.4s step-end infinite !important; +} + +@keyframes SlotMachine__Winning { + 0% { + color: #ff0; + background: #f00; + } + 50% { + color: #f00; + background: #ff0; + } + 100% { + color: #f00; + background: #ff0; + } +} + +.SlotMachine__BannerTitle { + font-size: 26px; + font-weight: bold; + font-family: 'Courier New', Courier, monospace; + white-space: pre; +} + +.SlotMachine__BannerTitle span { + animation: + SlotMachine__Depth1 1.2s ease-in-out alternate infinite, + SlotMachine__Depth2 0.8s ease-in-out alternate infinite; + animation-composition: replace, add; + position: relative; + display: inline-block; + padding: 0 0.075em; + @for $i from 1 through 14 { + &:nth-child(#{$i}) { + animation-delay: $i * -0.2s; + } + } +} + +@keyframes SlotMachine__Depth1 { + 0% { + transform: translatex(-0.2em) translatey(-0.1em); + } + 100% { + transform: translatex(0.2em) translatey(0.1em); + } +} + +@keyframes SlotMachine__Depth2 { + 0% { + transform: translatex(0.1em) translatey(-0.1em); + } + 100% { + transform: translatex(-0.1em) translatey(0.1em); + } +} + +.SlotMachine__Reels { + display: flex; + margin: 0 -3px; +} + +.SlotMachine__Reel { + position: relative; + flex: 1; + margin: 0 3px; + overflow: hidden; + height: 180px; + background: linear-gradient( + to bottom, + #888 0%, + #ccc 15%, + #eee 40%, + #ddd 60%, + #aaa 85%, + #666 100% + ); +} + +.SlotMachine__Reel::after { + position: absolute; + top: 58px; + left: 0; + bottom: 58px; + right: 0; + display: block; + content: ''; + border-top: 2px solid black; + border-bottom: 2px solid black; +} + +.SlotMachine__Reel:nth-child(1) .SlotMachine__IconStrip { + animation-delay: 0s; + animation-duration: 2.8s; +} + +.SlotMachine__Reel:nth-child(2) .SlotMachine__IconStrip { + animation-delay: 0.1s; + animation-duration: 3s; +} + +.SlotMachine__Reel:nth-child(3) .SlotMachine__IconStrip { + animation-delay: 0.2s; + animation-duration: 3.2s; +} + +.SlotMachine__Reel:nth-child(4) .SlotMachine__IconStrip { + animation-delay: 0.3s; + animation-duration: 3.4s; +} + +.SlotMachine__Reel:nth-child(5) .SlotMachine__IconStrip { + animation-delay: 0.4s; + animation-duration: 3.6s; +} + +.SlotMachine__IconStrip { + transform: translateY(calc(-60px * 27)); + // animation-duration: 3.5s; + text-align: center; +} + +.SlotMachine__IconStrip--spinning { + transform: translateY(0); + animation-name: SlotMachine__Spin; + animation-iteration-count: 1; + animation-fill-mode: forwards; + animation-timing-function: cubic-bezier(1, 1.26, 0.88, 0.96); +} + +.SlotMachine__Symbol { + height: 60px; + display: flex; + align-items: center; + justify-content: center; + + .slotmachines32x32 { + width: 32px; + height: 32px; + image-rendering: pixelated; + filter: drop-shadow(1px 1px 1px black); + } +} + +@keyframes SlotMachine__Spin { + 0% { + transform: translateY(0); + } + 100% { + transform: translateY(calc(-60px * 27)); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss b/tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss new file mode 100644 index 00000000000..fe7c2c5ae23 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss @@ -0,0 +1,3 @@ +.SpriteAuditor_EntryCell:nth-child(odd) { + background: hsla(0, 0%, 0%, 0.1); +} diff --git a/tgui/packages/tgui/styles/interfaces/Techweb.scss b/tgui/packages/tgui/styles/interfaces/Techweb.scss new file mode 100644 index 00000000000..4c1b1517d24 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Techweb.scss @@ -0,0 +1,68 @@ +.Techweb__NodeProgress { + margin-bottom: var(--space-xl); +} + +.Techweb__DesignIcon { + margin: 0 var(--space-s); +} + +.Techweb__OverviewNodes { + padding-top: var(--space-m); +} + +.Techweb__HeaderContent { + padding: var(--space-m); + background-color: var(--color-black); + border: var(--border-thickness-tiny) solid var(--color-primary); +} + +.Techweb__HeaderContent > * > :not(:last-child) { + margin-bottom: var(--space-m); +} + +.Techweb__HeaderSectionTabs { + margin-top: var(--space-l); + background-color: var(--color-black); + border: var(--border-thickness-tiny) solid var(--color-primary); + padding-left: var(--space-m); + padding-right: var(--space-m); +} + +.Techweb__HeaderTabTitle { + border-right: var(--border-thickness-tiny) solid var(--color-primary); + padding-right: var(--space-m); + margin-right: var(--space-m); + font-weight: bold; +} + +.Techweb__HeaderSectionTabs input { + background-color: hsla(0, 0%, 100%, 0.05); +} + +.Techweb__PointSummary { + list-style: none; + margin: var(--space-m) 0 0 var(--space-l); + padding: 0; +} + +.Techweb__SecProtocol { + color: var(--color-bad); + margin-left: var(--space-s); +} + +.Techweb__SecProtocol.engaged { + color: var(--color-good); +} + +.Techweb__DesignModal > :not(:last-child) { + margin-bottom: var(--space-m); +} + +.Techweb__LockedModal > :not(:last-child) { + margin-bottom: var(--space-m); +} + +.Techweb__ExperimentDiscount { + color: var(--color-label); + margin: var(--space-m) 0; +} diff --git a/tgui/packages/tgui/styles/interfaces/Trophycase.scss b/tgui/packages/tgui/styles/interfaces/Trophycase.scss new file mode 100644 index 00000000000..8b2972db4e5 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Trophycase.scss @@ -0,0 +1,5 @@ +.Trophycase-description { + word-break: break-word; + word-wrap: break-word; + font-style: italic; +} diff --git a/tgui/packages/tgui/styles/interfaces/Uplink.scss b/tgui/packages/tgui/styles/interfaces/Uplink.scss new file mode 100644 index 00000000000..17d5ea78aac --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Uplink.scss @@ -0,0 +1,103 @@ +$badGradient: linear-gradient( + to right, + hsl(0, 67%, 37%), + hsl(0, 43%, 28%), + hsl(0, 67%, 37%) +); +$normalGradient: linear-gradient( + to right, + hsl(30, 14%, 34%), + hsl(30, 20%, 19%), + hsl(30, 14%, 34%) +); +$goodGradient: linear-gradient( + to right, + hsl(210, 11%, 37%), + hsl(210, 14%, 17%), + hsl(210, 11%, 37%) +); +$veryGoodGradient: linear-gradient( + to right, + hsl(36, 38%, 44%), + hsl(36, 33%, 19%), + hsl(36, 38%, 44%) +); +$superGoodGradient: linear-gradient( + to right, + hsl(60, 39%, 45%), + hsl(60, 35%, 34%), + hsl(60, 39%, 45%) +); +$bestGradient: linear-gradient( + to right, + hsl(330, 34%, 45%), + hsl(330, 43%, 26%), + hsl(330, 34%, 45%) +); + +$_rep_map: ( + 'bad': $badGradient, + 'normal': $normalGradient, + 'good': $goodGradient, + 'very-good': $veryGoodGradient, + 'super-good': $superGoodGradient, + 'best': $bestGradient, +); + +@each $reputation-name, $gradient-value in $_rep_map { + .reputation-#{$reputation-name} { + background-image: $gradient-value !important; + } + + .reputation-#{$reputation-name}.Button { + background-position: 0 0; + transition: background-position var(--transition-time-fast); + + &:hover { + transition: background-position 0ms; + } + + &:active { + transition: background-position var(--transition-time-medium); + } + + &:hover, + &:active { + background-position: 50em 0; + } + } +} + +.UplinkObjective__Titlebar { + padding: var(--space-ml) var(--space-l) var(--space-m); + font-weight: bold; + border: var(--border-thickness-small) solid var(--color-black); + border-bottom: none; + border-top-left-radius: var(--border-radius-huge); + border-top-right-radius: var(--border-radius-huge); +} + +.UplinkObjective__EmptyObjective { + background-color: hsla(0, 0%, 0%, 0.4); + border: var(--border-thickness-small) solid var(--color-black); + padding: 1rem; + width: 100%; + height: 100%; + text-align: center; + vertical-align: center; +} + +.UplinkObjective__Content { + background-color: hsla(0, 0%, 0%, 0.4); + border: var(--border-thickness-small) solid var(--color-black); + border-top: none; + border-bottom: none; + padding: var(--space-l); +} + +.UplinkObjective__Footer { + background-color: rgba(0, 0, 0, 0.4); + border: var(--border-thickness-small) solid var(--color-black); + border-top: none; + padding: var(--space-m) 0 var(--space-l); +} diff --git a/tgui/packages/tgui/styles/layouts/Layout.scss b/tgui/packages/tgui/styles/layouts/Layout.scss index b66b2769f5e..3c71db27576 100644 --- a/tgui/packages/tgui/styles/layouts/Layout.scss +++ b/tgui/packages/tgui/styles/layouts/Layout.scss @@ -3,68 +3,22 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use '../base.scss'; -@use '../functions.scss' as *; +@use '../base'; +$background-color: base.$color-bg !default; $scrollbar-color-multiplier: 1 !default; -$luminance: luminance(base.$color-bg); -$scrollbar-base: color.scale( - base.$color-bg, - $lightness: -25% * $scrollbar-color-multiplier -); -$scrollbar-face: color.scale( - base.$color-bg, - $lightness: if($luminance > 0.05, 30%, 10%) * $scrollbar-color-multiplier -); -// Fancy scrollbar -html, -body { - scrollbar-color: $scrollbar-face $scrollbar-base; -} - -.Layout, -.Layout * { - // Fancy scrollbar - scrollbar-base-color: color.scale( - base.$color-bg, - $lightness: -25% * $scrollbar-color-multiplier - ); - scrollbar-face-color: color.scale( - base.$color-bg, - $lightness: 10% * $scrollbar-color-multiplier - ); - scrollbar-3dlight-color: color.scale( - base.$color-bg, - $lightness: 0% * $scrollbar-color-multiplier - ); - scrollbar-highlight-color: color.scale( - base.$color-bg, - $lightness: 0% * $scrollbar-color-multiplier - ); - scrollbar-track-color: color.scale( - base.$color-bg, - $lightness: -25% * $scrollbar-color-multiplier - ); - scrollbar-arrow-color: color.scale( - base.$color-bg, - $lightness: 50% * $scrollbar-color-multiplier - ); - scrollbar-shadow-color: color.scale( - base.$color-bg, - $lightness: 10% * $scrollbar-color-multiplier - ); +.Layout { + --color-base: #{$background-color}; + --base-gradient-spread: #{base.$color-bg-grad-spread}; + --scrollbar-color-multiplier: #{$scrollbar-color-multiplier}; } .Layout__content { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; overflow-x: hidden; overflow-y: hidden; + position: absolute; + inset: 0; } .Layout__content--scrollable { diff --git a/tgui/packages/tgui/styles/layouts/NtosHeader.scss b/tgui/packages/tgui/styles/layouts/NtosHeader.scss index 2a429051f56..3c71302b37e 100644 --- a/tgui/packages/tgui/styles/layouts/NtosHeader.scss +++ b/tgui/packages/tgui/styles/layouts/NtosHeader.scss @@ -18,3 +18,31 @@ margin-bottom: -0.5em; vertical-align: middle; } + +.alertIndicator { + font-weight: bold; + right: '0px'; + text-align: 'center'; + vertical-align: 'center'; + font-family: 'Courier New'; +} + +.alertBlink { + color: #ffffff; + animation: alertBlinkAnimation 1s infinite; +} + +@keyframes alertBlinkAnimation { + 0% { + color: #dddddd; + } + 49% { + color: #dddddd; + } + 50% { + color: #333333; + } + 100% { + color: #333333; + } +} diff --git a/tgui/packages/tgui/styles/layouts/NtosWindow.scss b/tgui/packages/tgui/styles/layouts/NtosWindow.scss index bed4abab53c..00159e3a965 100644 --- a/tgui/packages/tgui/styles/layouts/NtosWindow.scss +++ b/tgui/packages/tgui/styles/layouts/NtosWindow.scss @@ -3,7 +3,7 @@ * SPDX-License-Identifier: MIT */ -@use '../base.scss'; +@use '../base'; .NtosWindow__header { position: absolute; @@ -12,8 +12,8 @@ right: 0; height: 2em; line-height: 1.928em; - background-color: rgba(0, 0, 0, 0.5); - font-family: Consolas, monospace; + background-color: hsla(0, 0%, 0%, 0.5); + font-family: var(--font-family-mono); font-size: base.em(14px); user-select: none; -ms-user-select: none; @@ -21,6 +21,6 @@ .NtosWindow__content .Layout__content { margin-top: 2em; - font-family: Consolas, monospace; + font-family: var(--font-family-mono); font-size: base.em(14px); } diff --git a/tgui/packages/tgui/styles/layouts/TitleBar.scss b/tgui/packages/tgui/styles/layouts/TitleBar.scss index 1a26dd9e29e..b81fda74e3c 100644 --- a/tgui/packages/tgui/styles/layouts/TitleBar.scss +++ b/tgui/packages/tgui/styles/layouts/TitleBar.scss @@ -4,108 +4,100 @@ */ @use 'sass:color'; -@use '../base.scss'; -@use '../colors.scss'; +@use '../base'; +@use '../colors'; +@use '../functions.scss' as *; -$text-color: rgba(255, 255, 255, 0.75) !default; -$background-color: #363636 !default; -$shadow-color-core: #161616 !default; -$shadow-color: rgba(0, 0, 0, 0.1) !default; +$background-color: var(--titlebar-background) !default; +$text-color: var(--titlebar-text) !default; +$shadow-color-core: var(--titlebar-shadow-core) !default; +$scrollbar-color-multiplier: 1 !default; .TitleBar { - background-color: $background-color; - border-bottom: 1px solid $shadow-color-core; - box-shadow: 0 2px 2px $shadow-color; - box-shadow: 0 base.rem(2px) base.rem(2px) $shadow-color; + --titlebar-background: #{$background-color}; + --titlebar-text: #{$text-color}; + --titlebar-shadow-core: #{$shadow-color-core}; + --scrollbar-color-multiplier: #{$scrollbar-color-multiplier}; + user-select: none; - -ms-user-select: none; -} + position: fixed; + display: flex; + align-items: center; + width: vp(100vw); + height: base.rem(32px); + background-color: var(--titlebar-background); + border-bottom: var(--border-thickness-tiny) solid var(--titlebar-shadow-core); + box-shadow: 0px 0px base.em(6px) base.em(-1px) var(--titlebar-shadow-color); + z-index: 101; // More than Dimmer -.TitleBar__clickable { - color: color.change($text-color, $alpha: 0.5); - background-color: $background-color; - transition: - color 250ms ease-out, - background-color 250ms ease-out; + &__dragZone { + position: absolute; + inset: 0; + } - &:hover { - color: rgba(255, 255, 255, 1); - background-color: #cc0000; - transition: - color 0ms, - background-color 0ms; + &__statusIcon { + text-align: center; + font-size: base.rem(20px); + transition: color var(--transition-time-slow); + } + + &__title { + pointer-events: none; + display: inline-block; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: var(--titlebar-text); + font-size: base.rem(14px); + } + + &__buttons { + pointer-events: all; + overflow: hidden; + white-space: nowrap; + display: inline-block; + margin: 0 base.rem(9px); + z-index: 102; + } + + &__KitchenSink { + background-color: hsl( + from var(--color-green) h s calc(l - var(--adjust-hover)) + ); + color: var(--color-text-fixed-white); + text-align: center; + border-radius: 0; + + &:hover { + background-color: var(--color-green) !important; + } + } + + &__close { + cursor: var(--cursor-pointer); + opacity: 0.5; + pointer-events: all; + align-content: center; + text-align: center; + font-size: base.rem(16px); + height: 100%; + color: var(--color-text); + transition-property: background-color, opacity; + transition-duration: var(--transition-time-medium); + z-index: 102; + + &:hover { + opacity: 1; + background-color: var(--button-background-danger); + transition-duration: 0s; + } + } + + &__statusIcon, + &__close { + width: base.rem(45px); + min-width: base.rem(45px); + max-width: base.rem(45px); } } - -.TitleBar__title { - position: absolute; - display: inline-block; - top: 0; - left: 46px; - left: base.rem(46px); - color: $text-color; - font-size: 14px; - font-size: base.rem(14px); - line-height: 31px; - line-height: base.rem(31px); - white-space: nowrap; - pointer-events: none; -} - -.TitleBar__buttons { - pointer-events: initial; - display: inline-block; - width: 100%; - margin-left: 10px; -} - -.TitleBar__dragZone { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 32px; - height: base.rem(32px); -} - -.TitleBar__statusIcon { - position: absolute; - top: 0; - left: 12px; - left: base.rem(12px); - transition: color 0.5s; - font-size: 20px; - font-size: base.rem(20px); - line-height: 32px !important; - line-height: base.rem(32px) !important; -} - -.TitleBar__close { - position: absolute; - top: -1px; - right: 0; - width: 45px; - width: base.rem(45px); - height: 32px; - height: base.rem(32px); - font-size: 20px; - font-size: base.rem(20px); - line-height: 31px; - line-height: base.rem(31px); - text-align: center; -} - -.TitleBar__devBuildIndicator { - position: absolute; - top: 6px; - top: base.rem(6px); - right: 52px; - right: base.rem(52px); - min-width: 20px; - min-width: base.rem(20px); - padding: 2px 4px; - padding: base.rem(2px) base.rem(4px); - background-color: rgba(colors.$good, 0.75); - color: #fff; - text-align: center; -} diff --git a/tgui/packages/tgui/styles/layouts/Window.scss b/tgui/packages/tgui/styles/layouts/Window.scss index 232dd8396bb..6106ac87d8a 100644 --- a/tgui/packages/tgui/styles/layouts/Window.scss +++ b/tgui/packages/tgui/styles/layouts/Window.scss @@ -3,35 +3,25 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use '../base.scss'; -@use '../functions.scss' as *; +@use '../base'; + +$background-color: base.$color-bg !default; .Window { + --window-background: #{$background-color}; + --border-radius-unit: #{base.$border-radius}; + position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - color: base.$color-fg; - background-color: base.$color-bg; + inset: 0; + color: var(--color-text); + background-color: var(--color-base); background-image: linear-gradient( to bottom, - base.$color-bg-start 0%, - base.$color-bg-end 100% + var(--color-base-start) 0%, + var(--color-base-end) 100% ); } -.Window__titleBar { - position: fixed; - z-index: 1; - top: 0; - left: 0; - width: 100%; - height: 32px; - height: base.rem(32px); -} - // Everything after the title bar .Window__rest { position: fixed; @@ -44,11 +34,7 @@ .Window__contentPadding { margin: 0.5rem; - // IE8: Calc not supported - height: 100%; - // 0.01 is needed to make the scrollbar not appear - // due to rem rendering inaccuracies in IE11. - height: calc(100% - 1.01rem); + height: calc(100% - 1rem); } .Window__contentPadding:after { @@ -56,48 +42,41 @@ } .Layout__content--scrollable .Window__contentPadding:after { - display: block; content: ''; + display: block; height: 0.5rem; } .Window__dimmer { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - background-color: rgba(lighten(base.$color-bg, 30%), 0.25); pointer-events: none; + position: fixed; + inset: 0; + background-color: hsl(from var(--color-base) h s calc(l + 15) / 0.25); } .Window__resizeHandle__se { + cursor: var(--cursor-se-resize); position: fixed; bottom: 0; right: 0; - width: 20px; width: base.rem(20px); - height: 20px; height: base.rem(20px); - cursor: se-resize; } .Window__resizeHandle__s { + cursor: var(--cursor-s-resize); position: fixed; bottom: 0; left: 0; right: 0; - height: 6px; height: base.rem(6px); - cursor: s-resize; } .Window__resizeHandle__e { + cursor: var(--cursor-e-resize); position: fixed; top: 0; bottom: 0; right: 0; - width: 3px; width: base.rem(3px); - cursor: e-resize; } diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 5bcee3437c1..4f01038d289 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -4,58 +4,53 @@ */ @use 'sass:meta'; -@use './base.scss'; +@use 'base'; +@use '~tgui-core/styles'; // Core styles @include meta.load-css('./reset.scss'); +@include meta.load-css('./css-variables.scss'); -// Atomic classes -@include meta.load-css('./atomic/candystripe.scss'); -@include meta.load-css('./atomic/centered-image.scss'); -@include meta.load-css('./atomic/color.scss'); -@include meta.load-css('./atomic/debug-layout.scss'); -@include meta.load-css('./atomic/fit-text.scss'); -@include meta.load-css('./atomic/links.scss'); -@include meta.load-css('./atomic/outline.scss'); -@include meta.load-css('./atomic/text.scss'); - -// Components -@include meta.load-css('./components/BlockQuote.scss'); -@include meta.load-css('./components/Button.scss'); -@include meta.load-css('./components/ColorBox.scss'); -@include meta.load-css('./components/Dialog.scss'); -@include meta.load-css('./components/Dimmer.scss'); -@include meta.load-css('./components/Divider.scss'); -@include meta.load-css('./components/Dropdown.scss'); -@include meta.load-css('./components/Flex.scss'); -@include meta.load-css('./components/Icon.scss'); -@include meta.load-css('./components/Input.scss'); -@include meta.load-css('./components/Knob.scss'); -@include meta.load-css('./components/LabeledList.scss'); -@include meta.load-css('./components/MenuBar.scss'); -@include meta.load-css('./components/Modal.scss'); -@include meta.load-css('./components/NoticeBox.scss'); -@include meta.load-css('./components/NumberInput.scss'); -@include meta.load-css('./components/ProgressBar.scss'); -@include meta.load-css('./components/RoundGauge.scss'); -@include meta.load-css('./components/Section.scss'); -@include meta.load-css('./components/Slider.scss'); -@include meta.load-css('./components/Stack.scss'); -@include meta.load-css('./components/Table.scss'); -@include meta.load-css('./components/Tabs.scss'); -@include meta.load-css('./components/TextArea.scss'); -@include meta.load-css('./components/Tooltip.scss'); +// Tgui core bulk imports +@include meta.load-css('~tgui-core/styles/all-atomic.scss'); +@include meta.load-css('~tgui-core/styles/all-themes.scss'); // Interfaces +@include meta.load-css('./interfaces/Accounting.scss'); @include meta.load-css('./interfaces/AlertModal.scss'); +@include meta.load-css('./interfaces/Changelog.scss'); @include meta.load-css('./interfaces/CrewManifest.scss'); -@include meta.load-css('./interfaces/FactionSelect.scss'); -@include meta.load-css('./interfaces/HealthAnalyzer.scss'); +@include meta.load-css('./interfaces/Emojipedia.scss'); +@include meta.load-css('./interfaces/ExperimentConfigure.scss'); +@include meta.load-css('./interfaces/Fabricator.scss'); +@include meta.load-css('./interfaces/HellishRunes.scss'); +@include meta.load-css('./interfaces/HotKeysHelp.scss'); +@include meta.load-css('./interfaces/Hypertorus.scss'); +@include meta.load-css('./interfaces/IntegratedCircuit.scss'); +@include meta.load-css('./interfaces/LibraryAdmin.scss'); +@include meta.load-css('./interfaces/LibraryComputer.scss'); @include meta.load-css('./interfaces/ListInput.scss'); -@include meta.load-css('./interfaces/PersonalCrafting.scss'); +@include meta.load-css('./interfaces/Mecha.scss'); +@include meta.load-css('./interfaces/NtosMessenger.scss'); +@include meta.load-css('./interfaces/NtosNanopaint.scss'); +@include meta.load-css('./interfaces/NtosNotepad.scss'); +@include meta.load-css('./interfaces/NuclearBomb.scss'); +@include meta.load-css('./interfaces/Orbit.scss'); +@include meta.load-css('./interfaces/Paper.scss'); +@include meta.load-css('./interfaces/PreferencesMenu.scss'); @include meta.load-css('./interfaces/RequestManager.scss'); -@include meta.load-css('./interfaces/Radio.scss'); -@include meta.load-css('./interfaces/LoreConsole.scss'); +@include meta.load-css('./interfaces/Roulette.scss'); +@include meta.load-css('./interfaces/Safe.scss'); +@include meta.load-css('./interfaces/SlotMachine.scss'); +@include meta.load-css('./interfaces/SpriteAuditor.scss'); +@include meta.load-css('./interfaces/Techweb.scss'); +@include meta.load-css('./interfaces/Trophycase.scss'); +@include meta.load-css('./interfaces/Uplink.scss'); +@include meta.load-css('./interfaces/DetectiveBoard.scss'); +@include meta.load-css('./interfaces/ColorPicker.scss'); +@include meta.load-css('./interfaces/AnomalyTower.scss'); +@include meta.load-css('./interfaces/CivCargoHoldTerminal.scss'); +@include meta.load-css('./interfaces/EventLogger.scss'); // Layouts @include meta.load-css('./layouts/Layout.scss'); @@ -64,12 +59,12 @@ @include meta.load-css('./layouts/TitleBar.scss'); @include meta.load-css('./layouts/Window.scss'); -@include meta.load-css('highlight.js/scss/github-dark.scss'); +@include meta.load-css('~highlight.js/scss/a11y-dark.scss'); -// SCC Theme +// NT Theme .Layout__content { - background-image: url('../assets/bg-scc.svg'); - background-size: 70%; + background-image: url('tgui-core/assets/bg-nanotrasen.svg'); + background-size: 70% 70%; background-position: center; background-repeat: no-repeat; } diff --git a/tgui/packages/tgui/styles/main_original.scss b/tgui/packages/tgui/styles/main_original.scss new file mode 100644 index 00000000000..5bcee3437c1 --- /dev/null +++ b/tgui/packages/tgui/styles/main_original.scss @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +@use 'sass:meta'; +@use './base.scss'; + +// Core styles +@include meta.load-css('./reset.scss'); + +// Atomic classes +@include meta.load-css('./atomic/candystripe.scss'); +@include meta.load-css('./atomic/centered-image.scss'); +@include meta.load-css('./atomic/color.scss'); +@include meta.load-css('./atomic/debug-layout.scss'); +@include meta.load-css('./atomic/fit-text.scss'); +@include meta.load-css('./atomic/links.scss'); +@include meta.load-css('./atomic/outline.scss'); +@include meta.load-css('./atomic/text.scss'); + +// Components +@include meta.load-css('./components/BlockQuote.scss'); +@include meta.load-css('./components/Button.scss'); +@include meta.load-css('./components/ColorBox.scss'); +@include meta.load-css('./components/Dialog.scss'); +@include meta.load-css('./components/Dimmer.scss'); +@include meta.load-css('./components/Divider.scss'); +@include meta.load-css('./components/Dropdown.scss'); +@include meta.load-css('./components/Flex.scss'); +@include meta.load-css('./components/Icon.scss'); +@include meta.load-css('./components/Input.scss'); +@include meta.load-css('./components/Knob.scss'); +@include meta.load-css('./components/LabeledList.scss'); +@include meta.load-css('./components/MenuBar.scss'); +@include meta.load-css('./components/Modal.scss'); +@include meta.load-css('./components/NoticeBox.scss'); +@include meta.load-css('./components/NumberInput.scss'); +@include meta.load-css('./components/ProgressBar.scss'); +@include meta.load-css('./components/RoundGauge.scss'); +@include meta.load-css('./components/Section.scss'); +@include meta.load-css('./components/Slider.scss'); +@include meta.load-css('./components/Stack.scss'); +@include meta.load-css('./components/Table.scss'); +@include meta.load-css('./components/Tabs.scss'); +@include meta.load-css('./components/TextArea.scss'); +@include meta.load-css('./components/Tooltip.scss'); + +// Interfaces +@include meta.load-css('./interfaces/AlertModal.scss'); +@include meta.load-css('./interfaces/CrewManifest.scss'); +@include meta.load-css('./interfaces/FactionSelect.scss'); +@include meta.load-css('./interfaces/HealthAnalyzer.scss'); +@include meta.load-css('./interfaces/ListInput.scss'); +@include meta.load-css('./interfaces/PersonalCrafting.scss'); +@include meta.load-css('./interfaces/RequestManager.scss'); +@include meta.load-css('./interfaces/Radio.scss'); +@include meta.load-css('./interfaces/LoreConsole.scss'); + +// Layouts +@include meta.load-css('./layouts/Layout.scss'); +@include meta.load-css('./layouts/NtosHeader.scss'); +@include meta.load-css('./layouts/NtosWindow.scss'); +@include meta.load-css('./layouts/TitleBar.scss'); +@include meta.load-css('./layouts/Window.scss'); + +@include meta.load-css('highlight.js/scss/github-dark.scss'); + +// SCC Theme +.Layout__content { + background-image: url('../assets/bg-scc.svg'); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} + +// A default, in case someone uses the vp() function outside of a +:root { + --scaling-amount: 1; +} diff --git a/tgui/packages/tgui/styles/reset.scss b/tgui/packages/tgui/styles/reset.scss index e7fff7f936d..fa028f7a430 100644 --- a/tgui/packages/tgui/styles/reset.scss +++ b/tgui/packages/tgui/styles/reset.scss @@ -3,24 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use './base.scss'; +@use 'base'; html, body { box-sizing: border-box; height: 100%; margin: 0; - font-size: base.$font-size; + font-size: var(--font-size, 12px); + color: var(--color-text, hsl(0, 0%, 100%)); + scrollbar-color: var(--color-scrollbar-thumb) var(--color-scrollbar-base); } html { + cursor: var(--cursor-default, default); // Reset the cursor. overflow: hidden; - cursor: default; // Reset the cursor. } body { overflow: auto; - font-family: Verdana, Geneva, sans-serif; + font-family: var(--font-family, Verdana, Geneva, sans-serif); } *, @@ -33,27 +35,23 @@ body { h1, h2, h3, h4, h5, h6 { display: block; margin: 0; - padding: 6px 0; - padding: 0.5rem 0; + padding: var(--space-m, 6px) 0; + padding: var(--space-m, 0.5rem) 0; } h1 { - font-size: 18px; font-size: 1.5rem; } h2 { - font-size: 16px; font-size: 1.333rem; } h3 { - font-size: 14px; font-size: 1.167rem; } h4 { - font-size: 12px; font-size: 1rem; } diff --git a/tgui/packages/tgui/styles/themes/abductor.scss b/tgui/packages/tgui/styles/themes/abductor.scss index 39dac5773c0..3989dcc029c 100644 --- a/tgui/packages/tgui/styles/themes/abductor.scss +++ b/tgui/packages/tgui/styles/themes/abductor.scss @@ -3,64 +3,27 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #ad2350, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #2a314a, - $color-bg-grad-spread: 6%, - $border-radius: 2px -); - .theme-abductor { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #465899, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #a82d55) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #a82d55) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #9e1b46) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #404b6e; + --input-border-color-focus: #404b6e; + --number-input-border-color: #404b6e; + --number-input-border-color-active: #404b6e; + --notice-box-background: #a82d55; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #a82d55; + --titlebar-background: #9e1b46; + --color-base: #2a314a; + --color-primary: #ad2350; + --base-gradient-spread: 6; + --border-radius-unit: 2px; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/admin.scss b/tgui/packages/tgui/styles/themes/admin.scss index 75399ee04a5..43366c65b98 100644 --- a/tgui/packages/tgui/styles/themes/admin.scss +++ b/tgui/packages/tgui/styles/themes/admin.scss @@ -3,27 +3,13 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #1596b6, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #29333a, - $color-bg-grad-spread: 6%, - $border-radius: 2px -); - .theme-admin { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); + --color-base: #29333a; + --color-primary: #1596b6; + --base-gradient-spread: 6; + --border-radius-unit: 2px; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); + .Layout__content { background-image: url('../../assets/bg-admin.svg'); diff --git a/tgui/packages/tgui/styles/themes/cardtable.scss b/tgui/packages/tgui/styles/themes/cardtable.scss index e5047e2e2f0..4f402cc17ba 100644 --- a/tgui/packages/tgui/styles/themes/cardtable.scss +++ b/tgui/packages/tgui/styles/themes/cardtable.scss @@ -3,53 +3,24 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #000000, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #117039, - $color-bg-grad-spread: 0%, - $border-radius: 0 -); - +@use '../base.scss'; //Made for the roulette table, probably requires a bunch of manual hacks to work for anything else .theme-cardtable { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #117039, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #fff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #381608) - ); + --button-background-default: #117039; + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --number-input-border-color: #fff; + --number-input-border-color-active: #fff; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #117039; + --titlebar-background: #381608; + --color-base: #117039; + --color-primary: #000000; + --base-gradient-spread: 0; + --border-radius-unit: 0; + --section-background: rgba(0, 0, 0, 0.33); .Button { border: base.em(2px) solid #fff; diff --git a/tgui/packages/tgui/styles/themes/hackerman.scss b/tgui/packages/tgui/styles/themes/hackerman.scss index 51befcf1b36..3422a47b2bb 100644 --- a/tgui/packages/tgui/styles/themes/hackerman.scss +++ b/tgui/packages/tgui/styles/themes/hackerman.scss @@ -3,54 +3,20 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #00ff00, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #121b12, - $color-bg-grad-spread: 0% -); - +@use '../base.scss'; .theme-hackerman { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #4a6a4a, - 'color-selected': #00ff00 - ) - ); - @include meta.load-css( - '../components/Tabs.scss', - $with: ( - 'color-default': colors.$primary, - 'tab-color-selected': #00ff003f, - 'text-color': #e7e7e7 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': colors.$primary) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #223d22) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #4a6a4a; + --button-background-selected: #00ff00; + --tab-background-selected: #00ff003f; + --tab-color: #e7e7e7; + --input-border-color: var(--color-primary); + --input-border-color-focus: var(--color-primary); + --titlebar-background: #223d22; + --color-base: #121b12; + --color-primary: #00ff00; + --base-gradient-spread: 0; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/hammertail.scss b/tgui/packages/tgui/styles/themes/hammertail.scss index 1f8c66ddd9a..d19a5d6d250 100644 --- a/tgui/packages/tgui/styles/themes/hammertail.scss +++ b/tgui/packages/tgui/styles/themes/hammertail.scss @@ -3,63 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #397439, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #550202, - $color-bg-grad-spread: 6% -); - .theme-hammertail { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #910101) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #4a0202) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #cbd600) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #87ce87; + --input-border-color-focus: #87ce87; + --number-input-border-color: #87ce87; + --number-input-border-color-active: #87ce87; + --notice-box-background: #910101; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #4a0202; + --titlebar-background: #cbd600; + --color-base: #550202; + --color-primary: #397439; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-hammertail.svg'); diff --git a/tgui/packages/tgui/styles/themes/hephaestus.scss b/tgui/packages/tgui/styles/themes/hephaestus.scss index 6e8c12e3a60..5748557cc63 100644 --- a/tgui/packages/tgui/styles/themes/hephaestus.scss +++ b/tgui/packages/tgui/styles/themes/hephaestus.scss @@ -1,61 +1,29 @@ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #db6700, - $bad: #991100, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #192616, - $color-bg-grad-spread: 6% -); - .theme-hephaestus { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); + --color-base: #192616; + --color-primary: #db6700; + --color-red: #991100; + --color-bad: #991100; + --base-gradient-spread: 6; - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #db6700, - 'color-disabled': #a54a00, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #991100 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #db6700) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #8c470d) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #c09524) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #c09524) - ); + --button-background-default: #db6700; + --button-background-disabled: #a54a00; + --button-background-selected: #77aa00; + --button-background-caution: #be6209; + --button-background-danger: #991100; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #263e23) - ); + --input-border-color: #db6700; + --input-border-color-focus: #db6700; + --number-input-border-color: #c09524; + --number-input-border-color-active: #c09524; + + --notice-box-background: #8c470d; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #db6700; + --section-background: rgba(0, 0, 0, 0.33); + --section-separator-color: #db6700; + --tooltip-background: #c09524; + --titlebar-background: #263e23; .Layout__content { background-image: url('../../assets/bg-heph.svg'); diff --git a/tgui/packages/tgui/styles/themes/idris.scss b/tgui/packages/tgui/styles/themes/idris.scss index 09ed2971f69..11ec33b2f3b 100644 --- a/tgui/packages/tgui/styles/themes/idris.scss +++ b/tgui/packages/tgui/styles/themes/idris.scss @@ -1,61 +1,26 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use '../colors.scss' with ( - $primary: #ffffff, - $bad: #ad2727, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #274646, - $color-bg-grad-spread: 6% -); .theme-idris { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #297676, - 'color-disabled': #363636, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #ad2727 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #284d4d) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #284d4d) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #284d4d) - ); + --button-background-default: #297676; + --button-background-disabled: #363636; + --button-background-selected: #66ddff; + --button-background-caution: #be6209; + --button-background-danger: #ad2727; + --input-border-color: #ffffff; + --input-border-color-focus: #ffffff; + --number-input-border-color: #ffffff; + --number-input-border-color-active: #ffffff; + --notice-box-background: #284d4d; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #297676; + --tooltip-background: #284d4d; + --titlebar-background: #284d4d; + --color-base: #274646; + --color-primary: #ffffff; + --color-bad: #ad2727; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-idris.svg'); diff --git a/tgui/packages/tgui/styles/themes/malfunction.scss b/tgui/packages/tgui/styles/themes/malfunction.scss index d32113ba5e6..84eb16beae0 100644 --- a/tgui/packages/tgui/styles/themes/malfunction.scss +++ b/tgui/packages/tgui/styles/themes/malfunction.scss @@ -3,63 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #910101, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #1b3443, - $color-bg-grad-spread: 6% -); - .theme-malfunction { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #1e5881, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #910101) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #1a3f57) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #910101) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #235577) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #1a3f57) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #1e5881; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #910101; + --input-border-color-focus: #910101; + --number-input-border-color: #910101; + --number-input-border-color-active: #910101; + --notice-box-background: #1a3f57; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #235577; + --titlebar-background: #1a3f57; + --color-base: #1b3443; + --color-primary: #910101; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/nanotrasen.scss b/tgui/packages/tgui/styles/themes/nanotrasen.scss index c86e90b8f01..a0243db3ef0 100644 --- a/tgui/packages/tgui/styles/themes/nanotrasen.scss +++ b/tgui/packages/tgui/styles/themes/nanotrasen.scss @@ -1,61 +1,26 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use '../colors.scss' with ( - $primary: #ffffff, - $bad: #ad2727, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #092437, - $color-bg-grad-spread: 6% -); .theme-nanotrasen { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #093452, - 'color-disabled': #363636, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #ad2727 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #06243a) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #182935) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #051520) - ); + --button-background-default: #295482; + --button-background-disabled: #363636; + --button-background-selected: #88ccff; + --button-background-caution: #be6209; + --button-background-danger: #ad2727; + --input-border-color: #ffffff; + --input-border-color-focus: #ffffff; + --number-input-border-color: #ffffff; + --number-input-border-color-active: #ffffff; + --notice-box-background: #06243a; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #093452; + --tooltip-background: #182935; + --titlebar-background: #051520; + --color-base: #092437; + --color-primary: #ffffff; + --color-bad: #ad2727; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-nanotrasen.svg'); diff --git a/tgui/packages/tgui/styles/themes/neutral.scss b/tgui/packages/tgui/styles/themes/neutral.scss index e8ed3ca7da9..229200161eb 100644 --- a/tgui/packages/tgui/styles/themes/neutral.scss +++ b/tgui/packages/tgui/styles/themes/neutral.scss @@ -4,45 +4,19 @@ */ @use 'sass:color'; -@use 'sass:meta'; $neutral: #ffb300; -@use '../colors.scss' with ( - $primary: $neutral, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: color.scale($neutral, $lightness: -40%), - $color-bg-grad-spread: 6% -); - .theme-neutral { - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': color.scale($neutral, $lightness: -30%), - 'color-transparent-text': color.scale($neutral, $lightness: 30%) - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $neutral, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($neutral, $lightness: -25%)) - ); + --button-background-default: #{color.scale($neutral, $lightness: -30%)}; + --button-color-transparent: #{color.scale($neutral, $lightness: 30%)}; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$neutral}; + --titlebar-background: #{color.scale($neutral, $lightness: -25%)}; + --color-base: #{color.scale($neutral, $lightness: -40%)}; + --color-primary: #{$neutral}; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-neutral.svg'); diff --git a/tgui/packages/tgui/styles/themes/ntOS95.scss b/tgui/packages/tgui/styles/themes/ntOS95.scss index 5d418f23d2c..851b1bb0516 100644 --- a/tgui/packages/tgui/styles/themes/ntOS95.scss +++ b/tgui/packages/tgui/styles/themes/ntOS95.scss @@ -4,60 +4,31 @@ */ @use 'sass:color'; -@use 'sass:meta'; +@use '../base.scss'; $light-gray: #c3c3c3; $dark-gray: #858585; $scrollbar-color-multiplier: 1; -@use '../colors.scss' with ( - $primary: #000000, - $good: #007c11, - $average: #f0ec11, - $bad: #db2828, - $label: #000000 -); -@use '../base.scss' with ( - $color-bg: #008081, - $color-bg-grad-spread: 0%, - $border-radius: 0 -); - .theme-ntOS95 { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #e8e4c9, - 'color-disabled': #363636, - 'color-selected': #007c11, - 'color-caution': #be6209, - 'color-danger': #9d0808 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(0, 0, 0, 0.4)) - ); - - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #ecee9e) - ); - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #000080) - ); + --button-background-default: #e8e4c9; + --button-background-disabled: #363636; + --button-background-selected: #007c11; + --button-background-caution: #be6209; + --button-background-danger: #9d0808; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #e8e4c9; + --section-background: rgba(0, 0, 0, 0.4); + --tooltip-background: #ecee9e; + --titlebar-background: #000080; + --color-base: #008081; + --color-primary: #000000; + --color-good: #007c11; + --color-average: #f0ec11; + --color-bad: #db2828; + --color-label: #000000; + --base-gradient-spread: 0; + --border-radius-unit: 0; .Button { color: #161613; diff --git a/tgui/packages/tgui/styles/themes/ntos.scss b/tgui/packages/tgui/styles/themes/ntos.scss index 8b102b47778..f9a6b95407d 100644 --- a/tgui/packages/tgui/styles/themes/ntos.scss +++ b/tgui/packages/tgui/styles/themes/ntos.scss @@ -4,41 +4,16 @@ */ @use 'sass:color'; -@use 'sass:meta'; $nanotrasen: #384e68; -@use '../colors.scss' with ( - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: color.scale($nanotrasen, $lightness: -45%) -); - .theme-ntos { - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': $nanotrasen, - 'color-transparent-text': rgba(227, 240, 255, 0.75) - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $nanotrasen, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css('../components/Section.scss'); + --button-background-default: #{$nanotrasen}; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$nanotrasen}; + --titlebar-background: #{color.scale($nanotrasen, $lightness: -25%)}; + --color-base: #{color.scale($nanotrasen, $lightness: -45%)}; + --section-background: rgba(0, 0, 0, 0.33); - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($nanotrasen, $lightness: -25%)) - ); } diff --git a/tgui/packages/tgui/styles/themes/ntos_cat.scss b/tgui/packages/tgui/styles/themes/ntos_cat.scss index 90affabc929..577c3e0cadf 100644 --- a/tgui/packages/tgui/styles/themes/ntos_cat.scss +++ b/tgui/packages/tgui/styles/themes/ntos_cat.scss @@ -4,7 +4,7 @@ */ @use 'sass:color'; -@use 'sass:meta'; +@use '../base.scss'; //@use 'sass:map'; //palette @@ -17,56 +17,22 @@ $light-gray: #c3c3c3; $dark-gray: #858585; $scrollbar-color-multiplier: 0.5; -@use '../colors.scss' with ( - $primary: black, - $label: rgb(255, 132, 153), - $good: pink, - - $bad: red, - // $fg-map-keys: (), - // $bg-map-keys: (), -); - -@use '../base.scss' with ( - $color-bg: orange, - $color-bg-grad-spread: 12% //$border-radius: 0, -); - .theme-ntos_cat { - // Atomic classes - @include meta.load-css('../atomic/color.scss', $with: ()); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': pink, - 'color-transparent-text': rgba(227, 240, 255, 0.75), - 'color-disabled': #363636, - 'color-selected': #465899, - 'color-caution': #be6209 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('color-default-fill': rgb(255, 132, 153, 0.75)) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(124, 62, 34, 0.75)) - ); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': rgba(255, 153, 0, 0.75)) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': rgb(255, 132, 153, 0.75)) - ); + --button-background-default: pink; + --button-background-disabled: #363636; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-fill: rgb(255, 132, 153, 0.75); + --section-background: rgba(124, 62, 34, 0.75); + --tooltip-background: rgba(255, 153, 0, 0.75); + --titlebar-background: rgb(255, 132, 153, 0.75); + --color-base: orange; + --color-primary: black; + --color-good: pink; + --color-bad: red; + --color-label: rgb(255, 132, 153); + --base-gradient-spread: 12; .Section { color: black; diff --git a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss index b22ad60fc3f..4d4f08c2df1 100644 --- a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss +++ b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss @@ -4,41 +4,16 @@ */ @use 'sass:color'; -@use 'sass:meta'; $nanotrasen: #2c2c2c; -@use '../colors.scss' with ( - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: color.scale($nanotrasen, $lightness: -45%) -); - .theme-ntos_darkmode { - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': $nanotrasen, - 'color-transparent-text': rgba(227, 240, 255, 0.75) - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $nanotrasen, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css('../components/Section.scss'); + --button-background-default: #{$nanotrasen}; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$nanotrasen}; + --titlebar-background: #{color.scale($nanotrasen, $lightness: -25%)}; + --color-base: #{color.scale($nanotrasen, $lightness: -45%)}; + --section-background: rgba(0, 0, 0, 0.33); - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($nanotrasen, $lightness: -25%)) - ); } diff --git a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss index 9cf1a647b77..b485c80eebf 100644 --- a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss +++ b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss @@ -3,49 +3,19 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - $nanotrasen: #ffffff; -@use '../colors.scss' with ( - $primary: #000000, - $label: #000000 -); -@use '../base.scss' with ( - $color-bg: white -); - .theme-ntos_lightmode { - @include meta.load-css('../atomic/color.scss', $with: ()); - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ('color-default': $nanotrasen) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $nanotrasen, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(119, 119, 119, 0.4)) - ); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': white) - ); + --button-background-default: #{$nanotrasen}; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$nanotrasen}; + --section-background: rgba(119, 119, 119, 0.4); + --tooltip-background: white; + --titlebar-background: gray; + --color-base: white; + --color-primary: #000000; + --color-label: #000000; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': gray) - ); .Button { color: #161613; } diff --git a/tgui/packages/tgui/styles/themes/ntos_spooky.scss b/tgui/packages/tgui/styles/themes/ntos_spooky.scss index 14746421856..9f470f8f681 100644 --- a/tgui/packages/tgui/styles/themes/ntos_spooky.scss +++ b/tgui/packages/tgui/styles/themes/ntos_spooky.scss @@ -1,67 +1,26 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use 'sass:map'; -@use '../colors.scss' with ( - $primary: #3f021a, - $good: #e62626, - $bad: #970934 -); -@use '../base.scss' with ( - $color-bg: #240101, - $color-bg-grad-spread: 12% -); .theme-ntos_spooky { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #7e0322, - 'color-disabled': #363636, - 'color-selected': #610a0a, - 'color-caution': #1416a3, - 'color-danger': #5c1e80 - ) - ); - @include meta.load-css( - '../components/Dimmer.scss', - $with: ('background-dimness': 0.45) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #473a37) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #740707) - ); - @include meta.load-css('../components/NumberInput.scss'); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css('../components/Table.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #000000) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': rgba(190, 0, 0, 0.75), - 'background-color': rgba(34, 1, 1, 0.5) - ) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #6b0808) - ); + --button-background-default: #7e0322; + --button-background-disabled: #363636; + --button-background-selected: #610a0a; + --button-background-caution: #1416a3; + --button-background-danger: #5c1e80; + --input-border-color: #473a37; + --input-border-color-focus: #473a37; + --notice-box-background: #740707; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(34, 1, 1, 0.5); + --progress-bar-fill: rgba(190, 0, 0, 0.75); + --tooltip-background: #000000; + --dimmer-background: rgba(0, 0, 0, 0.45); + --titlebar-background: #6b0808; + --color-base: #240101; + --color-primary: #3f021a; + --color-good: #e62626; + --color-bad: #970934; + --base-gradient-spread: 12; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-spookycomp-compressed.svg'); diff --git a/tgui/packages/tgui/styles/themes/ntos_synth.scss b/tgui/packages/tgui/styles/themes/ntos_synth.scss index 242d4b0d04b..6a28d4e59f8 100644 --- a/tgui/packages/tgui/styles/themes/ntos_synth.scss +++ b/tgui/packages/tgui/styles/themes/ntos_synth.scss @@ -3,9 +3,8 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; -//@use 'sass:map'; +@use '../base.scss'; + //palette $cyan: #5edba5; @@ -13,54 +12,21 @@ $pink: #ed12f5; $orange: #ff9900; $purple: #463191; -@use '../colors.scss' with ( - $primary: $pink, - $label: $orange, - $good: $cyan, - // $fg-map-keys: (), - // $bg-map-keys: (), -); - -@use '../base.scss' with ( - $color-bg: $purple, - $color-bg-grad-spread: 12% -); - .theme-ntos_synth { - // Atomic classes - @include meta.load-css('../atomic/color.scss', $with: ()); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': $cyan, - 'color-transparent-text': rgba(227, 240, 255, 0.75), - 'color-disabled': #363636, - 'color-selected': #465899, - 'color-caution': #be6209 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('color-default-fill': rgba(237, 18, 245, 0.75)) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(0, 0, 0, 0.3)) - ); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': rgba(255, 153, 0, 0.75)) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': rgba(3, 100, 117, 0.75)) - ); + --button-background-default: #{$cyan}; + --button-background-disabled: #363636; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-fill: rgba(237, 18, 245, 0.75); + --section-background: rgba(0, 0, 0, 0.3); + --tooltip-background: rgba(255, 153, 0, 0.75); + --titlebar-background: rgba(3, 100, 117, 0.75); + --color-base: #{$purple}; + --color-primary: #{$pink}; + --color-good: #{$cyan}; + --color-label: #{$orange}; + --base-gradient-spread: 12; .Section { color: $cyan; diff --git a/tgui/packages/tgui/styles/themes/ntos_terminal.scss b/tgui/packages/tgui/styles/themes/ntos_terminal.scss index b5a0ad3c82c..7afdbfea5cc 100644 --- a/tgui/packages/tgui/styles/themes/ntos_terminal.scss +++ b/tgui/packages/tgui/styles/themes/ntos_terminal.scss @@ -3,55 +3,21 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #24e87e, - $label: #24e87e, - $good: rgba(36, 232, 127, 0.5), - // $fg-map-keys: (), - // $bg-map-keys: (), -); -@use '../base.scss' with ( - $color-bg: #121b12, - $color-bg-grad-spread: 0% -); - .theme-ntos_terminal { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': rgba(0, 0, 0, 0), - 'color-disabled': #4a6a4a, - 'color-selected': rgba(36, 232, 127, 0.25) - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': colors.$primary) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'background-color': rgba(0, 0, 0, 0.5), - 'color-default-fill': rgba(36, 232, 127, 0.5) - ) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': rgba(0, 97, 0, 0.25)) - ); + --button-background-default: rgba(0, 0, 0, 0); + --button-background-disabled: #4a6a4a; + --button-background-selected: rgba(36, 232, 127, 0.25); + --input-border-color: var(--color-primary); + --input-border-color-focus: var(--color-primary); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: rgba(36, 232, 127, 0.5); + --titlebar-background: rgba(0, 97, 0, 0.25); + --color-base: #121b12; + --color-primary: #24e87e; + --color-good: rgba(36, 232, 127, 0.5); + --color-label: #24e87e; + --base-gradient-spread: 0; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { //background-image: none; diff --git a/tgui/packages/tgui/styles/themes/paper.scss b/tgui/packages/tgui/styles/themes/paper.scss index 2f9fa6e16f2..80d08c0e237 100644 --- a/tgui/packages/tgui/styles/themes/paper.scss +++ b/tgui/packages/tgui/styles/themes/paper.scss @@ -3,64 +3,27 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #ffffff, - $bg-lightness: 25%, - $fg-lightness: -10%, - // Commenting out color maps will adjust all colors based on the lightness - // settings above, but will add extra 10KB to the theme. - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-fg: #000000, - $color-bg: #dfdfdf, - $color-bg-grad-spread: 0% -); - +@use '../base.scss'; $font-size: 24px; // A fat warning to anyone who wants to use this: this only half works. // It was made almost purely for the nuke ui, and requires a good amount of manual hacks to get it working as intended. .theme-paper { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css('../components/Tabs.scss'); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(0, 0, 0, 0.1)) - ); - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #e8e4c9, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00, - 'color-transparent-text': rgba(0, 0, 0, 0.5) - ) - ); - - // Layouts - @include meta.load-css( - '../layouts/Layout.scss', - $with: ('scrollbar-color-multiplier': -1) - ); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ( - 'text-color': rgba(0, 0, 0, 0.75), - 'background-color': base.$color-bg, - 'shadow-color-core': rgba(0, 0, 0, 0.25) - ) - ); + --scrollbar-color-multiplier: -1; + --button-background-default: #e8e4c9; + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --button-color-transparent: rgba(0, 0, 0, 0.5); + --section-background: rgba(0, 0, 0, 0.1); + --titlebar-background: var(--color-base); + --titlebar-text: rgba(0, 0, 0, 0.75); + --titlebar-shadow-core: rgba(0, 0, 0, 0.25); + --color-fg: #000000; + --color-base: #dfdfdf; + --color-primary: #ffffff; + --base-gradient-spread: 0; .PaperInput { position: relative; @@ -115,7 +78,7 @@ $font-size: 24px; .Window { background-image: none; - color: base.$color-fg; + color: var(--color-fg); } .paper-text { diff --git a/tgui/packages/tgui/styles/themes/retro.scss b/tgui/packages/tgui/styles/themes/retro.scss index 9e08c8b9cae..f3878fc3bbf 100644 --- a/tgui/packages/tgui/styles/themes/retro.scss +++ b/tgui/packages/tgui/styles/themes/retro.scss @@ -3,50 +3,23 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #000000, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #e8e4c9, - $color-bg-grad-spread: 0%, - $border-radius: 0 -); - +@use '../base.scss'; // A fat warning to anyone who wants to use this: this only half works. // It was made almost purely for the nuke ui, and requires a good amount of manual hacks to get it working as intended. .theme-retro { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #e8e4c9, - 'color-disabled': #505046, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #585337) - ); + --button-background-default: #c8b4a9; + --button-background-disabled: #505046; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #e8e4c9; + --titlebar-background: #585337; + --color-base: #a89469; + --color-primary: #000000; + --base-gradient-spread: 0; + --border-radius-unit: 0; + --section-background: rgba(0, 0, 0, 0.33); .Button { font-family: monospace; @@ -59,10 +32,10 @@ color: #c5c5c2; font-family: monospace; &:hover { - color: #ffffff; + color: #aaaaaa; } &:focus { - color: #ffffff; + color: #aaaaaa; } } diff --git a/tgui/packages/tgui/styles/themes/spookyconsole.scss b/tgui/packages/tgui/styles/themes/spookyconsole.scss index 07fd5b4dbe3..f0cb90a28a7 100644 --- a/tgui/packages/tgui/styles/themes/spookyconsole.scss +++ b/tgui/packages/tgui/styles/themes/spookyconsole.scss @@ -1,71 +1,23 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use 'sass:map'; - -@use '../colors.scss' with ( - $primary: #3f021a, - $good: #010005, - $bad: #970934, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #240101, - $color-bg-grad-spread: 12% -); - -$updated-bg-map: colors.$bg-map !default; - -$updated-bg-map: map.set($updated-bg-map, 'good', colors.$good); -$updated-bg-map: map.set($updated-bg-map, 'bad', colors.$bad); .theme-spookyconsole { - // Atomic classes - @include meta.load-css( - '../atomic/color.scss', - $with: ('bg-map': $updated-bg-map) - ); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #7e0322, - 'color-disabled': #363636, - 'color-selected': #610a0a, - 'color-caution': #1416a3, - 'color-danger': #5c1e80, - 'bg-map': $updated-bg-map - ) - ); - @include meta.load-css( - '../components/Dimmer.scss', - $with: ('background-dimness': 0.45) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #473a37) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #740707) - ); - @include meta.load-css('../components/NumberInput.scss'); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css('../components/Table.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #000000) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #6b0808) - ); + --button-background-default: #7e0322; + --button-background-disabled: #363636; + --button-background-selected: #610a0a; + --button-background-caution: #1416a3; + --button-background-danger: #5c1e80; + --input-border-color: #473a37; + --input-border-color-focus: #473a37; + --notice-box-background: #740707; + --notice-box-color: var(--color-text-fixed-white); + --tooltip-background: #000000; + --dimmer-background: rgba(0, 0, 0, 0.45); + --titlebar-background: #6b0808; + --color-base: #240101; + --color-primary: #3f021a; + --color-good: #010005; + --color-bad: #970934; + --base-gradient-spread: 12; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-spookycomp-compressed.svg'); diff --git a/tgui/packages/tgui/styles/themes/syndicate.scss b/tgui/packages/tgui/styles/themes/syndicate.scss index 4a547edef9b..76e6079156d 100644 --- a/tgui/packages/tgui/styles/themes/syndicate.scss +++ b/tgui/packages/tgui/styles/themes/syndicate.scss @@ -3,63 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #397439, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #550202, - $color-bg-grad-spread: 6% -); - .theme-syndicate { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #910101) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #4a0202) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #910101) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #87ce87; + --input-border-color-focus: #87ce87; + --number-input-border-color: #87ce87; + --number-input-border-color-active: #87ce87; + --notice-box-background: #910101; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #4a0202; + --titlebar-background: #910101; + --color-base: #550202; + --color-primary: #397439; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-syndicate.svg'); diff --git a/tgui/packages/tgui/styles/themes/vaurca.scss b/tgui/packages/tgui/styles/themes/vaurca.scss index 2647b3d5053..3b197cc520a 100644 --- a/tgui/packages/tgui/styles/themes/vaurca.scss +++ b/tgui/packages/tgui/styles/themes/vaurca.scss @@ -1,55 +1,18 @@ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #ff0000, - $fg-map-keys: (), - $bg-map-keys: () -); - -@use '../base.scss' with ( - $color-bg: #1b1212, - $color-bg-grad-spread: 0% -); +@use '../base.scss'; .theme-vaurca { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Import Crew Manifest for color values - @include meta.load-css('../interfaces/CrewManifest.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #6a4a4a, - 'color-selected': #ff0000 - ) - ); - @include meta.load-css( - '../components/Tabs.scss', - $with: ( - 'color-default': colors.$primary, - 'tab-color-selected': #ff00003f, - 'text-color': #e7e7e7 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': colors.$primary) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #3d2222) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #6a4a4a; + --button-background-selected: #ff0000; + --tab-background-selected: #ff00003f; + --tab-color: #e7e7e7; + --input-border-color: var(--color-primary); + --input-border-color-focus: var(--color-primary); + --titlebar-background: #3d2222; + --color-base: #1b1212; + --color-primary: #ff0000; + --base-gradient-spread: 0; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/wizard.scss b/tgui/packages/tgui/styles/themes/wizard.scss index 9c4056cc128..f98ea552497 100644 --- a/tgui/packages/tgui/styles/themes/wizard.scss +++ b/tgui/packages/tgui/styles/themes/wizard.scss @@ -3,64 +3,27 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #1596b6, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #213e4e, - $color-bg-grad-spread: 6%, - $border-radius: 2px -); - .theme-wizard { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #02426d, - 'color-selected': #465899, - 'color-caution': #be6209, - 'color-danger': #b30707 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #a82d55) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #2da848) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #1b9e26) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #02426d; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-background-danger: #b30707; + --input-border-color: #404b6e; + --input-border-color-focus: #404b6e; + --number-input-border-color: #404b6e; + --number-input-border-color-active: #404b6e; + --notice-box-background: #a82d55; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #2da848; + --titlebar-background: #1b9e26; + --color-base: #213e4e; + --color-primary: #1596b6; + --base-gradient-spread: 6; + --border-radius-unit: 2px; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-wizard.svg'); diff --git a/tgui/packages/tgui/styles/themes/zavodskoi.scss b/tgui/packages/tgui/styles/themes/zavodskoi.scss index a9b8db2bda9..8d2321f077a 100644 --- a/tgui/packages/tgui/styles/themes/zavodskoi.scss +++ b/tgui/packages/tgui/styles/themes/zavodskoi.scss @@ -1,60 +1,25 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use '../colors.scss' with ( - $primary: #490b0b, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #350404, - $color-bg-grad-spread: 6% -); .theme-zavodskoi { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #1c5f24, - 'color-caution': #be6209, - 'color-danger': #be0f0f - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #080101) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #910101) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #080101) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #4a0202) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #350303) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #1c5f24; + --button-background-caution: #be6209; + --button-background-danger: #be0f0f; + --input-border-color: #080101; + --input-border-color-focus: #080101; + --number-input-border-color: #080101; + --number-input-border-color-active: #080101; + --notice-box-background: #910101; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #4a0202; + --titlebar-background: #350303; + --color-base: #350404; + --color-primary: #490b0b; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-zavod.svg'); diff --git a/tgui/packages/tgui/styles/themes/zenghu.scss b/tgui/packages/tgui/styles/themes/zenghu.scss index 4ea9be69b4d..6d3211d4041 100644 --- a/tgui/packages/tgui/styles/themes/zenghu.scss +++ b/tgui/packages/tgui/styles/themes/zenghu.scss @@ -1,61 +1,29 @@ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #272727, - $bad: #991100, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #1f1527, - $color-bg-grad-spread: 6% -); - .theme-zenghu { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); + --color-base: #1f1527; + --color-primary: #272727; + --color-red: #991100; + --color-bad: #991100; + --base-gradient-spread: 6; - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #47354f, - 'color-disabled': #363636, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #ad2727 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #a681c1) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #a681c1) - ); + --button-background-default: #47354f; + --button-background-disabled: #363636; + --button-background-selected: #bb44cc; + --button-background-caution: #be6209; + --button-background-danger: #ad2727; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #121014) - ); + --input-border-color: #ffffff; + --input-border-color-focus: #ffffff; + --number-input-border-color: #ffffff; + --number-input-border-color-active: #ffffff; + + --notice-box-background: #a681c1; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #47354f; + --section-background: rgba(0, 0, 0, 0.33); + --section-separator-color: #272727; + --tooltip-background: #a681c1; + --titlebar-background: #121014; .Layout__content { background-image: url('../../assets/bg-zenghu.svg'); diff --git a/tgui/public/bg-deforest.svg b/tgui/public/bg-deforest.svg new file mode 100644 index 00000000000..018c2e984bd --- /dev/null +++ b/tgui/public/bg-deforest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tgui/public/bg-nanotrasen.svg b/tgui/public/bg-nanotrasen.svg new file mode 100644 index 00000000000..d21b9f0a2a0 --- /dev/null +++ b/tgui/public/bg-nanotrasen.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tgui/public/helpers.min.js b/tgui/public/helpers.min.js new file mode 100644 index 00000000000..6c5fc969b84 --- /dev/null +++ b/tgui/public/helpers.min.js @@ -0,0 +1 @@ +(function(){var hasOwn=Object.prototype.hasOwnProperty;var assign=function(target){for(var i=1;i0){url+="&"}var value=params[key];if(value===null||value===undefined){value=""}url+=encodeURIComponent(key)+"="+encodeURIComponent(value)}}}if(window.cef_to_byond){cef_to_byond("byond://"+url);return}if(url.length<2048){location.href="byond://"+url;return}var xhr=new XMLHttpRequest;xhr.open("GET",url);xhr.send()};Byond.callAsync=function(path,params){if(!window.Promise){throw new Error("Async calls require API level of ES2015 or later.")}var index=Byond.__callbacks__.length;var promise=new window.Promise(function(resolve){Byond.__callbacks__.push(resolve)});Byond.call(path,assign({},params,{callback:"Byond.__callbacks__["+index+"]"}));return promise};Byond.topic=function(params){return Byond.call("",params)};Byond.command=function(command){return Byond.call("winset",{command:command})};Byond.winget=function(id,propName){if(id===null){id=""}var isArray=propName instanceof Array;var isSpecific=propName&&propName!=="*"&&!isArray;var promise=Byond.callAsync("winget",{id:id,property:isArray&&propName.join(",")||propName||"*"});if(isSpecific){promise=promise.then(function(props){return props[propName]})}return promise};Byond.winset=function(id,propName,propValue){if(id===null){id=""}else if(typeof id==="object"){return Byond.call("winset",id)}var props={};if(typeof propName==="string"){props[propName]=propValue}else{assign(props,propName)}props.id=id;return Byond.call("winset",props)};Byond.parseJson=function(json){try{return JSON.parse(json,byondJsonReviver)}catch(err){throw new Error("JSON parsing error: "+(err&&err.message))}};Byond.sendMessage=function(type,payload){var message=typeof type==="string"?{type:type,payload:payload}:type;if(message.payload!==null&&message.payload!==undefined){message.payload=JSON.stringify(message.payload)}assign(message,{tgui:1,window_id:Byond.windowId});Byond.topic(message)};Byond.injectMessage=function(type,payload){window.update(JSON.stringify({type:type,payload:payload}))};Byond.subscribe=function(listener){window.update.flushQueue(listener);window.update.listeners.push(listener)};Byond.subscribeTo=function(type,listener){var _listener=function(_type,payload){if(_type===type){listener(payload)}};window.update.flushQueue(_listener);window.update.listeners.push(_listener)};var RETRY_ATTEMPTS=5;var RETRY_WAIT_INITIAL=500;var RETRY_WAIT_INCREMENT=500;var loadedAssetByUrl={};var isStyleSheetLoaded=function(node,url){var styleSheet=node.sheet;if(styleSheet){return styleSheet.rules.length>0}return false};var injectNode=function(node){if(!document.body){setTimeout(function(){injectNode(node)});return}var refs=document.body.childNodes;var ref=refs[refs.length-1];ref.parentNode.insertBefore(node,ref.nextSibling)};var loadAsset=function(options){var url=options.url;var type=options.type;var sync=options.sync;var attempt=options.attempt||0;if(loadedAssetByUrl[url]){return}loadedAssetByUrl[url]=options;var retry=function(){if(attempt>=RETRY_ATTEMPTS){var errorMessage="Error: Failed to load the asset "+"'"+url+"' after several attempts.";if(type==="css"){errorMessage+=+"\nStylesheet was either not found, "+"or you're trying to load an empty stylesheet "+"that has no CSS rules in it."}throw new Error(errorMessage)}setTimeout(function(){loadedAssetByUrl[url]=null;options.attempt+=1;loadAsset(options)},RETRY_WAIT_INITIAL+attempt*RETRY_WAIT_INCREMENT)};if(type==="js"){var node=document.createElement("script");node.type="text/javascript";node.crossOrigin="anonymous";node.src=url;if(sync){node.defer=true}else{node.async=true}node.onerror=function(){node.onerror=null;node.parentNode.removeChild(node);node=null;retry()};injectNode(node);return}if(type==="css"){var node=document.createElement("link");node.type="text/css";node.rel="stylesheet";node.crossOrigin="anonymous";node.href=url;if(!sync){node.media="only x"}var removeNodeAndRetry=function(){node.parentNode.removeChild(node);node=null;retry()};node.onerror=function(){node.onerror=null;removeNodeAndRetry()};node.onload=function(){node.onload=null;if(isStyleSheetLoaded(node,url)){node.media="all";return}removeNodeAndRetry()};injectNode(node);return}};Byond.loadJs=function(url,sync){loadAsset({url:url,sync:sync,type:"js"})};Byond.loadCss=function(url,sync){loadAsset({url:url,sync:sync,type:"css"})};Byond.saveBlob=function(blob,filename,ext){if(window.navigator.msSaveBlob){window.navigator.msSaveBlob(blob,filename)}else if(window.showSaveFilePicker){var accept={};accept[blob.type]=[ext];var opts={suggestedName:filename,types:[{description:"SS13 file",accept:accept}]};window.showSaveFilePicker(opts).then(function(file){return file.createWritable()}).then(function(file){return file.write(blob).then(function(){return file.close()})}).catch(function(){})}};Byond.iconRefMap={}})();window.onerror=function(msg,url,line,col,error){window.onerror.errorCount=(window.onerror.errorCount||0)+1;var stack=error&&error.stack;if(!stack){stack=msg+"\n at "+url+":"+line;if(col){stack+=":"+col}}stack=window.__augmentStack__(stack,error);if(Byond.strictMode){var errorRoot=document.getElementById("FatalError");var errorStack=document.getElementById("FatalError__stack");if(errorRoot){errorRoot.className="FatalError FatalError--visible";if(window.onerror.__stack__){window.onerror.__stack__+="\n\n"+stack}else{window.onerror.__stack__=stack}var textProp="textContent";errorStack[textProp]=window.onerror.__stack__}var setFatalErrorGeometry=function(){Byond.winset(Byond.windowId,{titlebar:true,"is-visible":true,"can-resize":true})};setFatalErrorGeometry();setInterval(setFatalErrorGeometry,1e3)}if(Byond.strictMode){Byond.sendMessage({type:"log",fatal:1,message:stack})}else if(window.onerror.errorCount<=1){stack+="\nWindow is in non-strict mode, future errors are suppressed.";Byond.sendMessage({type:"log",message:stack})}if(Byond.strictMode){window.update=function(){};window.update.queue=[]}return true};window.onunhandledrejection=function(e){var msg="UnhandledRejection";if(e.reason){msg+=": "+(e.reason.message||e.reason.description||e.reason);if(e.reason.stack){e.reason.stack="UnhandledRejection: "+e.reason.stack}}window.onerror(msg,null,null,null,e.reason)};window.__augmentStack__=function(stack,error){return stack+"\nUser Agent: "+navigator.userAgent};window.update=function(rawMessage){if(window.update.queueActive){window.update.queue.push(rawMessage);return}var message=Byond.parseJson(rawMessage);var listeners=window.update.listeners;for(var i=0;i + + + - - - + - + const getStore = async (mode) => { + return dbPromise.then((db) => + db + .transaction(INDEXED_DB_STORE_NAME, mode) + .objectStore(INDEXED_DB_STORE_NAME), + ); + }; + + const get = async (key) => { + const store = await getStore(READ_ONLY); + return new Promise((resolve, reject) => { + const req = store.get(key); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); + }; + + const set = async (key, value) => { + const store = await getStore(READ_WRITE); + store.put(value, key); + }; + + const remove = async (key) => { + const store = await getStore(READ_WRITE); + store.delete(key); + }; + + const clear = async () => { + const store = await getStore(READ_WRITE); + store.clear(); + }; + + window.onload = () => { + window.parent.postMessage("ready", "*"); + } + + diff --git a/tgui/public/ntos-error.min.css b/tgui/public/ntos-error.min.css new file mode 100644 index 00000000000..73259a99689 --- /dev/null +++ b/tgui/public/ntos-error.min.css @@ -0,0 +1 @@ +blink{animation:1s linear infinite condemned-blink-effect}@keyframes condemned-blink-effect{0%{visibility:hidden}50%{visibility:hidden}100%{visibility:visible}}.FatalError{display:none;position:absolute;top:0;left:0;right:0;bottom:0;padding:12px;font-size:12px;font-family:Consolas,monospace;color:#fff;background-color:#00d;z-index:1000;overflow:hidden;text-align:center}.FatalError--visible{display:block!important}.FatalError__logo{display:inline-block;text-align:left;font-size:10px;line-height:12px;position:relative;margin:16px;top:0;left:0;animation:FatalError__rainbow 2s linear infinite alternate,FatalError__shadow 4s linear infinite alternate,FatalError__tfmX 3s infinite alternate,FatalError__tfmY 4s infinite alternate;white-space:pre}.FatalError__header{margin-top:12px}.FatalError__stack{text-align:left;white-space:pre-wrap;word-break:break-all;margin-top:24px;margin-bottom:24px}.FatalError__footer{margin-bottom:24px}@keyframes FatalError__rainbow{0%{color:#ff0}50%{color:#0ff}100%{color:#f0f}}@keyframes FatalError__shadow{0%{left:-2px;text-shadow:4px 0 #f0f}50%{left:0;text-shadow:0 0 #0ff}100%{left:2px;text-shadow:-4px 0 #ff0}}@keyframes FatalError__tfmX{0%{left:15px}100%{left:-15px}}@keyframes FatalError__tfmY{100%{top:-15px}} \ No newline at end of file diff --git a/tgui/public/tgui-polyfill.min.js b/tgui/public/tgui-polyfill.min.js deleted file mode 100644 index 91be6dc8765..00000000000 --- a/tgui/public/tgui-polyfill.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(window,document){var version="3.7.3";var options=window.html5||{};var reSkip=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;var saveClones=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;var supportsHtml5Styles;var expando="_html5shiv";var expanID=0;var expandoData={};var supportsUnknownElements;(function(){try{var a=document.createElement("a");a.innerHTML="";supportsHtml5Styles="hidden"in a;supportsUnknownElements=a.childNodes.length==1||function(){document.createElement("a");var frag=document.createDocumentFragment();return typeof frag.cloneNode=="undefined"||typeof frag.createDocumentFragment=="undefined"||typeof frag.createElement=="undefined"}()}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true}})();function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement("p"),parent=ownerDocument.getElementsByTagName("head")[0]||ownerDocument.documentElement;p.innerHTML="x";return parent.insertBefore(p.lastChild,parent.firstChild)}function getElements(){var elements=html5.elements;return typeof elements=="string"?elements.split(" "):elements}function addElements(newElements,ownerDocument){var elements=html5.elements;if(typeof elements!="string"){elements=elements.join(" ")}if(typeof newElements!="string"){newElements=newElements.join(" ")}html5.elements=elements+" "+newElements;shivDocument(ownerDocument)}function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data}return data}function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createElement(nodeName)}if(!data){data=getExpandoData(ownerDocument)}var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode()}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode()}else{node=data.createElem(nodeName)}return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node}function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createDocumentFragment()}data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i3?getModifier(init):null,key=String(init.key),chr=String(init.char),location=init.location,keyCode=init.keyCode||(init.keyCode=key)&&key.charCodeAt(0)||0,charCode=init.charCode||(init.charCode=chr)&&chr.charCodeAt(0)||0,bubbles=init.bubbles,cancelable=init.cancelable,repeat=init.repeat,locale=init.locale,view=init.view||window,args;if(!init.which)init.which=init.keyCode;if("initKeyEvent"in out){out.initKeyEvent(type,bubbles,cancelable,view,ctrlKey,altKey,shiftKey,metaKey,keyCode,charCode)}else if(0>>0);var proto=Element.prototype;var querySelector=proto.querySelector;var querySelectorAll=proto.querySelectorAll;proto.querySelector=function qS(css){return find(this,querySelector,css)};proto.querySelectorAll=function qSA(css){return find(this,querySelectorAll,css)};function find(node,method,css){node.setAttribute(dataScope,null);var result=method.call(node,String(css).replace(/(^|,\s*)(:scope([ >]|$))/g,(function($0,$1,$2,$3){return $1+"["+dataScope+"]"+($3||" ")})));node.removeAttribute(dataScope);return result}})()}})(window);(function(global){"use strict";var DOMMap=global.WeakMap||function(){var counter=0,dispatched=false,drop=false,value;function dispatch(key,ce,shouldDrop){drop=shouldDrop;dispatched=false;value=undefined;key.dispatchEvent(ce)}function Handler(value){this.value=value}Handler.prototype.handleEvent=function handleEvent(e){dispatched=true;if(drop){e.currentTarget.removeEventListener(e.type,this,false)}else{value=this.value}};function DOMMap(){counter++;this.__ce__=new Event("@DOMMap:"+counter+Math.random())}DOMMap.prototype={constructor:DOMMap,"delete":function del(key){return dispatch(key,this.__ce__,true),dispatched},get:function get(key){dispatch(key,this.__ce__,false);var v=value;value=undefined;return v},has:function has(key){return dispatch(key,this.__ce__,false),dispatched},set:function set(key,value){dispatch(key,this.__ce__,true);key.addEventListener(this.__ce__.type,new Handler(value),false);return this}};return DOMMap}();function Dict(){}Dict.prototype=(Object.create||Object)(null);function createEventListener(type,callback,options){function eventListener(e){if(eventListener.once){e.currentTarget.removeEventListener(e.type,callback,eventListener);eventListener.removed=true}if(eventListener.passive){e.preventDefault=createEventListener.preventDefault}if(typeof eventListener.callback==="function"){eventListener.callback.call(this,e)}else if(eventListener.callback){eventListener.callback.handleEvent(e)}if(eventListener.passive){delete e.preventDefault}}eventListener.type=type;eventListener.callback=callback;eventListener.capture=!!options.capture;eventListener.passive=!!options.passive;eventListener.once=!!options.once;eventListener.removed=false;return eventListener}createEventListener.preventDefault=function preventDefault(){};var Event=global.CustomEvent,dE=global.dispatchEvent,aEL=global.addEventListener,rEL=global.removeEventListener,counter=0,increment=function(){counter++},indexOf=[].indexOf||function indexOf(value){var length=this.length;while(length--){if(this[length]===value){break}}return length},getListenerKey=function(options){return"".concat(options.capture?"1":"0",options.passive?"1":"0",options.once?"1":"0")},augment;try{aEL("_",increment,{once:true});dE(new Event("_"));dE(new Event("_"));rEL("_",increment,{once:true})}catch(o_O){}if(counter!==1){(function(){var dm=new DOMMap;function createAEL(aEL){return function addEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key=getListenerKey(options),i,tmp,wrap;if(!info)dm.set(this,info=new Dict);if(!(type in info))info[type]={handler:[],wrap:[]};tmp=info[type];i=indexOf.call(tmp.handler,handler);if(i<0){i=tmp.handler.push(handler)-1;tmp.wrap[i]=wrap=new Dict}else{wrap=tmp.wrap[i]}if(!(key in wrap)){wrap[key]=createEventListener(type,handler,options);aEL.call(this,type,wrap[key],wrap[key].capture)}}else{aEL.call(this,type,handler,options)}}}function createREL(rEL){return function removeEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key,i,tmp,wrap;if(info&&type in info){tmp=info[type];i=indexOf.call(tmp.handler,handler);if(-1>>0;if(typeof callback!=="function"){throw new TypeError(callback+" is not a function")}if(arguments.length>1){T=thisArg}k=0;while(k - + - - - - + + - - - + @@ -730,30 +27,20 @@
- +

A fatal exception has occurred at 002B:C562F1B7 in TGUI. The current application will be terminated. Send the copy of the following stack - trace to an authorized NanoTrasen incident handler at - https://github.com/Aurorastation/Aurora.3. Thank you for your - cooperation. -

+ trace to an authorized Nanotrasen incident handler at + https://github.com/Aurora.3/tgstation. Thank you for your cooperation. +

+

i^rnTagam7`EB=npeJ5l-^4B6q&=7( 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ɛ+Ugv6GDIma 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