diff --git a/README.md b/README.md index 0ecf4c5b01..bbceb0f05b 100644 --- a/README.md +++ b/README.md @@ -1,175 +1,175 @@ -## Citadel Station 13 -Based and maintained from /tg/station. - -[![Build Status](https://api.travis-ci.org/Citadel-Station-13/Citadel-Station-13.png)](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13) -[![Percentage of issues still open](http://isitmaintained.com/badge/open/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open") -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue") - -[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/pretty-risque.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/you-didnt-ask-for-this.svg)](http://forthebadge.com) [![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a) - -**Upstream Information** -* **Website:** -* **Code:** -* **Wiki:** -* **Codedocs:** -* **/tg/station Discord:** -* **Coderbus Discord:** -* ~~**IRC:** ~~ (dead) - -**Citadel Station Information** -* **Website:** -* **Code:** -* **Wiki:** -* **Forums:** -* **Ban Appeals:** -* **Discord:** - -## DOWNLOADING - -There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at http://www.tgstation13.org/wiki/Downloading_the_source_code - -Option 1: -Follow this: http://www.tgstation13.org/wiki/Setting_up_git - -Option 2: Download the source code as a zip by clicking the ZIP button in the -code tab of https://github.com/tgstation/tgstation -(note: this will use a lot of bandwidth if you wish to update and is a lot of -hassle if you want to make any changes at all, so it's not recommended.) - -Option 3: Download a pre-compiled nightly at https://tgstation13.download/nightlies/ (same caveats as option 2) - -## INSTALLATION - -First-time installation should be fairly straightforward. First, you'll need -BYOND installed. You can get it from https://www.byond.com/download. Once you've done -that, extract the game files to wherever you want to keep them. This is a -sourcecode-only release, so the next step is to compile the server files. -Open tgstation.dme by double-clicking it, open the Build menu, and click -compile. This'll take a little while, and if everything's done right you'll get -a message like this: - -``` -saving tgstation.dmb (DEBUG mode) -tgstation.dmb - 0 errors, 0 warnings -``` - -If you see any errors or warnings, something has gone wrong - possibly a corrupt -download or the files extracted wrong. If problems persist, ask for assistance -in irc://irc.rizon.net/coderbus - -Once that's done, open up the config folder. You'll want to edit config.txt to -set the probabilities for different gamemodes in Secret and to set your server -location so that all your players don't get disconnected at the end of each -round. It's recommended you don't turn on the gamemodes with probability 0, -except Extended, as they have various issues and aren't currently being tested, -so they may have unknown and bizarre bugs. Extended is essentially no mode, and -isn't in the Secret rotation by default as it's just not very fun. - -You'll also want to edit config/admins.txt to remove the default admins and add -your own. "Game Master" is the highest level of access, and probably the one -you'll want to use for now. You can set up your own ranks and find out more in -config/admin_ranks.txt - -The format is - -``` -byondkey = Rank -``` - -where the admin rank must be properly capitalised. - -This codebase also depends on a native library called rust-g. A precompiled -Windows DLL is included in this repository, but Linux users will need to build -and install it themselves. Directions can be found at the [rust-g -repo](https://github.com/tgstation13/rust-g). - -Finally, to start the server, run Dream Daemon and enter the path to your -compiled tgstation.dmb file. Make sure to set the port to the one you -specified in the config.txt, and set the Security box to 'Safe'. Then press GO -and the server should start up and be ready to join. It is also recommended that -you set up the SQL backend (see below). - -## UPDATING - -To update an existing installation, first back up your /config and /data folders -as these store your server configuration, player preferences and banlist. - -Then, extract the new files (preferably into a clean directory, but updating in -place should work fine), copy your /config and /data folders back into the new -install, overwriting when prompted except if we've specified otherwise, and -recompile the game. Once you start the server up again, you should be running -the new version. - -## HOSTING - -If you'd like a more robust server hosting option for tgstation and its -derivatives. Check out our server tools suite at -https://github.com/tgstation/tgstation-server - -## MAPS - -/tg/station currently comes equipped with five maps. - -* [BoxStation (default)](http://tgstation13.org/wiki/Boxstation) -* [MetaStation](https://tgstation13.org/wiki/MetaStation) -* [DeltaStation](https://tgstation13.org/wiki/DeltaStation) -* [OmegaStation](https://tgstation13.org/wiki/OmegaStation) -* [PubbyStation](https://tgstation13.org/wiki/PubbyStation) - - -All maps have their own code file that is in the base of the _maps directory. Maps are loaded dynamically when the game starts. Follow this guideline when adding your own map, to your fork, for easy compatibility. - -The map that will be loaded for the upcoming round is determined by reading data/next_map.json, which is a copy of the json files found in the _maps tree. If this file does not exist, the default map from config/maps.txt will be loaded. Failing that, BoxStation will be loaded. If you want to set a specific map to load next round you can use the Change Map verb in game before restarting the server or copy a json from _maps to data/next_map.json before starting the server. Also, for debugging purposes, ticking a corresponding map's code file in Dream Maker will force that map to load every round. - -If you are hosting a server, and want randomly picked maps to be played each round, you can enable map rotation in [config.txt](config/config.txt) and then set the maps to be picked in the [maps.txt](config/maps.txt) file. - -Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger) - -## AWAY MISSIONS - -/tg/station supports loading away missions however they are disabled by default. - -Map files for away missions are located in the _maps/RandomZLevels directory. Each away mission includes it's own code definitions located in /code/modules/awaymissions/mission_code. These files must be included and compiled with the server beforehand otherwise the server will crash upon trying to load away missions that lack their code. - -To enable an away mission open `config/awaymissionconfig.txt` and uncomment one of the .dmm lines by removing the #. If more than one away mission is uncommented then the away mission loader will randomly select one the enabled ones to load. - -## SQL SETUP - -The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not supported but Mariadb is a drop in replacement for mysql. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: https://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database - -## WEB/CDN RESOURCE DELIVERY - -Web delivery of game resources makes it quicker for players to join and reduces some of the stress on the game server. - -1. Edit compile_options.dm to set the `PRELOAD_RSC` define to `0` -1. Add a url to config/external_rsc_urls pointing to a .zip file containing the .rsc. - * If you keep up to date with /tg/ you could reuse /tg/'s rsc cdn at http://tgstation13.download/byond/tgstation.zip. Otherwise you can use cdn services like CDN77 or cloudflare (requires adding a page rule to enable caching of the zip), or roll your own cdn using route 53 and vps providers. - * Regardless even offloading the rsc to a website without a CDN will be a massive improvement over the in game system for transferring files. - -## IRC BOT SETUP - -Included in the repository is a python3 compatible IRC bot capable of relaying adminhelps to a specified -IRC channel/server, see the /tools/minibot folder for more - -## CONTRIBUTING - -Please see [CONTRIBUTING.md](.github/CONTRIBUTING.md) - -## LICENSE - -All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU AGPL v3](http://www.gnu.org/licenses/agpl-3.0.html). - -All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html). -(Including tools unless their readme specifies otherwise.) - -See LICENSE and GPLv3.txt for more details. - -The TGS3 API is licensed as a subproject under the MIT license. - -See the footers of code/\_\_DEFINES/server\_tools.dm, code/modules/server\_tools/st\_commands.dm, and code/modules/server\_tools/st\_inteface.dm for the MIT license. - -tgui clientside is licensed as a subproject under the MIT license. -Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1 -tgui assets are licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). - -All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. +## Citadel Station 13 +Based and maintained from /tg/station. + +[![Build Status](https://api.travis-ci.org/Citadel-Station-13/Citadel-Station-13.png)](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13) +[![Percentage of issues still open](http://isitmaintained.com/badge/open/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open") +[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue") + +[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/pretty-risque.svg)](https://forthebadge.com) [![forthebadge](http://forthebadge.com/images/badges/you-didnt-ask-for-this.svg)](http://forthebadge.com) [![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a) + +**Upstream Information** +* **Website:** +* **Code:** +* **Wiki:** +* **Codedocs:** +* **/tg/station Discord:** +* **Coderbus Discord:** +* ~~**IRC:** ~~ (dead) + +**Citadel Station Information** +* **Website:** +* **Code:** +* **Wiki:** +* **Forums:** +* **Ban Appeals:** +* **Discord:** + +## DOWNLOADING + +There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at http://www.tgstation13.org/wiki/Downloading_the_source_code + +Option 1: +Follow this: http://www.tgstation13.org/wiki/Setting_up_git + +Option 2: Download the source code as a zip by clicking the ZIP button in the +code tab of https://github.com/tgstation/tgstation +(note: this will use a lot of bandwidth if you wish to update and is a lot of +hassle if you want to make any changes at all, so it's not recommended.) + +Option 3: Download a pre-compiled nightly at https://tgstation13.download/nightlies/ (same caveats as option 2) + +## INSTALLATION + +First-time installation should be fairly straightforward. First, you'll need +BYOND installed. You can get it from https://www.byond.com/download. Once you've done +that, extract the game files to wherever you want to keep them. This is a +sourcecode-only release, so the next step is to compile the server files. +Open tgstation.dme by double-clicking it, open the Build menu, and click +compile. This'll take a little while, and if everything's done right you'll get +a message like this: + +``` +saving tgstation.dmb (DEBUG mode) +tgstation.dmb - 0 errors, 0 warnings +``` + +If you see any errors or warnings, something has gone wrong - possibly a corrupt +download or the files extracted wrong. If problems persist, ask for assistance +in irc://irc.rizon.net/coderbus + +Once that's done, open up the config folder. You'll want to edit config.txt to +set the probabilities for different gamemodes in Secret and to set your server +location so that all your players don't get disconnected at the end of each +round. It's recommended you don't turn on the gamemodes with probability 0, +except Extended, as they have various issues and aren't currently being tested, +so they may have unknown and bizarre bugs. Extended is essentially no mode, and +isn't in the Secret rotation by default as it's just not very fun. + +You'll also want to edit config/admins.txt to remove the default admins and add +your own. "Game Master" is the highest level of access, and probably the one +you'll want to use for now. You can set up your own ranks and find out more in +config/admin_ranks.txt + +The format is + +``` +byondkey = Rank +``` + +where the admin rank must be properly capitalised. + +This codebase also depends on a native library called rust-g. A precompiled +Windows DLL is included in this repository, but Linux users will need to build +and install it themselves. Directions can be found at the [rust-g +repo](https://github.com/tgstation13/rust-g). + +Finally, to start the server, run Dream Daemon and enter the path to your +compiled tgstation.dmb file. Make sure to set the port to the one you +specified in the config.txt, and set the Security box to 'Safe'. Then press GO +and the server should start up and be ready to join. It is also recommended that +you set up the SQL backend (see below). + +## UPDATING + +To update an existing installation, first back up your /config and /data folders +as these store your server configuration, player preferences and banlist. + +Then, extract the new files (preferably into a clean directory, but updating in +place should work fine), copy your /config and /data folders back into the new +install, overwriting when prompted except if we've specified otherwise, and +recompile the game. Once you start the server up again, you should be running +the new version. + +## HOSTING + +If you'd like a more robust server hosting option for tgstation and its +derivatives. Check out our server tools suite at +https://github.com/tgstation/tgstation-server + +## MAPS + +/tg/station currently comes equipped with five maps. + +* [BoxStation (default)](http://tgstation13.org/wiki/Boxstation) +* [MetaStation](https://tgstation13.org/wiki/MetaStation) +* [DeltaStation](https://tgstation13.org/wiki/DeltaStation) +* [OmegaStation](https://tgstation13.org/wiki/OmegaStation) +* [PubbyStation](https://tgstation13.org/wiki/PubbyStation) + + +All maps have their own code file that is in the base of the _maps directory. Maps are loaded dynamically when the game starts. Follow this guideline when adding your own map, to your fork, for easy compatibility. + +The map that will be loaded for the upcoming round is determined by reading data/next_map.json, which is a copy of the json files found in the _maps tree. If this file does not exist, the default map from config/maps.txt will be loaded. Failing that, BoxStation will be loaded. If you want to set a specific map to load next round you can use the Change Map verb in game before restarting the server or copy a json from _maps to data/next_map.json before starting the server. Also, for debugging purposes, ticking a corresponding map's code file in Dream Maker will force that map to load every round. + +If you are hosting a server, and want randomly picked maps to be played each round, you can enable map rotation in [config.txt](config/config.txt) and then set the maps to be picked in the [maps.txt](config/maps.txt) file. + +Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger) + +## AWAY MISSIONS + +/tg/station supports loading away missions however they are disabled by default. + +Map files for away missions are located in the _maps/RandomZLevels directory. Each away mission includes it's own code definitions located in /code/modules/awaymissions/mission_code. These files must be included and compiled with the server beforehand otherwise the server will crash upon trying to load away missions that lack their code. + +To enable an away mission open `config/awaymissionconfig.txt` and uncomment one of the .dmm lines by removing the #. If more than one away mission is uncommented then the away mission loader will randomly select one the enabled ones to load. + +## SQL SETUP + +The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not supported but Mariadb is a drop in replacement for mysql. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: https://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database + +## WEB/CDN RESOURCE DELIVERY + +Web delivery of game resources makes it quicker for players to join and reduces some of the stress on the game server. + +1. Edit compile_options.dm to set the `PRELOAD_RSC` define to `0` +1. Add a url to config/external_rsc_urls pointing to a .zip file containing the .rsc. + * If you keep up to date with /tg/ you could reuse /tg/'s rsc cdn at http://tgstation13.download/byond/tgstation.zip. Otherwise you can use cdn services like CDN77 or cloudflare (requires adding a page rule to enable caching of the zip), or roll your own cdn using route 53 and vps providers. + * Regardless even offloading the rsc to a website without a CDN will be a massive improvement over the in game system for transferring files. + +## IRC BOT SETUP + +Included in the repository is a python3 compatible IRC bot capable of relaying adminhelps to a specified +IRC channel/server, see the /tools/minibot folder for more + +## CONTRIBUTING + +Please see [CONTRIBUTING.md](.github/CONTRIBUTING.md) + +## LICENSE + +All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU AGPL v3](http://www.gnu.org/licenses/agpl-3.0.html). + +All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html). +(Including tools unless their readme specifies otherwise.) + +See LICENSE and GPLv3.txt for more details. + +The TGS3 API is licensed as a subproject under the MIT license. + +See the footers of code/\_\_DEFINES/server\_tools.dm, code/modules/server\_tools/st\_commands.dm, and code/modules/server\_tools/st\_inteface.dm for the MIT license. + +tgui clientside is licensed as a subproject under the MIT license. +Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1 +tgui assets are licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index dc0861220a..34baaaa4c6 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -1,473 +1,473 @@ -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `admin` --- - -DROP TABLE IF EXISTS `admin`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `admin` ( - `ckey` varchar(32) NOT NULL, - `rank` varchar(32) NOT NULL, - PRIMARY KEY (`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `admin_log` --- - -DROP TABLE IF EXISTS `admin_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `admin_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `round_id` int(11) unsigned NOT NULL, - `adminckey` varchar(32) NOT NULL, - `adminip` int(10) unsigned NOT NULL, - `operation` enum('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL, - `target` varchar(32) NOT NULL, - `log` varchar(1000) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `admin_ranks` --- - -DROP TABLE IF EXISTS `admin_ranks`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `admin_ranks` ( - `rank` varchar(32) NOT NULL, - `flags` smallint(5) unsigned NOT NULL, - `exclude_flags` smallint(5) unsigned NOT NULL, - `can_edit_flags` smallint(5) unsigned NOT NULL, - PRIMARY KEY (`rank`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `ban` --- - -DROP TABLE IF EXISTS `ban`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ban` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `bantime` datetime NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `round_id` int(11) NOT NULL, - `bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL, - `reason` varchar(2048) NOT NULL, - `job` varchar(32) DEFAULT NULL, - `duration` int(11) NOT NULL, - `expiration_time` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `computerid` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `a_ckey` varchar(32) NOT NULL, - `a_computerid` varchar(32) NOT NULL, - `a_ip` int(10) unsigned NOT NULL, - `who` varchar(2048) NOT NULL, - `adminwho` varchar(2048) NOT NULL, - `edits` text, - `unbanned` tinyint(3) unsigned DEFAULT NULL, - `unbanned_datetime` datetime DEFAULT NULL, - `unbanned_ckey` varchar(32) DEFAULT NULL, - `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`), - KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`), - KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `connection_log` --- - -DROP TABLE IF EXISTS `connection_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `connection_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime DEFAULT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `round_id` int(11) unsigned NOT NULL, - `ckey` varchar(45) DEFAULT NULL, - `ip` int(10) unsigned NOT NULL, - `computerid` varchar(45) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `death` --- - -DROP TABLE IF EXISTS `death`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `death` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `pod` varchar(50) NOT NULL, - `x_coord` smallint(5) unsigned NOT NULL, - `y_coord` smallint(5) unsigned NOT NULL, - `z_coord` smallint(5) unsigned NOT NULL, - `mapname` varchar(32) NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `round_id` int(11) NOT NULL, - `tod` datetime NOT NULL COMMENT 'Time of death', - `job` varchar(32) NOT NULL, - `special` varchar(32) DEFAULT NULL, - `name` varchar(96) NOT NULL, - `byondkey` varchar(32) NOT NULL, - `laname` varchar(96) DEFAULT NULL, - `lakey` varchar(32) DEFAULT NULL, - `bruteloss` smallint(5) unsigned NOT NULL, - `brainloss` smallint(5) unsigned NOT NULL, - `fireloss` smallint(5) unsigned NOT NULL, - `oxyloss` smallint(5) unsigned NOT NULL, - `toxloss` smallint(5) unsigned NOT NULL, - `cloneloss` smallint(5) unsigned NOT NULL, - `staminaloss` smallint(5) unsigned NOT NULL, - `last_words` varchar(255) DEFAULT NULL, - `suicide` tinyint(1) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `feedback` --- - -DROP TABLE IF EXISTS `feedback`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `feedback` ( - `id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `round_id` int(11) unsigned NOT NULL, - `key_name` varchar(32) NOT NULL, - `key_type` enum('text', 'amount', 'tally', 'nested tally', 'associative') NOT NULL, - `version` tinyint(3) unsigned NOT NULL, - `json` json NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `ipintel` --- - -DROP TABLE IF EXISTS `ipintel`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ipintel` ( - `ip` int(10) unsigned NOT NULL, - `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `intel` double NOT NULL DEFAULT '0', - PRIMARY KEY (`ip`), - KEY `idx_ipintel` (`ip`,`intel`,`date`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `legacy_population` --- - -DROP TABLE IF EXISTS `legacy_population`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `legacy_population` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `playercount` int(11) DEFAULT NULL, - `admincount` int(11) DEFAULT NULL, - `time` datetime NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `round_id` int(11) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `library` --- - -DROP TABLE IF EXISTS `library`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `library` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `author` varchar(45) NOT NULL, - `title` varchar(45) NOT NULL, - `content` text NOT NULL, - `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, - `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', - `datetime` datetime NOT NULL, - `deleted` tinyint(1) unsigned DEFAULT NULL, - `round_id_created` int(11) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `deleted_idx` (`deleted`), - KEY `idx_lib_id_del` (`id`,`deleted`), - KEY `idx_lib_del_title` (`deleted`,`title`), - KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `messages` --- - -DROP TABLE IF EXISTS `messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `messages` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `type` enum('memo','message','message sent','note','watchlist entry') NOT NULL, - `targetckey` varchar(32) NOT NULL, - `adminckey` varchar(32) NOT NULL, - `text` varchar(2048) NOT NULL, - `timestamp` datetime NOT NULL, - `server` varchar(32) DEFAULT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `round_id` int(11) unsigned NOT NULL, - `secret` tinyint(1) unsigned NOT NULL, - `expire_timestamp` datetime DEFAULT NULL, - `severity` enum('high','medium','minor','none') DEFAULT NULL, - `lasteditor` varchar(32) DEFAULT NULL, - `edits` text, - `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`, `deleted`), - KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`, `deleted`), - KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`, `deleted`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `role_time` --- - -DROP TABLE IF EXISTS `role_time`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; - -CREATE TABLE `role_time` -( `ckey` VARCHAR(32) NOT NULL , - `job` VARCHAR(32) NOT NULL , - `minutes` INT UNSIGNED NOT NULL, - PRIMARY KEY (`ckey`, `job`) - ) ENGINE = InnoDB; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `role_time` --- - -DROP TABLE IF EXISTS `role_time_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; - -CREATE TABLE IF NOT EXISTS `role_time_log` ( - `id` bigint(20) NOT NULL AUTO_INCREMENT, - `ckey` varchar(32) NOT NULL, - `job` varchar(128) NOT NULL, - `delta` int(11) NOT NULL, - `datetime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), - PRIMARY KEY (`id`), - KEY `ckey` (`ckey`), - KEY `job` (`job`), - KEY `datetime` (`datetime`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `player` --- - -DROP TABLE IF EXISTS `player`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `player` ( - `ckey` varchar(32) NOT NULL, - `byond_key` varchar(32) DEFAULT NULL, - `firstseen` datetime NOT NULL, - `firstseen_round_id` int(11) unsigned NOT NULL, - `lastseen` datetime NOT NULL, - `lastseen_round_id` int(11) unsigned NOT NULL, - `ip` int(10) unsigned NOT NULL, - `computerid` varchar(32) NOT NULL, - `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', - `accountjoindate` DATE DEFAULT NULL, - `flags` smallint(5) unsigned DEFAULT '0' NOT NULL, - PRIMARY KEY (`ckey`), - KEY `idx_player_cid_ckey` (`computerid`,`ckey`), - KEY `idx_player_ip_ckey` (`ip`,`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_option` --- - -DROP TABLE IF EXISTS `poll_option`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `poll_option` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `pollid` int(11) NOT NULL, - `text` varchar(255) NOT NULL, - `minval` int(3) DEFAULT NULL, - `maxval` int(3) DEFAULT NULL, - `descmin` varchar(32) DEFAULT NULL, - `descmid` varchar(32) DEFAULT NULL, - `descmax` varchar(32) DEFAULT NULL, - `default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1', - PRIMARY KEY (`id`), - KEY `idx_pop_pollid` (`pollid`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_question` --- - -DROP TABLE IF EXISTS `poll_question`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `poll_question` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL, - `starttime` datetime NOT NULL, - `endtime` datetime NOT NULL, - `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) unsigned NOT NULL, - `multiplechoiceoptions` int(2) DEFAULT NULL, - `createdby_ckey` varchar(32) DEFAULT NULL, - `createdby_ip` int(10) unsigned NOT NULL, - `dontshow` tinyint(1) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`), - KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`), - KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_textreply` --- - -DROP TABLE IF EXISTS `poll_textreply`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `poll_textreply` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `replytext` varchar(2048) NOT NULL, - `adminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_vote` --- - -DROP TABLE IF EXISTS `poll_vote`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `poll_vote` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `optionid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `adminrank` varchar(32) NOT NULL, - `rating` int(2) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`), - KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `round` --- -DROP TABLE IF EXISTS `round`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `round` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `initialize_datetime` DATETIME NOT NULL, - `start_datetime` DATETIME NULL, - `shutdown_datetime` DATETIME NULL, - `end_datetime` DATETIME NULL, - `server_ip` INT(10) UNSIGNED NOT NULL, - `server_port` SMALLINT(5) UNSIGNED NOT NULL, - `commit_hash` CHAR(40) NULL, - `game_mode` VARCHAR(32) NULL, - `game_mode_result` VARCHAR(64) NULL, - `end_state` VARCHAR(64) NULL, - `shuttle_name` VARCHAR(64) NULL, - `map_name` VARCHAR(32) NULL, - `station_name` VARCHAR(80) NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - --- --- Table structure for table `schema_revision` --- -DROP TABLE IF EXISTS `schema_revision`; -CREATE TABLE `schema_revision` ( - `major` TINYINT(3) unsigned NOT NULL, - `minor` TINYINT(3) unsigned NOT NULL, - `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`major`, `minor`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -DELIMITER $$ -CREATE TRIGGER `role_timeTlogupdate` AFTER UPDATE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes); -END -$$ -CREATE TRIGGER `role_timeTloginsert` AFTER INSERT ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes); -END -$$ -CREATE TRIGGER `role_timeTlogdelete` AFTER DELETE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes); -END -$$ - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `admin` +-- + +DROP TABLE IF EXISTS `admin`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin` ( + `ckey` varchar(32) NOT NULL, + `rank` varchar(32) NOT NULL, + PRIMARY KEY (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_log` +-- + +DROP TABLE IF EXISTS `admin_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `adminckey` varchar(32) NOT NULL, + `adminip` int(10) unsigned NOT NULL, + `operation` enum('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL, + `target` varchar(32) NOT NULL, + `log` varchar(1000) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_ranks` +-- + +DROP TABLE IF EXISTS `admin_ranks`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_ranks` ( + `rank` varchar(32) NOT NULL, + `flags` smallint(5) unsigned NOT NULL, + `exclude_flags` smallint(5) unsigned NOT NULL, + `can_edit_flags` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`rank`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `ban` +-- + +DROP TABLE IF EXISTS `ban`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ban` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bantime` datetime NOT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) NOT NULL, + `bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL, + `reason` varchar(2048) NOT NULL, + `job` varchar(32) DEFAULT NULL, + `duration` int(11) NOT NULL, + `expiration_time` datetime NOT NULL, + `ckey` varchar(32) NOT NULL, + `computerid` varchar(32) NOT NULL, + `ip` int(10) unsigned NOT NULL, + `a_ckey` varchar(32) NOT NULL, + `a_computerid` varchar(32) NOT NULL, + `a_ip` int(10) unsigned NOT NULL, + `who` varchar(2048) NOT NULL, + `adminwho` varchar(2048) NOT NULL, + `edits` text, + `unbanned` tinyint(3) unsigned DEFAULT NULL, + `unbanned_datetime` datetime DEFAULT NULL, + `unbanned_ckey` varchar(32) DEFAULT NULL, + `unbanned_computerid` varchar(32) DEFAULT NULL, + `unbanned_ip` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`), + KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`), + KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `connection_log` +-- + +DROP TABLE IF EXISTS `connection_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `connection_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime DEFAULT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `ckey` varchar(45) DEFAULT NULL, + `ip` int(10) unsigned NOT NULL, + `computerid` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `death` +-- + +DROP TABLE IF EXISTS `death`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `death` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pod` varchar(50) NOT NULL, + `x_coord` smallint(5) unsigned NOT NULL, + `y_coord` smallint(5) unsigned NOT NULL, + `z_coord` smallint(5) unsigned NOT NULL, + `mapname` varchar(32) NOT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) NOT NULL, + `tod` datetime NOT NULL COMMENT 'Time of death', + `job` varchar(32) NOT NULL, + `special` varchar(32) DEFAULT NULL, + `name` varchar(96) NOT NULL, + `byondkey` varchar(32) NOT NULL, + `laname` varchar(96) DEFAULT NULL, + `lakey` varchar(32) DEFAULT NULL, + `bruteloss` smallint(5) unsigned NOT NULL, + `brainloss` smallint(5) unsigned NOT NULL, + `fireloss` smallint(5) unsigned NOT NULL, + `oxyloss` smallint(5) unsigned NOT NULL, + `toxloss` smallint(5) unsigned NOT NULL, + `cloneloss` smallint(5) unsigned NOT NULL, + `staminaloss` smallint(5) unsigned NOT NULL, + `last_words` varchar(255) DEFAULT NULL, + `suicide` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `feedback` +-- + +DROP TABLE IF EXISTS `feedback`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `feedback` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `key_name` varchar(32) NOT NULL, + `key_type` enum('text', 'amount', 'tally', 'nested tally', 'associative') NOT NULL, + `version` tinyint(3) unsigned NOT NULL, + `json` json NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `ipintel` +-- + +DROP TABLE IF EXISTS `ipintel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ipintel` ( + `ip` int(10) unsigned NOT NULL, + `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `intel` double NOT NULL DEFAULT '0', + PRIMARY KEY (`ip`), + KEY `idx_ipintel` (`ip`,`intel`,`date`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `legacy_population` +-- + +DROP TABLE IF EXISTS `legacy_population`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `legacy_population` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `playercount` int(11) DEFAULT NULL, + `admincount` int(11) DEFAULT NULL, + `time` datetime NOT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `library` +-- + +DROP TABLE IF EXISTS `library`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `library` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `author` varchar(45) NOT NULL, + `title` varchar(45) NOT NULL, + `content` text NOT NULL, + `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, + `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', + `datetime` datetime NOT NULL, + `deleted` tinyint(1) unsigned DEFAULT NULL, + `round_id_created` int(11) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `deleted_idx` (`deleted`), + KEY `idx_lib_id_del` (`id`,`deleted`), + KEY `idx_lib_del_title` (`deleted`,`title`), + KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `messages` +-- + +DROP TABLE IF EXISTS `messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `messages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` enum('memo','message','message sent','note','watchlist entry') NOT NULL, + `targetckey` varchar(32) NOT NULL, + `adminckey` varchar(32) NOT NULL, + `text` varchar(2048) NOT NULL, + `timestamp` datetime NOT NULL, + `server` varchar(32) DEFAULT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `secret` tinyint(1) unsigned NOT NULL, + `expire_timestamp` datetime DEFAULT NULL, + `severity` enum('high','medium','minor','none') DEFAULT NULL, + `lasteditor` varchar(32) DEFAULT NULL, + `edits` text, + `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`, `deleted`), + KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`, `deleted`), + KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`, `deleted`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `role_time` +-- + +DROP TABLE IF EXISTS `role_time`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; + +CREATE TABLE `role_time` +( `ckey` VARCHAR(32) NOT NULL , + `job` VARCHAR(32) NOT NULL , + `minutes` INT UNSIGNED NOT NULL, + PRIMARY KEY (`ckey`, `job`) + ) ENGINE = InnoDB; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `role_time` +-- + +DROP TABLE IF EXISTS `role_time_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; + +CREATE TABLE IF NOT EXISTS `role_time_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `ckey` varchar(32) NOT NULL, + `job` varchar(128) NOT NULL, + `delta` int(11) NOT NULL, + `datetime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`id`), + KEY `ckey` (`ckey`), + KEY `job` (`job`), + KEY `datetime` (`datetime`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `player` +-- + +DROP TABLE IF EXISTS `player`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `player` ( + `ckey` varchar(32) NOT NULL, + `byond_key` varchar(32) DEFAULT NULL, + `firstseen` datetime NOT NULL, + `firstseen_round_id` int(11) unsigned NOT NULL, + `lastseen` datetime NOT NULL, + `lastseen_round_id` int(11) unsigned NOT NULL, + `ip` int(10) unsigned NOT NULL, + `computerid` varchar(32) NOT NULL, + `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', + `accountjoindate` DATE DEFAULT NULL, + `flags` smallint(5) unsigned DEFAULT '0' NOT NULL, + PRIMARY KEY (`ckey`), + KEY `idx_player_cid_ckey` (`computerid`,`ckey`), + KEY `idx_player_ip_ckey` (`ip`,`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_option` +-- + +DROP TABLE IF EXISTS `poll_option`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `poll_option` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pollid` int(11) NOT NULL, + `text` varchar(255) NOT NULL, + `minval` int(3) DEFAULT NULL, + `maxval` int(3) DEFAULT NULL, + `descmin` varchar(32) DEFAULT NULL, + `descmid` varchar(32) DEFAULT NULL, + `descmax` varchar(32) DEFAULT NULL, + `default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `idx_pop_pollid` (`pollid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_question` +-- + +DROP TABLE IF EXISTS `poll_question`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `poll_question` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL, + `starttime` datetime NOT NULL, + `endtime` datetime NOT NULL, + `question` varchar(255) NOT NULL, + `adminonly` tinyint(1) unsigned NOT NULL, + `multiplechoiceoptions` int(2) DEFAULT NULL, + `createdby_ckey` varchar(32) DEFAULT NULL, + `createdby_ip` int(10) unsigned NOT NULL, + `dontshow` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`), + KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`), + KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_textreply` +-- + +DROP TABLE IF EXISTS `poll_textreply`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `poll_textreply` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL, + `pollid` int(11) NOT NULL, + `ckey` varchar(32) NOT NULL, + `ip` int(10) unsigned NOT NULL, + `replytext` varchar(2048) NOT NULL, + `adminrank` varchar(32) NOT NULL DEFAULT 'Player', + PRIMARY KEY (`id`), + KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_vote` +-- + +DROP TABLE IF EXISTS `poll_vote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `poll_vote` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL, + `pollid` int(11) NOT NULL, + `optionid` int(11) NOT NULL, + `ckey` varchar(32) NOT NULL, + `ip` int(10) unsigned NOT NULL, + `adminrank` varchar(32) NOT NULL, + `rating` int(2) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`), + KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `round` +-- +DROP TABLE IF EXISTS `round`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `round` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `initialize_datetime` DATETIME NOT NULL, + `start_datetime` DATETIME NULL, + `shutdown_datetime` DATETIME NULL, + `end_datetime` DATETIME NULL, + `server_ip` INT(10) UNSIGNED NOT NULL, + `server_port` SMALLINT(5) UNSIGNED NOT NULL, + `commit_hash` CHAR(40) NULL, + `game_mode` VARCHAR(32) NULL, + `game_mode_result` VARCHAR(64) NULL, + `end_state` VARCHAR(64) NULL, + `shuttle_name` VARCHAR(64) NULL, + `map_name` VARCHAR(32) NULL, + `station_name` VARCHAR(80) NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +-- +-- Table structure for table `schema_revision` +-- +DROP TABLE IF EXISTS `schema_revision`; +CREATE TABLE `schema_revision` ( + `major` TINYINT(3) unsigned NOT NULL, + `minor` TINYINT(3) unsigned NOT NULL, + `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`major`, `minor`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +DELIMITER $$ +CREATE TRIGGER `role_timeTlogupdate` AFTER UPDATE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes); +END +$$ +CREATE TRIGGER `role_timeTloginsert` AFTER INSERT ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes); +END +$$ +CREATE TRIGGER `role_timeTlogdelete` AFTER DELETE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes); +END +$$ + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/TGS3.json b/TGS3.json index 2a2b80cf95..39b75bd913 100644 --- a/TGS3.json +++ b/TGS3.json @@ -1,22 +1,22 @@ -{ - "documentation": "/tg/station server 3 configuration file", - "changelog": { - "script": "tools/ss13_genchangelog.py", - "arguments": "html/changelog.html html/changelogs", - "pip_dependancies": [ - "PyYaml", - "beautifulsoup4" - ] - }, - "synchronize_paths": [ - "html/changelog.html", - "html/changelogs/*" - ], - "static_directories": [ - "config", - "data" - ], - "dlls": [ - "libmariadb.dll" - ] - } +{ + "documentation": "/tg/station server 3 configuration file", + "changelog": { + "script": "tools/ss13_genchangelog.py", + "arguments": "html/changelog.html html/changelogs", + "pip_dependancies": [ + "PyYaml", + "beautifulsoup4" + ] + }, + "synchronize_paths": [ + "html/changelog.html", + "html/changelogs/*" + ], + "static_directories": [ + "config", + "data" + ], + "dlls": [ + "libmariadb.dll" + ] + } diff --git a/_maps/boxstation.json b/_maps/boxstation.json index 143fcae5bc..3c71c654fa 100644 --- a/_maps/boxstation.json +++ b/_maps/boxstation.json @@ -1,11 +1,11 @@ -{ - "map_name": "Box Station", - "map_path": "map_files/BoxStation", - "map_file": "BoxStation.dmm", - "shuttles": { - "cargo": "cargo_box", - "ferry": "ferry_fancy", - "whiteship": "whiteship_box", - "emergency": "emergency_box" - } -} +{ + "map_name": "Box Station", + "map_path": "map_files/BoxStation", + "map_file": "BoxStation.dmm", + "shuttles": { + "cargo": "cargo_box", + "ferry": "ferry_fancy", + "whiteship": "whiteship_box", + "emergency": "emergency_box" + } +} diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 4eea726f74..87178c32f3 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -2981,14 +2981,14 @@ /turf/open/floor/plating, /area/security/main) "afS" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Brig EVA Storage"; - req_access_txt = "3" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Brig EVA Storage"; + req_access_txt = "1" + }, /turf/open/floor/plasteel/dark, /area/security/brig) "afT" = ( @@ -6308,7 +6308,9 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "alF" = ( -/obj/machinery/atmospherics/components/unary/tank/air, +/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "alG" = ( @@ -6702,28 +6704,21 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "amD" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, +/obj/item/trash/sosjerky, /turf/open/floor/plating, /area/maintenance/port/fore) "amE" = ( -/obj/structure/bed, -/obj/effect/landmark/xeno_spawn, -/obj/item/bedsheet, +/obj/item/electronics/airalarm, +/obj/item/circuitboard/machine/seed_extractor, +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "amF" = ( -/obj/machinery/computer/slot_machine{ - balance = 15; - money = 500 - }, -/obj/item/coin/iron, -/obj/item/coin/diamond, -/obj/item/coin/diamond, -/obj/item/coin/diamond, +/obj/machinery/atmospherics/components/unary/tank/air, /turf/open/floor/plating, /area/maintenance/port/fore) "amG" = ( @@ -7000,8 +6995,10 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "anj" = ( -/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ - dir = 8 +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -7012,23 +7009,25 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "anl" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 - }, +/obj/structure/bed, +/obj/effect/landmark/xeno_spawn, +/obj/item/bedsheet, /turf/open/floor/plating, /area/maintenance/port/fore) "anm" = ( -/obj/item/trash/sosjerky, +/obj/machinery/computer/slot_machine{ + balance = 15; + money = 500 + }, +/obj/item/coin/iron, +/obj/item/coin/diamond, +/obj/item/coin/diamond, +/obj/item/coin/diamond, /turf/open/floor/plating, /area/maintenance/port/fore) "ann" = ( -/obj/item/electronics/airalarm, -/obj/item/circuitboard/machine/seed_extractor, -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) "ano" = ( @@ -7201,16 +7200,21 @@ /turf/open/floor/plating, /area/maintenance/solars/port/fore) "anJ" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "anK" = ( -/obj/effect/decal/cleanable/egg_smudge, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb, /turf/open/floor/plating, /area/maintenance/port/fore) "anL" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/vomit, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "anM" = ( @@ -7413,8 +7417,8 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aok" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 6 +/obj/structure/chair{ + dir = 1 }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -7435,8 +7439,10 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aoo" = ( -/obj/structure/rack, -/obj/item/circuitboard/machine/monkey_recycler, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "aop" = ( @@ -7697,21 +7703,21 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aoR" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 10 }, +/obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/port/fore) "aoS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plating, /area/maintenance/port/fore) "aoT" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -7719,17 +7725,13 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 9 }, -/obj/structure/bed, -/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/port/fore) "aoV" = ( /turf/open/space, /area/space) "aoW" = ( -/obj/structure/table, -/obj/item/stamp, -/obj/item/poster/random_official, +/obj/structure/grille, /turf/open/floor/plating, /area/maintenance/port/fore) "aoX" = ( @@ -8073,31 +8075,37 @@ /turf/open/floor/plasteel/dark, /area/security/brig) "apL" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/machinery/power/apc{ + areastring = "/area/maintenance/port/fore"; + dir = 1; + name = "Port Bow Maintenance APC"; + pixel_x = -1; + pixel_y = 26 }, -/turf/open/floor/plasteel, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, /area/maintenance/port/fore) "apM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/closed/wall, /area/maintenance/port/fore) "apN" = ( /turf/open/floor/plating, /area/construction/mining/aux_base) "apO" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 5 }, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "apP" = ( -/obj/effect/spawner/structure/window, +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "apQ" = ( @@ -8554,23 +8562,6 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/port/fore) -"aqK" = ( -/obj/structure/chair/stool, -/turf/open/floor/plasteel, -/area/maintenance/port/fore) -"aqL" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"aqM" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 10 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/port/fore) "aqN" = ( /obj/structure/closet/secure_closet/warden, /obj/structure/sign/poster/official/ion_rifle{ @@ -8591,23 +8582,20 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "aqO" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plating, /area/maintenance/port/fore) "aqP" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/port/fore"; - dir = 1; - name = "Port Bow Maintenance APC"; - pixel_x = -1; - pixel_y = 26 +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -8925,30 +8913,18 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"arF" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 5 - }, -/turf/closed/wall, -/area/maintenance/port/fore) "arG" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/closed/wall, +/obj/effect/decal/cleanable/glass, +/obj/structure/table_frame, +/turf/open/floor/plating, /area/maintenance/port/fore) "arH" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, /area/maintenance/port/fore) "arI" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -8956,11 +8932,8 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "arJ" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/door/airlock/maintenance/abandoned{ + req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -8968,44 +8941,38 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "arK" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 - }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, /area/maintenance/port/fore) "arL" = ( -/obj/structure/cable{ - icon_state = "1-8" +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/turf/open/floor/plating, /area/maintenance/port/fore) "arM" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/turf/open/floor/plating, /area/maintenance/port/fore) "arN" = ( -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" }, /turf/open/floor/plating, /area/maintenance/port/fore) "arO" = ( -/obj/item/clothing/gloves/color/rainbow, -/obj/item/clothing/head/soft/rainbow, -/obj/item/clothing/shoes/sneakers/rainbow, -/obj/item/clothing/under/color/rainbow, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/maintenance/port/fore) "arP" = ( @@ -9106,12 +9073,15 @@ /turf/open/floor/plasteel/dark, /area/security/warden) "asc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "asd" = ( @@ -9121,11 +9091,9 @@ /turf/closed/wall, /area/crew_quarters/dorms) "ase" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 + icon_state = "1-2" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -9168,26 +9136,17 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "ash" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/atmospherics/components/trinary/filter{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/port/fore) "asi" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -9460,8 +9419,9 @@ /turf/open/floor/carpet, /area/crew_quarters/dorms) "asO" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, /area/maintenance/port/fore) "asP" = ( /obj/structure/chair/stool, @@ -9632,10 +9592,10 @@ /turf/open/floor/wood, /area/crew_quarters/dorms) "atn" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 }, -/turf/closed/wall, +/turf/open/floor/plating, /area/maintenance/port/fore) "atp" = ( /obj/machinery/door/airlock/external{ @@ -9644,10 +9604,11 @@ /turf/open/floor/plating, /area/construction/mining/aux_base) "atq" = ( +/obj/item/wrench, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall, +/turf/open/floor/plating, /area/maintenance/port/fore) "atr" = ( /obj/structure/cable{ @@ -9764,14 +9725,18 @@ /turf/open/floor/plating, /area/security/vacantoffice/b) "atL" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/maintenance/port/fore) "atM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" }, -/turf/closed/wall, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "atN" = ( /obj/structure/cable{ @@ -9787,25 +9752,24 @@ /turf/closed/wall, /area/maintenance/port/fore) "atP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/light/small{ + dir = 1 }, -/turf/closed/wall, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "atS" = ( /turf/closed/wall, /area/space/nearstation) "atU" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 }, /turf/open/floor/plating, /area/maintenance/port/fore) "atW" = ( /obj/structure/chair/stool, -/turf/open/floor/plating, +/turf/open/floor/plasteel, /area/maintenance/port/fore) "atY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -10109,50 +10073,43 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "auV" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 5 + }, +/turf/open/floor/plating, /area/maintenance/port/fore) "auX" = ( -/obj/structure/mirror{ - icon_state = "mirror_broke"; - pixel_y = 28 +/obj/machinery/door/airlock/external{ + name = "External Access"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 }, -/obj/machinery/iv_drip, /turf/open/floor/plating, /area/maintenance/port/fore) "auY" = ( -/obj/structure/mirror{ - icon_state = "mirror_broke"; - pixel_y = 28 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 }, -/obj/item/shard{ - icon_state = "medium" - }, -/obj/item/circuitboard/computer/operating, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "auZ" = ( -/obj/structure/frame/computer, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/port/fore) "ava" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/chair, -/obj/item/reagent_containers/blood/random, +/obj/structure/table/glass, +/obj/item/storage/bag/trash, /turf/open/floor/plating, /area/maintenance/port/fore) "avb" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "damaged3" - }, -/area/space/nearstation) +/obj/structure/bookcase/random/reference, +/turf/open/floor/wood, +/area/maintenance/port/fore) "avc" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 4; - name = "4maintenance loot spawner" - }, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/maintenance/port/fore) "avg" = ( /obj/machinery/door/airlock{ @@ -10472,7 +10429,8 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avS" = ( -/obj/item/wrench, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "avT" = ( @@ -10488,38 +10446,31 @@ /turf/open/space, /area/space/nearstation) "avU" = ( -/obj/item/paper/crumpled, -/turf/open/floor/plasteel/airless{ - icon_state = "damaged2" +/obj/structure/chair/comfy/plywood{ + dir = 8 }, -/area/space/nearstation) +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/port/fore) "avV" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/burger/ghost, +/turf/open/floor/wood, /area/maintenance/port/fore) "avW" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" +/turf/open/floor/plating{ + icon_state = "platingdmg2" }, -/turf/open/floor/plating, /area/maintenance/port/fore) "avX" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/chair/stool, +/obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/port/fore) "avY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal, /turf/open/floor/plating, -/area/maintenance/fore) +/area/maintenance/port/fore) "avZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -11026,18 +10977,26 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "axe" = ( -/obj/machinery/sleeper{ - dir = 4 +/obj/structure/mirror{ + icon_state = "mirror_broke"; + pixel_y = 28 }, +/obj/machinery/iv_drip, /turf/open/floor/plating, /area/maintenance/port/fore) "axf" = ( -/obj/effect/landmark/blobstart, +/obj/structure/frame/computer, /turf/open/floor/plating, /area/maintenance/port/fore) "axg" = ( -/obj/structure/table/glass, -/obj/item/storage/bag/trash, +/obj/structure/mirror{ + icon_state = "mirror_broke"; + pixel_y = 28 + }, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/item/circuitboard/computer/operating, /turf/open/floor/plating, /area/maintenance/port/fore) "axh" = ( @@ -11055,17 +11014,17 @@ }, /area/hallway/secondary/entry) "axi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/chair, +/obj/item/reagent_containers/blood/random, /turf/open/floor/plating, /area/maintenance/port/fore) "axj" = ( -/obj/machinery/door/airlock/maintenance/abandoned{ - name = "Firefighting equipment"; - req_access_txt = "12" - }, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/maintenance/port/fore) "axk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -11074,16 +11033,12 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "axl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/maintenance/port/fore) "axn" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/structure/closet/crate/coffin, /turf/open/floor/plating, /area/maintenance/port/fore) "axo" = ( @@ -11249,10 +11204,12 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "axK" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/structure/sign/plaques/kiddie/library{ + pixel_y = 29 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/turf/closed/wall, /area/maintenance/port/fore) "axL" = ( /obj/machinery/holopad, @@ -11430,21 +11387,21 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "ays" = ( -/obj/structure/closet/wardrobe/white, -/obj/item/clothing/shoes/jackboots, -/obj/item/reagent_containers/blood/random, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/turf/open/floor/plating, +/obj/structure/bookcase/random/fiction, +/turf/open/floor/wood, /area/maintenance/port/fore) "ayt" = ( -/obj/structure/table/glass, -/obj/item/hemostat, -/turf/open/floor/plating, +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood, /area/maintenance/port/fore) "ayu" = ( -/obj/structure/table/glass, -/obj/item/restraints/handcuffs/cable/zipties, -/obj/item/reagent_containers/blood/random, +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/obj/item/surgical_drapes, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "ayv" = ( @@ -11465,8 +11422,18 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "ayx" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper{ + icon_state = "paper_onfire"; + name = "Burning Note"; + text = "I sign here with my last breath to sell my soul to curse you all..." + }, +/obj/item/pen/fountain{ + pixel_x = 5; + pixel_y = 1 + }, +/turf/open/floor/wood, /area/maintenance/port/fore) "ayy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11861,10 +11828,8 @@ /turf/closed/wall, /area/hydroponics/garden) "azG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/closed/wall, +/obj/item/ectoplasm, +/turf/open/floor/wood, /area/maintenance/port/fore) "azH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -12282,10 +12247,11 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "aAW" = ( @@ -13082,8 +13048,9 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aCW" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/sleeper{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "aCX" = ( @@ -14089,7 +14056,6 @@ /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) "aFJ" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -16437,10 +16403,9 @@ /turf/open/floor/plasteel/dark, /area/chapel/main) "aLt" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 +/turf/open/floor/wood{ + icon_state = "wood-broken" }, -/turf/closed/wall, /area/maintenance/port/fore) "aLu" = ( /obj/machinery/door/airlock/engineering{ @@ -29676,11 +29641,11 @@ /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bsU" = ( -/obj/structure/table/optable{ - name = "Robotics Operating Table" +/mob/living/simple_animal/hostile/retaliate/ghost, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, -/obj/item/surgical_drapes, -/turf/open/floor/plating, +/turf/open/floor/wood, /area/maintenance/port/fore) "bsV" = ( /obj/structure/cable{ @@ -37571,33 +37536,21 @@ /area/maintenance/aft) "bKK" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - areastring = "/area/medical/medbay/central"; - dir = 4; - name = "Medbay APC"; - pixel_x = 24 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) "bKL" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/machinery/power/apc{ + areastring = "/area/medical/medbay/central"; + dir = 1; + name = "Medbay Central APC"; + pixel_y = 24 }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-2" }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "bKM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -38466,11 +38419,9 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bNb" = ( -/obj/item/airlock_painter, -/obj/structure/lattice, -/obj/structure/closet, -/turf/open/space, -/area/space/nearstation) +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/wood, +/area/maintenance/port/fore) "bNc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -38877,10 +38828,11 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "bOi" = ( -/turf/open/floor/plasteel/airless{ - icon_state = "damaged5" +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/area/space/nearstation) +/area/maintenance/port/fore) "bOj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -45549,7 +45501,11 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; + req_access_txt = "24" + }, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cfW" = ( /obj/structure/cable{ @@ -46032,11 +45988,8 @@ /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "che" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock"; +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; req_access_txt = "24" }, /turf/open/floor/plating, @@ -46094,6 +46047,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/reagent_dispensers/fueltank, +/obj/item/storage/toolbox/emergency, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "chm" = ( @@ -46419,7 +46374,6 @@ /obj/effect/turf_decal/bot{ dir = 1 }, -/obj/structure/reagent_dispensers/fueltank, /obj/structure/extinguisher_cabinet{ pixel_x = -5; pixel_y = 30 @@ -46427,6 +46381,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel, /area/engine/engineering) "cig" = ( @@ -46586,7 +46541,6 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "ciF" = ( @@ -46892,8 +46846,6 @@ /turf/open/floor/plasteel, /area/construction) "cjp" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/item/storage/toolbox/emergency, /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, @@ -51069,6 +51021,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"cwS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) "cwT" = ( /obj/machinery/camera{ c_tag = "Arrivals Escape Pod 2"; @@ -51216,12 +51172,17 @@ /turf/open/floor/plating, /area/hallway/secondary/entry) "cyC" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" +/obj/machinery/door/airlock/maintenance/abandoned{ + name = "abandoned library"; + req_access_txt = "12" }, -/turf/open/floor/plating, +/obj/structure/barricade/wooden{ + name = "wooden barricade (CLOSED)" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating/rust, /area/maintenance/port/fore) "cyD" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -52126,6 +52087,11 @@ /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) +"cCs" = ( +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) "cCt" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ @@ -52210,7 +52176,7 @@ /area/space/nearstation) "cCS" = ( /obj/structure/lattice, -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/engine/atmos) "cCT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -52244,6 +52210,12 @@ /obj/machinery/vending/engivend, /turf/open/floor/plasteel, /area/engine/engineering) +"cDs" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/port/fore) "cDB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52311,6 +52283,12 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) +"cGf" = ( +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "cGz" = ( /obj/structure/table/wood, /obj/item/instrument/violin, @@ -52878,6 +52856,9 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/security/prison) +"cPb" = ( +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "cPn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer, @@ -53260,27 +53241,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) -"cTL" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark, -/area/medical/morgue) -"cTM" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/department/medical/morgue"; - dir = 4; - name = "Morgue Maintenance APC"; - pixel_x = 26 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/dark, -/area/medical/morgue) "cTO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53371,6 +53331,10 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/security/brig) +"dal" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating, +/area/maintenance/port/fore) "daq" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -53407,6 +53371,13 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"ddI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/fore) "ddM" = ( /obj/structure/sign/poster/official/the_owl{ pixel_x = 32 @@ -53636,6 +53607,12 @@ /mob/living/simple_animal/bot/secbot/grievous/toy, /turf/open/floor/light/colour_cycle/dancefloor_a, /area/maintenance/starboard/aft) +"dIu" = ( +/obj/structure/chair/sofa{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "dJL" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53746,6 +53723,15 @@ dir = 4 }, /area/crew_quarters/fitness/pool) +"edj" = ( +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "edA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -53804,6 +53790,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/execution/transfer) +"enJ" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"enS" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "eoD" = ( /obj/structure/table/wood/poker, /turf/open/floor/plating, @@ -53901,6 +53898,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/port) +"eyq" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on, +/turf/open/floor/plating, +/area/maintenance/port/fore) "eyM" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -53942,6 +53943,17 @@ /obj/machinery/vending/cola/space_up, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"eCm" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Airlock"; + req_access_txt = "24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/atmos) "eCr" = ( /obj/structure/closet{ name = "Suit Closet" @@ -54104,6 +54116,14 @@ /obj/effect/turf_decal/bot, /turf/open/floor/engine, /area/science/storage) +"fcd" = ( +/obj/structure/chair/sofa/right{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/port/fore) "fcn" = ( /obj/structure/lattice, /turf/closed/wall/r_wall, @@ -54155,6 +54175,16 @@ dir = 4 }, /area/crew_quarters/theatre) +"fhu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/clothing/under/costume/owl, +/obj/item/clothing/suit/toggle/owlwings, +/obj/item/clothing/mask/gas/owl_mask, +/turf/open/floor/plating, +/area/maintenance/port/fore) "fiy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -54205,6 +54235,12 @@ /obj/item/seeds/cannabis/white, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"fmJ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "fne" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -54614,6 +54650,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"geg" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table, +/obj/item/trash/plate, +/obj/item/reagent_containers/food/snacks/egg/yellow, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gfC" = ( /obj/effect/turf_decal/tile/red, /obj/structure/chair{ @@ -54689,11 +54734,10 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness) "gsM" = ( -/obj/machinery/door/airlock/maintenance/abandoned{ - req_access_txt = "12" - }, +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, -/area/maintenance/fore) +/area/maintenance/port/fore) "gvX" = ( /turf/open/floor/plasteel/yellowsiding, /area/crew_quarters/fitness/pool) @@ -54797,6 +54841,11 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"gJN" = ( +/obj/structure/rack, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gKl" = ( /obj/structure/cable/white, /obj/structure/cable/white{ @@ -54807,6 +54856,16 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"gKo" = ( +/obj/structure/table/glass, +/obj/item/restraints/handcuffs/cable/zipties, +/obj/item/reagent_containers/blood/random, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"gKG" = ( +/obj/structure/bedsheetbin/towel, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "gLz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -54817,14 +54876,15 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"gLG" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gLH" = ( -/obj/machinery/door/airlock/external{ - name = "External Access"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, +/obj/structure/closet/wardrobe/white, +/obj/item/clothing/shoes/jackboots, +/obj/item/reagent_containers/blood/random, +/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, /turf/open/floor/plating, /area/maintenance/port/fore) "gMl" = ( @@ -54870,6 +54930,12 @@ }, /turf/open/floor/plating, /area/crew_quarters/fitness) +"gQr" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "gas to sauna" + }, +/turf/open/floor/plating, +/area/maintenance/fore) "gQX" = ( /obj/machinery/button/door{ id = "LockerShitter4"; @@ -54934,6 +55000,19 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"gYo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "gZG" = ( /obj/structure/closet/crate/freezer/surplus_limbs, /obj/item/reagent_containers/glass/beaker/synthflesh, @@ -55001,6 +55080,10 @@ /obj/item/reagent_containers/food/snacks/cherrycupcake, /turf/open/floor/wood, /area/crew_quarters/bar) +"hho" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/port/fore) "hiV" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -55034,6 +55117,12 @@ }, /turf/closed/wall, /area/crew_quarters/dorms) +"hnc" = ( +/obj/structure/chair/pew/left{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "hnU" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -55066,6 +55155,10 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"htu" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plating, +/area/maintenance/port/fore) "hxn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/green/visible, @@ -55088,6 +55181,11 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"hCn" = ( +/obj/structure/closet/firecloset, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) "hGH" = ( /obj/machinery/door/airlock{ desc = "Private study room where nerds are probably playing Dungeons and Dragons 13e, or a place for blood cult rituals."; @@ -55453,6 +55551,17 @@ /obj/effect/decal/cleanable/blood/gibs/ipc/limb, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) +"iII" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet, +/obj/item/clothing/head/bowler, +/obj/item/clothing/neck/tie/red, +/obj/item/clothing/mask/cigarette/pipe, +/obj/item/clothing/mask/fakemoustache, +/turf/open/floor/plating, +/area/maintenance/port/fore) "iIS" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -55461,6 +55570,10 @@ /obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plating, /area/engine/atmos) +"iKV" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating, +/area/engine/atmos) "iLJ" = ( /obj/item/reagent_containers/glass/bucket, /mob/living/simple_animal/pet/bumbles, @@ -55578,6 +55691,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"jaG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "jaH" = ( /obj/structure/door_assembly/door_assembly_mai, /obj/item/electronics/airlock, @@ -55599,6 +55720,17 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"jbp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/flashlight, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"jbr" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "jdj" = ( /obj/docking_port/stationary/random{ dir = 4; @@ -55670,6 +55802,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"jon" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "gas to sauna" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "jqv" = ( /obj/structure/chair/wood/normal{ dir = 1 @@ -55698,6 +55836,11 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"juy" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/turf/open/floor/plating, +/area/maintenance/port/fore) "juG" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -55803,6 +55946,10 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"jDZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/closed/wall, +/area/maintenance/port/fore) "jEc" = ( /obj/machinery/vr_sleeper{ dir = 8 @@ -55818,6 +55965,13 @@ dir = 1 }, /area/crew_quarters/fitness) +"jFB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "jFH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -55892,6 +56046,13 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"jIW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/fore) "jJF" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/cable{ @@ -55925,6 +56086,11 @@ }, /turf/open/space, /area/space) +"jLJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small, +/turf/open/floor/wood, +/area/maintenance/port/fore) "jLT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55957,6 +56123,13 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"jUV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/port/fore) "jVl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -56104,6 +56277,22 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"kil" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 5 + }, +/turf/open/floor/plating, +/area/engine/atmos) +"kiW" = ( +/obj/machinery/button/door{ + id = "Sauna"; + name = "Sauna Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "kiY" = ( /obj/machinery/door/airlock/external{ name = "Port Docking Bay 4" @@ -56113,6 +56302,13 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) +"klN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "kmw" = ( /obj/structure/chair/comfy/black{ dir = 1 @@ -56158,6 +56354,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"kqo" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/chair/pew{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "kqI" = ( /obj/structure/window, /turf/open/floor/wood, @@ -56197,6 +56402,10 @@ }, /turf/open/floor/plasteel, /area/security/range) +"kuL" = ( +/obj/item/trash/candy, +/turf/open/floor/plating, +/area/maintenance/port/fore) "kvl" = ( /obj/structure/grille, /turf/closed/wall/r_wall, @@ -56212,6 +56421,12 @@ }, /turf/open/floor/wood, /area/bridge/meeting_room) +"kwY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "kxf" = ( /obj/machinery/vr_sleeper{ dir = 4 @@ -56600,6 +56815,12 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"lzk" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 8 + }, +/turf/closed/wall, +/area/maintenance/fore) "lzt" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/stripes/line, @@ -56769,6 +56990,13 @@ }, /turf/closed/wall, /area/crew_quarters/fitness/pool) +"lZN" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Sauna"; + name = "Sauna" + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "maT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -56946,6 +57174,11 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"mwS" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "mxn" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod Three" @@ -57165,6 +57398,13 @@ "naI" = ( /turf/open/space, /area/space/station_ruins) +"nbr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/fore) "nbT" = ( /obj/structure/cable{ icon_state = "0-8" @@ -57278,6 +57518,12 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) +"noL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "noT" = ( /turf/open/floor/wood{ icon_state = "wood-broken4" @@ -57309,6 +57555,12 @@ "nsA" = ( /turf/closed/wall, /area/crew_quarters/abandoned_gambling_den) +"ntt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "nuw" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -57347,12 +57599,10 @@ /turf/closed/wall, /area/maintenance/disposal/incinerator) "nBI" = ( -/obj/item/cigbutt/cigarbutt, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/chair{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "nEj" = ( /obj/effect/spawner/structure/window/reinforced, @@ -57473,6 +57723,11 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"nXg" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "nYe" = ( /obj/structure/safe, /obj/item/clothing/head/bearpelt, @@ -57802,6 +58057,16 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"oCF" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "oDm" = ( /obj/machinery/gulag_teleporter, /turf/open/floor/plasteel, @@ -57985,6 +58250,14 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/fore) +"pkq" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/port/fore) "pkF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/extinguisher_cabinet{ @@ -58056,6 +58329,13 @@ }, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"ppw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "pqe" = ( /obj/structure/chair/sofa, /obj/structure/window{ @@ -58070,6 +58350,19 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"pqR" = ( +/obj/structure/chair/pew/right{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) +"psf" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/sign/poster/official/the_owl{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "psk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58101,6 +58394,14 @@ dir = 1 }, /area/crew_quarters/fitness) +"pvJ" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "pzk" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -58282,6 +58583,12 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"pRj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "pRs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -58317,6 +58624,14 @@ }, /turf/open/floor/plating, /area/engine/atmos) +"pVi" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/maintenance/port/fore) "pYQ" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, @@ -58403,6 +58718,20 @@ }, /turf/closed/wall, /area/quartermaster/miningdock) +"qjo" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"qll" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "qlY" = ( /obj/item/kirbyplants/random, /turf/open/floor/plating{ @@ -58495,6 +58824,12 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/aft) +"qGw" = ( +/obj/structure/chair/pew/right{ + dir = 8 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "qIw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58516,6 +58851,12 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) +"qLy" = ( +/obj/structure/chair/sofa/left{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "qLR" = ( /obj/structure/mirror{ pixel_y = 32 @@ -58610,6 +58951,16 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"qZD" = ( +/obj/effect/decal/cleanable/egg_smudge, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"raH" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "rba" = ( /obj/structure/cable/white{ icon_state = "0-8" @@ -58908,6 +59259,12 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"rGo" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "rGq" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -58940,8 +59297,9 @@ /turf/open/floor/plating, /area/security/brig) "rJw" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, +/obj/structure/table/glass, +/obj/item/hemostat, +/turf/open/floor/plating, /area/maintenance/port/fore) "rKP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -59049,6 +59407,12 @@ dir = 1 }, /area/engine/atmos) +"rWw" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "rXl" = ( /obj/structure/chair/office/light, /obj/machinery/firealarm{ @@ -59060,6 +59424,14 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"rYa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/port/fore) "rZQ" = ( /obj/docking_port/stationary{ dir = 8; @@ -59155,6 +59527,15 @@ /obj/structure/closet/crate, /turf/open/floor/plasteel, /area/engine/atmos) +"spR" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/chair/pew{ + dir = 8 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "sqg" = ( /obj/structure/table/wood, /obj/item/clothing/under/misc/pj/red, @@ -59263,6 +59644,11 @@ icon_state = "wood-broken6" }, /area/maintenance/bar) +"sCa" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/monkey_recycler, +/turf/open/floor/plating, +/area/maintenance/port/fore) "sEi" = ( /obj/machinery/vr_sleeper{ dir = 4 @@ -59433,6 +59819,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/engine_smes) +"sRd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/girder, +/turf/open/floor/plating, +/area/maintenance/port/fore) "sRH" = ( /obj/machinery/autolathe/secure{ name = "public autolathe" @@ -59500,6 +59891,18 @@ /obj/structure/filingcabinet/employment, /turf/open/floor/wood, /area/crew_quarters/heads/captain) +"thg" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "thB" = ( /obj/structure/sign/warning/securearea{ pixel_y = -32 @@ -59559,6 +59962,12 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"tqG" = ( +/obj/structure/chair/pew/left{ + dir = 8 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/fore) "trb" = ( /obj/machinery/light{ dir = 4 @@ -59625,9 +60034,9 @@ /area/crew_quarters/fitness/pool) "tAH" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/engine/atmos) "tCa" = ( /obj/structure/table/wood, /obj/item/instrument/guitar{ @@ -59806,12 +60215,29 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"tVE" = ( +/obj/item/chair/wood{ + dir = 4 + }, +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/port/fore) "tWj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, /turf/open/floor/wood, /area/crew_quarters/theatre) +"tXs" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "tXL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -59825,6 +60251,12 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"tZu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "uaw" = ( /obj/machinery/power/apc{ areastring = "/area/maintenance/bar"; @@ -59905,6 +60337,14 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"ugq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/fore) "ugu" = ( /obj/structure/cable{ icon_state = "1-4" @@ -60095,6 +60535,13 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"uBf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "uCo" = ( /obj/structure/chair{ dir = 1 @@ -60658,6 +61105,15 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/crew_quarters/cryopod) +"vHo" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/door/airlock/external{ + name = "Atmospherics External Airlock"; + req_access_txt = "24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating, +/area/engine/atmos) "vHz" = ( /obj/structure/chair{ dir = 8 @@ -60898,6 +61354,16 @@ "wkN" = ( /turf/closed/wall, /area/science/circuit) +"wlg" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/port/fore) "wly" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -61111,13 +61577,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "wWi" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/door/airlock/external{ - name = "Atmospherics External Airlock"; - req_access_txt = "24" - }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) "wWT" = ( @@ -61184,6 +61645,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) +"xbi" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/fore) "xbn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -61461,6 +61928,13 @@ /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/carpet, /area/library) +"xFM" = ( +/obj/item/clothing/gloves/color/rainbow, +/obj/item/clothing/head/soft/rainbow, +/obj/item/clothing/shoes/sneakers/rainbow, +/obj/item/clothing/under/color/rainbow, +/turf/open/floor/plating, +/area/maintenance/port/fore) "xGQ" = ( /obj/structure/sign/plaques/golden{ pixel_y = 32 @@ -61707,10 +62181,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "yds" = ( -/obj/effect/decal/cleanable/vomit, -/obj/structure/chair{ - dir = 1 - }, +/obj/structure/table, +/obj/item/stamp, +/obj/item/poster/random_official, /turf/open/floor/plating, /area/maintenance/port/fore) "ydD" = ( @@ -61728,6 +62201,12 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/hallway/primary/central) +"ygb" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/turf/open/floor/wood/wood_diagonal, +/area/maintenance/port/fore) "yhx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -74425,15 +74904,15 @@ aaa aaa aaa aaa -aaa -aaa aaf aaf aaf aaf alU +avS atJ amC +amC aKf bEJ axb @@ -74681,16 +75160,16 @@ aaa aaa aaa aaa -aae -aaa aaa aag alU alU alU alU -aCW +rGo amC +aKY +aoW asK alU alU @@ -74939,13 +75418,13 @@ aaa aaa aaa aaa -aaa -aaa aag -cyC +arN amC amC -gLH +auX +arM +ase ase avq aum @@ -75196,20 +75675,20 @@ aaa aaa aaa aaa -aaa -aaa gJi alU alU alU alU -asc -atn -aLt -aue -aue +aqO +alU +alU +kwY +qll aue aue +ayy +ayy aAe aBJ aCs @@ -75454,19 +75933,19 @@ aaa aaa aaa aaa -aaa -aaa alU -apL -aqK +atM +atW +alU +aqO alU -asc -atq aon -amC -axe -ays +aAY +aCW +gLH alU +hho +aKY auT aBI aCY @@ -75710,20 +76189,20 @@ aaa aaa aaa aaa -aaa -aaf alU alU -apM -aqL +atP +auV alU -asc +aqO +alU +axe atq -auX -avS amC amC alU +pvJ +mwS auT aBI aDc @@ -75966,21 +76445,21 @@ aaf aaf aaf aaf -aaa -aaa -aaa +aaf alU -aoS +arO amC aom ank -asc -atq -auZ -bsU +aqO +alU axf +ayu +auZ amC alU +gJN +amC auT aBI aDf @@ -76224,20 +76703,20 @@ aaa aaa aaa aaa -aaa -aaa alU +ash +atU aoR apO -aqM -arF -asc -atq -auY -amC -amC -ayt +aqO alU +axg +aAY +amC +rJw +alU +cGf +aKY aAw aBl aCZ @@ -76480,20 +76959,20 @@ aaf aaf aaf aaf -aaa -aaa -aaa +aaf alU +atn +amC aoT -amC +auY aqO -arG -asc -atq +alU +axi +aAY ava +gKo +alU amC -axg -ayu azF azF azF @@ -76738,19 +77217,19 @@ aaa aaa aaa aaa -aaa -aaa alU alU alU alU -arG -ash -atq -alU +auY +aqO +alU +alU +nBI alU alU alU +amC azF aAP aAP @@ -76995,14 +77474,14 @@ aaa aaa aaa aaa -aaa -aaa -aaf -aaa +gXs ali -aoX -arI -asi +aok +aKY +anJ +asc +aol +aol atr atN atN @@ -77252,18 +77731,18 @@ aaf aaf aaf aaa -aaa -aaa -aaf -aaa +gXs ali +aok amC +anJ +asi +arH +cCs +ann +ann +hCn arH -atP -auV -auV -auV -axK ayh azi aAx @@ -77511,16 +77990,16 @@ alR alR alR alR -alU -alU -alU +apL +pkq +wlg aqP -arJ alU -avb -aaH -bOi -atO +alU +alU +alU +alU +juy asK azF aAT @@ -77769,15 +78248,15 @@ amy ang alR aoj -amC -apP -amC -arH +kuL +anJ +tXs alU -aaH +axj +ayx bNb -aaf -atO +asO +alU asK azF aAS @@ -78026,15 +78505,15 @@ amA ani anI aol -aol -aol -aol -arL +jUV +arI +atL alU +axl avU avb bOi -atO +alU asK azF aAU @@ -78282,17 +78761,17 @@ alS amz anh anH +oCF amC -aok anJ aFJ -arK alU +axK +azG +aLt +jLJ alU -ali -alU -atO -asK +thg azF aAP aAP @@ -78539,16 +79018,16 @@ alR alR alR alR -amC -aom -apP -amC -arN -amC -amC -amC -amC -axi +alU +alU +arJ +alU +alU +ays +asO +bsU +tVE +alU asK azF azF @@ -78792,20 +79271,20 @@ aaf aaa aaa aaa -aaa alU +amF alF -anj -anJ +aoS +apM +enS aoU +aoW alU -amC -arM -alU +ayt avc -asO +pVi avV -atO +alU ayw atN aAV @@ -79049,22 +79528,22 @@ aaf aaf aaf aaf -gXs alU -alF -anl +amF +aoU amC alU -alU -amC -alU -alU apP +arK +amC alU alU -atP -auV -axK +alU +cyC +alU +pRj +cwS +cwS aAN aBL aDd @@ -79306,22 +79785,22 @@ aaf aaa aaa aaa -aaa alU alU ank alU alU -alU +aoW amC -amC -amC -arN -alU avW +axn +alU +nXg +jaG +alU +rYa amC -ayx -atO +sRd aAL aBQ aDb @@ -79563,22 +80042,22 @@ aaS aaa aaa aaa -aaa alU +anj amD -anm -amC -amC -ali amC alU -asO -atL -alU -avX -axf +arG +amC +arK +axn +alU +aoW +ntt +alU +fhu +amC amC -atO aAY aBQ aDl @@ -79820,23 +80299,23 @@ aaS aaf aaf aaf -gXs alU amC +arK amC +ank amC +arL amC -ali +aoW +dal +arK +noL +arH +psf +arK amC -alU -alU -alU -alU -alU -axj -alU -atO -aAY +klN aBQ aDk aDo @@ -80077,23 +80556,23 @@ aaS aaa aaa aaa -aaa alU +anl amE -ann -amC amC alU -amC +qjo alU -arN -atU alU -atU +alU +alU +alU +alU +alU +ntt amC -atJ -atO -aAY +avW +gYo aBQ aDn aDo @@ -80334,23 +80813,23 @@ aaa aaa aaa aaa -aaa alU alU alU -ank -alU -alU -amC -amC -amC amC alU -avc +alU +alU +avX amC -atJ -atO -aAY +arK +amC +amC +jFB +ppw +enJ +amC +iII aBQ aDm aDo @@ -80591,22 +81070,22 @@ aaa aaa aaa aaa -aaa alU -amF +anm alU amC alU +xFM alU -alU -alU +gLG +raH +jon +atU amC +uBf +amC +aKY amC -alU -atM -axl -auV -azG aAY aBQ aDp @@ -80848,21 +81327,21 @@ aaa aaa aaa aaa -aaa alU alU alU +ank +alU +alU +alU +alU +jbr +alU +alU amC -alU -aaH -rJw -arO -amC -amC -avc -atO +ntt axk -ayy +jbp ayy aAO aBN @@ -81106,20 +81585,20 @@ aaa aaa aaa aaa -aaa -aaa ali +aok +qZD anK -ali -aaf +geg alU -rJw -alU -atW -atW -atO -axn +pqR +kqo +hnc alU +amC +ntt +aAY +amC aoX atJ aBQ @@ -81363,19 +81842,19 @@ aaa aaa aaa aaa -aaa -aaa ali +aok +amC aKY -ali -aaf -aoV -aaf +cDs alU -ali -ali -atO -axo +fmJ +ygb +kiW +alU +amC +ntt +nbr ayz ayz ayz @@ -81613,26 +82092,26 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa ali ali +alU +alU +ali +alU +alU +alU +rGo amC -alU -alU -alU -aaf -aoV -aae -aaH -avY -axo +amC +amC +lZN +cPb +ygb +cPb +lZN +amC +jIW +ddI arP fgG rqW @@ -81867,29 +82346,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aae aaa aaa ali -yds +anL +avY +tZu amC aon -aoW +yds +alU +amC +amC +amC +htu +alU +edj +rWw +gKG arP -aqQ -aqQ -aqQ -aqQ -avZ -axo +aqR +awb +ugq arP rPU fne @@ -82127,24 +82606,24 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa ali +amC +avY aKY amC amC amC -gsM -aqR -aqR +ank +amC +fcd +dIu +qLy +alU +tqG +spR +qGw +arP aGh -aqR awb axo arP @@ -82384,21 +82863,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa ali -nBI -anL aoo +avY +amC +gsM +sCa aoX +alU +ali +ali +ali +ali +alU arP -arP +lzk arP arP arP @@ -82641,21 +83120,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -ali ali ali alU alU -arP -aqR +ali +alU +alU +alU +aaa +aaa +aaa +eyq +jDZ +gQr +xbi wje rQJ uUi @@ -97122,9 +97601,9 @@ cCI cCJ cCI cCP -bLK +bMK chg -bLK +bMK aaf aoV aoV @@ -97637,11 +98116,11 @@ cdD bOh cCQ cCS -wWi +chg cCS -aaa -aaa -aaa +bMK +bMK +bMK gXs aaa aaa @@ -97894,11 +98373,11 @@ cbH bOh cCG tAH -dCt -fty -dCt -dCt -dCt +iKV +vHo +iKV +iKV +eCm fty dCt dCt @@ -98150,12 +98629,12 @@ ccD cbH bOh aaf -aaa -aaa -aaa -aaa -aaa -aoV +bMK +chg +bMK +bMK +bMK +bMK aaf aoV aoV @@ -98407,9 +98886,9 @@ bOh bOh bOh xcl -caJ -ciC -gXs +wWi +kil +cCS gXs tSo kcx @@ -98885,8 +99364,8 @@ bfK bfK bfK bof -bhh -bsx +bKL +brf btV bvh bwH @@ -99157,7 +99636,7 @@ bDR bDR bIn bJC -bKL +bUZ bLT bLT bLT @@ -101451,7 +101930,7 @@ bfL bhp biB biB -cTL +biB bkU bmX bpE @@ -101708,7 +102187,7 @@ bfL bhq bhm bkb -cTM +bhm bla bmZ bpH diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index be0c53aab4..a4d34264ae 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -21880,7 +21880,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/reagent_dispensers/fueltank, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel, /area/engine/secure_construction) "aVY" = ( @@ -70916,8 +70916,9 @@ /area/science/mixing) "guK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/lattice, /turf/open/space/basic, -/area/space) +/area/space/nearstation) "gDY" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/cyan/visible, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 0ac49d7328..071a9b4fef 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1309,6 +1309,45 @@ /obj/item/toy/poolnoodle/blue, /turf/open/floor/plasteel/dark, /area/crew_quarters/fitness/pool) +"acy" = ( +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "cargounload" + }, +/obj/effect/turf_decal/tile/brown, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"acz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"acA" = ( +/obj/machinery/conveyor{ + dir = 9; + id = "cargounload" + }, +/turf/open/floor/plating, +/area/quartermaster/storage) +"acB" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light/floor, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "acF" = ( /obj/docking_port/stationary{ dir = 2; @@ -12918,18 +12957,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aAH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "cargounload" - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aAI" = ( /obj/structure/cable/white, /obj/structure/cable/white{ @@ -13616,14 +13643,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aBZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aCa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown, @@ -14264,23 +14283,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aDf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "Supply Dock Airlock"; - req_access_txt = "31" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aDg" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -49388,7 +49390,7 @@ }, /obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage"; - req_access_txt = "3" + req_access_txt = "1" }, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -81569,12 +81571,12 @@ /turf/open/floor/plasteel, /area/engine/storage) "cHt" = ( -/obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, /obj/machinery/status_display/ai{ pixel_y = -32 }, /obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel, /area/engine/storage) "cHu" = ( @@ -110339,8 +110341,8 @@ }, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/binary/pump/on{ - name = "Space Loop Out"; - dir = 4 + dir = 4; + name = "Space Loop Out" }, /turf/open/floor/plasteel, /area/science/mixing) @@ -125650,14 +125652,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/electrical) -"hdH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor{ - dir = 9; - id = "cargoload" - }, -/turf/open/floor/plating, -/area/quartermaster/storage) "hic" = ( /obj/structure/table/reinforced, /obj/item/integrated_electronics/analyzer, @@ -171852,7 +171846,7 @@ azy aAG aDb aAG -aAG +acB azy azy aAG @@ -173134,7 +173128,7 @@ axk ayB azE azE -aBZ +acz azE azE azE @@ -173390,9 +173384,9 @@ aoF axl ayC azF -aAH -aCa -aCa +acy +aEf +aEf aEf aEf aCa @@ -173648,8 +173642,8 @@ axm ayD ayD ayD -hdH -azD +acA +aEe aaq azD kam @@ -173906,7 +173900,7 @@ ayE azG aAI aCb -aDf +aFk avW aFk aGD diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 245f67833e..3ff364fa5c 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -14492,7 +14492,6 @@ /turf/open/floor/plating, /area/maintenance/starboard) "aym" = ( -/obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -14503,6 +14502,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel/dark, /area/engine/engineering) "ayn" = ( @@ -85507,8 +85507,8 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/atmospherics/components/binary/pump/on{ - name = "Space Loop Out"; - dir = 8 + dir = 8; + name = "Space Loop Out" }, /turf/open/floor/plating{ icon_state = "panelscorched" diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm index a219a333f1..71f3ed6b1a 100644 --- a/_maps/map_files/LambdaStation/lambda.dmm +++ b/_maps/map_files/LambdaStation/lambda.dmm @@ -53981,8 +53981,8 @@ pixel_y = -26 }, /obj/structure/cable, -/obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/bot, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel, /area/engine/storage_shared) "cvh" = ( @@ -67078,12 +67078,12 @@ /area/engine/atmos) "kgv" = ( /obj/structure/railing{ - icon_state = "railing"; - dir = 4 + dir = 4; + icon_state = "railing" }, /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /turf/open/floor/plasteel/stairs/old, /area/maintenance/department/medical) @@ -71237,12 +71237,12 @@ "tcW" = ( /obj/structure/stairs/west, /obj/structure/railing{ - icon_state = "railing"; - dir = 4 + dir = 4; + icon_state = "railing" }, /obj/structure/railing{ - icon_state = "railing"; - dir = 8 + dir = 8; + icon_state = "railing" }, /turf/open/floor/plating, /area/maintenance/department/medical) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index ce62317294..3c160180da 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -4548,7 +4548,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage"; - req_access_txt = "3" + req_access_txt = "1" }, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -15223,7 +15223,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aCN" = ( -/obj/structure/reagent_dispensers/fueltank, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_x = -30 @@ -15231,6 +15230,7 @@ /obj/effect/turf_decal/bot{ dir = 1 }, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel{ dir = 1 }, @@ -48921,7 +48921,7 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bTi" = ( -/obj/machinery/vending/wardrobe/atmos_wardrobe, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bTk" = ( @@ -82905,8 +82905,8 @@ /area/medical/morgue) "tID" = ( /obj/machinery/atmospherics/components/binary/pump/on{ - name = "Space Loop Out"; - dir = 4 + dir = 4; + name = "Space Loop Out" }, /turf/open/floor/plasteel/white, /area/science/circuit) @@ -83325,8 +83325,8 @@ /area/maintenance/port/aft) "xHA" = ( /obj/machinery/atmospherics/components/binary/pump/on{ - name = "Space Loop In"; - dir = 8 + dir = 8; + name = "Space Loop In" }, /turf/open/floor/plasteel/white, /area/science/circuit) diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index af94512e0f..74f7f95c2c 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -24502,10 +24502,6 @@ /obj/effect/turf_decal/loading_area{ dir = 1 }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, @@ -25146,13 +25142,13 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aNg" = ( -/obj/structure/reagent_dispensers/fueltank, /obj/structure/sign/warning/nosmoking{ pixel_y = -32 }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel, /area/engine/engineering) "aNh" = ( diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 056e27b982..b053c5176c 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -46837,7 +46837,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/structure/reagent_dispensers/fueltank, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel, /area/engine/engineering) "cdL" = ( @@ -54462,8 +54462,8 @@ /area/maintenance/department/security/brig) "gjv" = ( /obj/machinery/atmospherics/components/binary/pump/on{ - name = "Space Loop In"; - dir = 1 + dir = 1; + name = "Space Loop In" }, /turf/open/floor/plating, /area/maintenance/department/science) diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm index 69b0fd9981..8b16ce13a8 100644 --- a/_maps/map_files/Snaxi/Snaxi.dmm +++ b/_maps/map_files/Snaxi/Snaxi.dmm @@ -14395,7 +14395,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/reagent_dispensers/fueltank, /obj/machinery/camera{ c_tag = "Engineering Access" }, @@ -14403,6 +14402,7 @@ name = "Station Intercom (General)"; pixel_y = 20 }, +/obj/structure/reagent_dispensers/fueltank/high, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 4582400c1a..bf0e1dc797 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2927,13 +2927,6 @@ /obj/machinery/capture_the_flag/red, /turf/open/floor/circuit/green/anim, /area/ctf) -"hH" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/slot_machine, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "hI" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -4178,6 +4171,10 @@ "ku" = ( /turf/closed/indestructible/fakeglass, /area/syndicate_mothership) +"kv" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) "kw" = ( /turf/open/floor/plasteel/yellowsiding, /area/centcom/supply) @@ -4505,6 +4502,10 @@ icon_state = "alien15" }, /area/abductor_ship) +"ll" = ( +/obj/machinery/vending/autodrobe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "ln" = ( /obj/machinery/light, /obj/effect/turf_decal/tile/brown, @@ -4762,11 +4763,15 @@ /turf/open/floor/plasteel/dark, /area/centcom/control) "lS" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja1"; - name = "Dorm 1" +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/wood, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/janiupgrade, +/obj/vehicle/ridden/janicart, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "lT" = ( /obj/machinery/door/airlock/centcom{ @@ -4828,14 +4833,14 @@ }, /area/abductor_ship) "ma" = ( -/obj/machinery/button/door{ - id = "Ninja7"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 25; - specialfunctions = 4 +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet" }, -/turf/open/indestructible/hotelwood, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/turf/open/floor/carpet/royalblue, /area/centcom/holding) "mb" = ( /obj/structure/table/reinforced, @@ -6427,6 +6432,23 @@ /obj/effect/turf_decal/tile/brown, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) +"oV" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"oW" = ( +/obj/structure/table/wood, +/obj/item/soap, +/obj/item/soap, +/obj/item/soap, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "oX" = ( /obj/structure/bookcase/random, /obj/machinery/light{ @@ -6769,14 +6791,6 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/control) -"px" = ( -/obj/structure/table, -/obj/item/storage/backpack/duffelbag/med/surgery, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "py" = ( /obj/machinery/smartfridge, /turf/closed/indestructible{ @@ -6792,6 +6806,41 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"pB" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/chem_master/condimaster{ + desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; + name = "BrewMaster 2199"; + pixel_x = -4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"pG" = ( +/obj/machinery/biogenerator, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "pH" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -7289,6 +7338,16 @@ "qE" = ( /turf/closed/indestructible/riveted/uranium, /area/wizard_station) +"qF" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/washing_machine, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "qI" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/light{ @@ -7296,13 +7355,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"qP" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479"; - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "qQ" = ( /obj/machinery/door/airlock/centcom{ name = "Administrative Office"; @@ -7397,6 +7449,22 @@ /obj/machinery/vending/coffee, /turf/open/floor/plasteel, /area/syndicate_mothership) +"rg" = ( +/obj/structure/table, +/obj/item/clothing/mask/luchador, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) +"rh" = ( +/obj/structure/table/wood, +/obj/item/camera/detective{ + desc = "A polaroid camera with extra capacity for social media marketing."; + name = "Professional camera" + }, +/obj/item/camera_film, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "rk" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, @@ -7889,10 +7957,6 @@ }, /turf/open/floor/engine/cult, /area/wizard_station) -"sa" = ( -/obj/item/hilbertshotel/ghostdojo, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "sc" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership/control; @@ -7905,12 +7969,11 @@ /turf/open/floor/plating, /area/syndicate_mothership) "sf" = ( -/obj/machinery/vending/wallmed{ - name = "Emergency NanoMed"; - pixel_y = 28; - use_power = 0 +/obj/effect/landmark/holding_facility, +/mob/living/simple_animal/bot/medbot{ + name = "Syndicate Hospitality Drone" }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "si" = ( /obj/structure/table/wood, @@ -7928,6 +7991,12 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) +"sk" = ( +/obj/machinery/door/airlock/wood{ + name = "Bathroom" + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "sq" = ( /obj/machinery/computer/shuttle/white_ship{ dir = 4 @@ -8341,6 +8410,31 @@ /obj/item/reagent_containers/food/drinks/bottle/vodka, /turf/open/floor/wood, /area/syndicate_mothership) +"ta" = ( +/obj/structure/closet{ + anchored = 1; + desc = "A storage unit for plasmaman internals, courtesy of the Spider Clan."; + icon_state = "emergency"; + name = "Plasmaman emergency closet" + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"tc" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Dorms" + }, +/turf/open/floor/wood, +/area/centcom/holding) "td" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -8427,6 +8521,9 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"tv" = ( +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "tx" = ( /obj/structure/table/wood, /obj/item/storage/dice, @@ -8712,13 +8809,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plasteel, /area/centcom/supplypod) -"tZ" = ( -/obj/structure/chair/wood/normal, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "uc" = ( /obj/effect/turf_decal/tile/green{ dir = 1 @@ -8734,6 +8824,10 @@ /obj/item/storage/crayons, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) +"ue" = ( +/obj/machinery/autolathe/toy, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "uf" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -8743,12 +8837,14 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"ug" = ( +/obj/structure/table, +/obj/machinery/dish_drive, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) "uh" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja2"; - name = "Dorm 2" - }, -/turf/open/floor/wood, +/obj/structure/dresser, +/turf/open/floor/carpet/royalblue, /area/centcom/holding) "uj" = ( /obj/item/clipboard, @@ -9033,6 +9129,16 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"uH" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/paperframes/fifty, +/obj/item/stack/sheet/paperframes/fifty, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box, +/obj/item/storage/box/lights/mixed, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "uJ" = ( /obj/effect/baseturf_helper/asteroid/snow, /turf/closed/indestructible/riveted, @@ -9318,19 +9424,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"vs" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/turf_decal/tile/green{ - dir = 1 +"vp" = ( +/obj/structure/bed, +/obj/item/bedsheet/hos{ + desc = "A fancy red bedsheet."; + name = "red bedsheet" }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, +/turf/open/floor/carpet/red, /area/centcom/holding) "vt" = ( /obj/structure/rack, @@ -9348,17 +9448,6 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) -"vv" = ( -/obj/structure/closet, -/obj/item/storage/backpack/duffelbag/med/surgery, -/obj/machinery/iv_drip, -/obj/item/roller, -/obj/item/storage/firstaid/regular, -/obj/item/reagent_containers/medspray/synthflesh, -/obj/item/reagent_containers/medspray/synthflesh, -/obj/item/reagent_containers/medspray/synthflesh, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "vw" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -9367,6 +9456,12 @@ /mob/living/simple_animal/hostile/carp/cayenne, /turf/open/floor/plasteel, /area/syndicate_mothership) +"vx" = ( +/obj/structure/sign/barsign{ + pixel_y = 32 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "vy" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -9733,6 +9828,15 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) +"wi" = ( +/obj/effect/landmark/mafia_game_area, +/turf/open/space/basic, +/area/space) +"wj" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "wl" = ( /obj/structure/table/wood, /obj/item/paicard, @@ -9997,6 +10101,13 @@ /obj/item/toy/cards/deck, /turf/open/floor/carpet, /area/wizard_station) +"wU" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja7"; + name = "Dorm 7" + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "wX" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -10005,10 +10116,12 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel, /area/syndicate_mothership) -"wZ" = ( -/obj/structure/bed, -/obj/item/bedsheet/syndie, -/obj/effect/landmark/holding_facility, +"wY" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/easel, +/obj/item/canvas/twentythreeXtwentythree, /turf/open/indestructible/hotelwood, /area/centcom/holding) "xa" = ( @@ -10228,6 +10341,16 @@ /obj/machinery/light, /turf/open/floor/carpet, /area/wizard_station) +"xB" = ( +/obj/machinery/button/door{ + id = "Ninja3"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "xG" = ( /obj/structure/closet/syndicate/personal, /obj/effect/turf_decal/stripes/line{ @@ -10244,13 +10367,18 @@ /obj/item/bedsheet/syndie, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"xO" = ( -/obj/structure/curtain, -/obj/machinery/shower, -/obj/structure/window{ - dir = 8 +"xL" = ( +/obj/structure/table/wood/bar, +/obj/structure/mirror{ + pixel_y = 28 }, -/turf/open/floor/mineral/titanium/blue, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/lightreplacer, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "xQ" = ( /obj/effect/turf_decal/delivery, @@ -10375,6 +10503,10 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"yf" = ( +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "yg" = ( /obj/structure/chair, /turf/open/floor/mineral/titanium, @@ -10628,13 +10760,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"yS" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja7"; - name = "Dorm 7" - }, -/turf/open/floor/wood, -/area/centcom/holding) "yU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -10654,13 +10779,23 @@ /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) "yW" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/structure/mirror{ + pixel_y = 28 }, -/obj/machinery/light{ - dir = 4 +/obj/structure/sink{ + dir = 1; + pixel_y = 25 }, -/turf/open/floor/grass, +/mob/living/simple_animal/bot/cleanbot, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"yX" = ( +/obj/structure/curtain, +/obj/machinery/shower, +/obj/structure/window{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, /area/centcom/holding) "yY" = ( /obj/structure/table/wood, @@ -10891,6 +11026,10 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) +"zy" = ( +/obj/structure/mineral_door/paperframe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "zz" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, @@ -10948,6 +11087,21 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/ferry) +"zE" = ( +/obj/machinery/plantgenes/seedvault, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/table, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "zF" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -11071,15 +11225,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"zS" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) -"zT" = ( -/turf/open/indestructible/boss/air, -/area/centcom/holding) "zU" = ( /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/cafeteria, @@ -11095,13 +11240,6 @@ /obj/item/reagent_containers/food/snacks/carpmeat, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"zW" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja5"; - name = "Dorm 5" - }, -/turf/open/floor/wood, -/area/centcom/holding) "zX" = ( /obj/structure/table, /obj/machinery/light{ @@ -11111,12 +11249,14 @@ /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) "zY" = ( -/obj/item/bedsheet/wiz{ - desc = "A glow in the dark blue bedsheet."; - name = "blue bedsheet" +/obj/machinery/light{ + dir = 8 }, -/obj/structure/bed, -/turf/open/floor/carpet/royalblue, +/obj/structure/musician/piano, +/obj/structure/sign/painting{ + pixel_x = -32 + }, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Aa" = ( /turf/open/floor/mech_bay_recharge_floor, @@ -11356,16 +11496,6 @@ /obj/effect/decal/remains/xeno, /turf/open/floor/grass, /area/wizard_station) -"AC" = ( -/obj/machinery/button/door{ - id = "Ninja5"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "AD" = ( /obj/machinery/door/airlock/centcom{ name = "Leader's Room"; @@ -11373,10 +11503,6 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) -"AE" = ( -/obj/machinery/vending/coffee, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "AG" = ( /obj/structure/ladder/unbreakable/binary/space, /turf/open/indestructible/airblock, @@ -11595,15 +11721,13 @@ /obj/machinery/mech_bay_recharge_port, /turf/open/floor/plating, /area/syndicate_mothership) -"Bq" = ( -/obj/machinery/sleeper{ - dir = 8 +"Bm" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/sign/painting{ + pixel_x = 32 }, -/turf/open/floor/plasteel/white, -/area/centcom/holding) -"Bs" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Bu" = ( @@ -12458,13 +12582,6 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) -"CQ" = ( -/obj/effect/landmark/holding_facility, -/mob/living/simple_animal/bot/medbot{ - name = "Syndicate Hospitality Drone" - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "CR" = ( /obj/machinery/computer/security{ dir = 8 @@ -12484,8 +12601,37 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/evac) -"CV" = ( -/obj/structure/chair/stool, +"CS" = ( +/obj/structure/chair/wood/normal{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"CT" = ( +/obj/structure/bedsheetbin/towel, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) +"CU" = ( +/obj/structure/closet, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/stack/tile/wood{ + amount = 24 + }, +/obj/item/stack/tile/carpet/black/fifty, +/obj/item/stack/tile/carpet/blackred/fifty, +/obj/item/stack/tile/carpet/blue/fifty, +/obj/item/stack/tile/carpet/cyan/fifty, +/obj/item/stack/tile/carpet/fifty, +/obj/item/stack/tile/carpet/green/fifty, +/obj/item/stack/tile/carpet/monochrome/fifty, +/obj/item/stack/tile/carpet/orange/fifty, +/obj/item/stack/tile/carpet/purple/fifty, +/obj/item/stack/tile/carpet/red/fifty, +/obj/item/stack/tile/carpet/royalblack/fifty, +/obj/item/stack/tile/carpet/royalblue/fifty, /turf/open/indestructible/hotelwood, /area/centcom/holding) "CX" = ( @@ -12680,9 +12826,20 @@ /obj/structure/table, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"Dl" = ( -/obj/structure/mineral_door/paperframe, -/turf/open/indestructible/hotelwood, +"Dm" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja2"; + name = "Dorm 2" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"Dn" = ( +/obj/machinery/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_y = 28; + use_power = 0 + }, +/turf/open/floor/plasteel/white, /area/centcom/holding) "Do" = ( /obj/effect/turf_decal/tile/bar, @@ -13277,14 +13434,6 @@ /obj/structure/barricade/wooden, /turf/open/floor/engine/cult, /area/wizard_station) -"ED" = ( -/obj/machinery/vending/boozeomat, -/turf/closed/indestructible{ - icon = 'icons/turf/walls/wood_wall.dmi'; - icon_state = "wood"; - smooth = 1 - }, -/area/centcom/holding) "EE" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/tile/neutral{ @@ -13495,6 +13644,19 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"Fb" = ( +/obj/structure/chair/stool, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Fe" = ( +/turf/closed/indestructible/wood, +/area/centcom/holding) +"Ff" = ( +/obj/machinery/door/airlock/wood/glass{ + name = "Cryo" + }, +/turf/open/floor/wood, +/area/centcom/holding) "Fg" = ( /obj/structure/flora/grass/brown, /obj/effect/light_emitter, @@ -13503,9 +13665,9 @@ "Fh" = ( /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"Fl" = ( -/obj/structure/bedsheetbin/towel, -/turf/open/floor/plasteel/white, +"Fj" = ( +/obj/structure/closet/crate/bin, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fm" = ( /obj/machinery/shower{ @@ -13973,6 +14135,13 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"Gt" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/slot_machine, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Gu" = ( /obj/machinery/door/airlock/silver{ name = "Shower" @@ -14423,24 +14592,7 @@ /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) "Hj" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/musician/piano, -/obj/structure/sign/painting{ - pixel_x = -32 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Hk" = ( -/obj/structure/table/wood, -/obj/item/camera/detective{ - desc = "A polaroid camera with extra capacity for social media marketing."; - name = "Professional camera" - }, -/obj/item/camera_film, -/obj/item/paper_bin, -/obj/item/pen/fountain, +/obj/structure/bedsheetbin, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Hm" = ( @@ -14594,6 +14746,13 @@ }, /turf/open/floor/plasteel/white, /area/tdome/tdomeobserve) +"Hy" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja3"; + name = "Dorm 3" + }, +/turf/open/floor/wood, +/area/centcom/holding) "HA" = ( /obj/structure/sink{ dir = 8; @@ -14653,6 +14812,13 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) +"HE" = ( +/obj/structure/dresser, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "HF" = ( /obj/structure/sink{ dir = 4; @@ -15515,11 +15681,8 @@ /turf/open/floor/plasteel, /area/tdome/tdomeadmin) "Jq" = ( -/obj/machinery/camera{ - c_tag = "Arena"; - network = list("thunder"); - pixel_x = 10; - resistance_flags = 64 +/obj/machinery/camera/motion/thunderdome{ + pixel_x = 10 }, /turf/open/floor/circuit/green, /area/tdome/arena) @@ -15785,12 +15948,6 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) -"JV" = ( -/obj/structure/table, -/obj/item/stack/packageWrap, -/obj/item/reagent_containers/glass/beaker, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "JX" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -15846,13 +16003,6 @@ }, /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) -"Kf" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/turf/open/floor/carpet/red, -/area/centcom/holding) "Kg" = ( /turf/closed/indestructible/fakedoor{ name = "Thunderdome Admin" @@ -15869,16 +16019,6 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeadmin) -"Ki" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet" - }, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/obj/item/reagent_containers/rag/towel, -/turf/open/floor/carpet/royalblue, -/area/centcom/holding) "Kj" = ( /obj/machinery/door/airlock/external{ name = "Backup Emergency Escape Shuttle" @@ -16299,6 +16439,11 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) +"Ld" = ( +/obj/structure/table, +/obj/item/clothing/mask/luchador/rudos, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "Lh" = ( /obj/machinery/sleeper{ dir = 8 @@ -16311,44 +16456,29 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) -"Lk" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, -/turf/open/floor/plasteel/white, -/area/centcom/holding) -"Ll" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/easel, -/obj/item/canvas/twentythreeXtwentythree, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Lm" = ( -/obj/machinery/shower{ - dir = 4 - }, -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) -"Ln" = ( -/obj/structure/toilet{ +"Lj" = ( +/obj/machinery/light{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/centcom/holding) +"Lm" = ( +/obj/structure/table, +/obj/item/clothing/mask/luchador/tecnicos, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "Lp" = ( /obj/structure/chair{ dir = 4 }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) -"Lr" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/turf/open/indestructible/hotelwood, +"Lq" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja6"; + name = "Dorm 6" + }, +/turf/open/floor/wood, /area/centcom/holding) "Ls" = ( /obj/docking_port/stationary{ @@ -16379,6 +16509,13 @@ }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) +"Ly" = ( +/obj/structure/bed, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "LA" = ( /obj/structure/table, /obj/structure/bedsheetbin, @@ -16611,6 +16748,14 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) +"Mj" = ( +/obj/item/bedsheet/wiz{ + desc = "A glow in the dark blue bedsheet."; + name = "blue bedsheet" + }, +/obj/structure/bed, +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) "Mk" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -16620,8 +16765,22 @@ "Mm" = ( /turf/open/floor/grass, /area/centcom/holding) -"Ms" = ( -/obj/effect/mob_spawn/human/ghostcafe{ +"Mn" = ( +/obj/machinery/vr_sleeper/hugbox{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Mq" = ( +/obj/machinery/seed_extractor, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ dir = 8 }, /turf/open/indestructible/hotelwood, @@ -16640,6 +16799,16 @@ /obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel, /area/centcom/supplypod) +"Mw" = ( +/obj/machinery/button/door{ + id = "Ninja7"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Mx" = ( /obj/machinery/light{ dir = 4 @@ -16666,13 +16835,10 @@ /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) "Mz" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/paperframes/fifty, -/obj/item/stack/sheet/paperframes/fifty, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/box/lights/mixed, +/obj/machinery/light{ + dir = 1; + light_color = "#cee5d2" + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "MB" = ( @@ -16723,11 +16889,8 @@ "MI" = ( /turf/open/floor/plating, /area/syndicate_mothership) -"MJ" = ( -/obj/structure/bed, -/obj/machinery/light/small{ - dir = 1 - }, +"ML" = ( +/obj/structure/table/wood/fancy, /turf/open/indestructible/hotelwood, /area/centcom/holding) "MM" = ( @@ -16740,9 +16903,13 @@ }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"MR" = ( -/obj/machinery/light{ - dir = 4 +"MQ" = ( +/obj/machinery/button/door{ + id = "Ninja5"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) @@ -16758,6 +16925,29 @@ /obj/effect/turf_decal/tile/brown, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) +"MW" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/obj/structure/sink/kitchen{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "sink"; + pixel_y = 28 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"MX" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/turf/open/floor/plasteel/white, +/area/centcom/holding) +"Na" = ( +/obj/item/paicard, +/obj/structure/table/wood, +/turf/open/floor/engine/cult, +/area/wizard_station) "Nc" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -16775,7 +16965,27 @@ }, /area/centcom/holding) "Nf" = ( -/obj/machinery/autolathe/toy, +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/centcom/holding) +"Ng" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/wood, +/obj/item/canvas/twentythreeXtwentythree, +/obj/item/canvas/twentythreeXtwentythree, +/obj/item/canvas/twentythreeXtwentythree, +/obj/item/canvas/twentythreeXnineteen, +/obj/item/canvas/twentythreeXnineteen, +/obj/item/canvas/twentythreeXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, +/obj/item/canvas/nineteenXnineteen, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Ni" = ( @@ -16804,24 +17014,50 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) -"Nt" = ( -/obj/structure/bedsheetbin/color, +"Nl" = ( +/turf/open/floor/carpet/royalblue, +/area/centcom/holding) +"Nn" = ( +/obj/machinery/vending/hydronutrients, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Np" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja7"; + name = "Dorm 7" + }, +/turf/open/floor/wood, +/area/centcom/holding) +"Ns" = ( +/obj/structure/mopbucket, +/obj/item/mop, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Nu" = ( /turf/open/floor/wood, /area/syndicate_mothership) +"Nv" = ( +/obj/machinery/vending/boozeomat, +/turf/closed/indestructible{ + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood"; + smooth = 1 + }, +/area/centcom/holding) "Nw" = ( /obj/machinery/recharge_station, /turf/open/floor/plasteel/white, /area/centcom/holding) -"Nx" = ( -/obj/machinery/processor, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "Nz" = ( /obj/effect/turf_decal/tile/brown{ dir = 8 @@ -16831,28 +17067,11 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) -"NA" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/table/wood, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXnineteen, -/obj/item/canvas/twentythreeXnineteen, -/obj/item/canvas/twentythreeXnineteen, -/obj/item/canvas/nineteenXnineteen, -/obj/item/canvas/nineteenXnineteen, -/obj/item/canvas/nineteenXnineteen, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"NE" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/centcom/holding) +"NB" = ( +/obj/structure/table, +/obj/item/storage/belt/champion/wrestling/holodeck, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "NF" = ( /obj/structure/ladder/unbreakable/binary, /turf/open/indestructible/airblock, @@ -16868,9 +17087,14 @@ }, /turf/open/floor/plasteel, /area/centcom/control) -"NN" = ( -/obj/item/storage/box/bodybags, -/obj/item/storage/box/bodybags, +"NP" = ( +/obj/machinery/button/crematorium{ + id = "crematoriumGhostDojo"; + pixel_x = -25 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"NS" = ( /turf/open/indestructible/hotelwood, /area/centcom/holding) "NT" = ( @@ -16897,11 +17121,10 @@ /obj/machinery/vending/cola/sodie, /turf/open/floor/plasteel, /area/syndicate_mothership) -"NZ" = ( -/obj/structure/table/wood/bar, -/obj/structure/safe/floor, -/obj/item/seeds/cherry/bomb, -/obj/item/key/janitor, +"NX" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Oa" = ( @@ -16930,15 +17153,18 @@ /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"Of" = ( -/turf/open/floor/carpet/red, -/area/centcom/holding) "Oh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"Oi" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) "Oj" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -16952,9 +17178,8 @@ }, /turf/open/floor/plasteel, /area/centcom/control) -"Ol" = ( -/obj/structure/table/wood/fancy, -/turf/open/indestructible/hotelwood, +"Ok" = ( +/turf/open/indestructible/boss/air, /area/centcom/holding) "Om" = ( /obj/effect/turf_decal/tile/brown, @@ -16963,9 +17188,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/three) -"On" = ( -/obj/structure/sign/painting{ - pixel_x = 32 +"Oo" = ( +/obj/machinery/button/door{ + id = "Ninja1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) @@ -16983,23 +17212,20 @@ /mob/living/simple_animal/bot/cleanbot, /turf/open/floor/plasteel/white, /area/centcom/holding) +"Oq" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; + name = "Personal ID-Locked Closet" + }, +/obj/item/coin/silver, +/obj/item/coin/silver, +/obj/item/coin/silver, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Or" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) -"Os" = ( -/obj/structure/chair/wood/normal{ - dir = 1 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Ot" = ( -/obj/machinery/washing_machine, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "Ou" = ( /turf/closed/indestructible/fakedoor{ name = "Cold Storage" @@ -17009,12 +17235,22 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"Ox" = ( -/obj/machinery/door/airlock/wood/glass{ - name = "Cryo" +"Ow" = ( +/obj/machinery/vending/kink{ + extended_inventory = 1 }, /turf/open/floor/wood, /area/centcom/holding) +"Oy" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/window{ + dir = 8 + }, +/obj/structure/curtain, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "Oz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -17038,17 +17274,14 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"OG" = ( -/obj/structure/dresser, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "OH" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) +"OI" = ( +/obj/structure/bedsheetbin/towel, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "OL" = ( /obj/structure/mineral_door/paperframe{ name = "Dojo" @@ -17066,14 +17299,20 @@ /obj/item/storage/box/handcuffs, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"OO" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/mineral/titanium/blue, +/area/centcom/holding) "OS" = ( /obj/structure/mecha_wreckage/mauler, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"OT" = ( -/obj/structure/table, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "OU" = ( /obj/item/clothing/under/costume/jabroni, /obj/item/clothing/under/costume/geisha, @@ -17088,47 +17327,16 @@ }, /turf/open/floor/wood, /area/syndicate_mothership) -"OW" = ( -/obj/structure/bedsheetbin/towel, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "OZ" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/syndicate_mothership) -"Pc" = ( -/obj/structure/sink/kitchen{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "sink"; - pixel_y = 28 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/book/manual/hydroponics_pod_people, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Pg" = ( /obj/machinery/light{ dir = 1 }, /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"Ph" = ( -/obj/structure/closet/crate/bin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Pl" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -17147,6 +17355,14 @@ }, /turf/open/indestructible/boss/air, /area/centcom/holding) +"Pp" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) "Pr" = ( /obj/structure/table, /obj/item/book/manual/chef_recipes, @@ -17170,6 +17386,15 @@ /obj/machinery/light/small, /turf/open/floor/wood, /area/syndicate_mothership) +"Px" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) +"Pz" = ( +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) "PA" = ( /obj/structure/window/reinforced{ dir = 4 @@ -17179,13 +17404,8 @@ "PD" = ( /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"PG" = ( -/obj/structure/table/reinforced, -/obj/item/camera, -/turf/open/floor/plasteel, -/area/centcom/supplypod) -"PI" = ( -/obj/machinery/biogenerator, +"PE" = ( +/obj/machinery/vending/hydroseeds, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17198,6 +17418,28 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"PG" = ( +/obj/structure/table/reinforced, +/obj/item/camera, +/turf/open/floor/plasteel, +/area/centcom/supplypod) +"PI" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/glass/beaker/large, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "PJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -17205,17 +17447,16 @@ /turf/open/floor/plating, /area/syndicate_mothership) "PL" = ( -/obj/machinery/autolathe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"PM" = ( -/obj/machinery/vending/clothing{ - extended_inventory = 1 +/obj/machinery/light{ + dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PO" = ( /obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 8 + }, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17234,11 +17475,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"PQ" = ( -/obj/structure/closet/secure_closet, -/obj/item/coin/silver, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "PS" = ( /obj/machinery/computer/shuttle/syndicate/recall, /obj/effect/turf_decal/tile/bar, @@ -17268,6 +17504,9 @@ /turf/open/indestructible/hotelwood, /area/centcom/holding) "PY" = ( +/obj/structure/closet/secure_closet/hydroponics{ + locked = 0 + }, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17278,6 +17517,10 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/item/seeds/ambrosia/gaia, +/obj/item/seeds/ambrosia/gaia, +/obj/item/seeds/pumpkin/blumpkin, +/obj/item/seeds/pumpkin/blumpkin, /turf/open/indestructible/hotelwood, /area/centcom/holding) "PZ" = ( @@ -17294,18 +17537,20 @@ }, /turf/open/floor/mineral/titanium, /area/centcom/evac) -"Qc" = ( -/obj/effect/landmark/mafia_game_area, -/turf/open/space/basic, -/area/space) +"Qd" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Qe" = ( /turf/open/ai_visible, /area/ai_multicam_room) -"Qi" = ( -/obj/item/paicard, -/obj/structure/table/wood, -/turf/open/floor/engine/cult, -/area/wizard_station) +"Qh" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja1"; + name = "Dorm 1" + }, +/turf/open/floor/wood, +/area/centcom/holding) "Qk" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ppflowers, @@ -17313,31 +17558,27 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ql" = ( -/obj/machinery/light, -/obj/effect/landmark/holding_facility, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Qm" = ( /obj/singularity/wizard/mapped, /turf/open/indestructible/binary, /area/fabric_of_reality) "Qn" = ( -/obj/machinery/vr_sleeper/hugbox{ - dir = 8 - }, +/obj/machinery/door/airlock/wood, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Qo" = ( /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) -"Qp" = ( -/obj/structure/bedsheetbin, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Qq" = ( /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) +"Qs" = ( +/obj/structure/table/wood/bar, +/obj/structure/safe/floor, +/obj/item/seeds/cherry/bomb, +/obj/item/key/janitor, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Qt" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, @@ -17347,20 +17588,33 @@ }, /turf/open/floor/plasteel, /area/syndicate_mothership) -"Qu" = ( -/obj/machinery/door/airlock/wood/glass{ - name = "Dorms" - }, -/turf/open/floor/wood, -/area/centcom/holding) "Qw" = ( -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) +/obj/structure/table, +/obj/item/clothing/gloves/boxing, +/obj/item/clothing/gloves/boxing/blue, +/obj/item/clothing/gloves/boxing/green, +/obj/item/clothing/gloves/boxing/yellow, +/turf/open/floor/holofloor/wood, +/area/holodeck/rec_center/wrestlingarena) "Qy" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/plasteel/white, +/obj/structure/table/wood/fancy/royalblue, +/turf/open/indestructible/hotelwood, /area/centcom/holding) -"Qz" = ( +"QA" = ( +/obj/machinery/deepfryer, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"QB" = ( +/obj/machinery/computer/telecrystals/uplinker, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/syndicate_mothership) +"QE" = ( +/turf/open/floor/plasteel, +/area/centcom/supplypod) +"QF" = ( /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/silver, @@ -17379,42 +17633,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"QA" = ( -/obj/machinery/deepfryer, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) -"QB" = ( -/obj/machinery/computer/telecrystals/uplinker, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium/red, -/area/syndicate_mothership) -"QC" = ( -/obj/machinery/door/airlock/wood{ - name = "Bathroom" - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) -"QE" = ( -/turf/open/floor/plasteel, -/area/centcom/supplypod) -"QF" = ( -/obj/machinery/button/door{ - id = "Ninja3"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"QJ" = ( -/obj/structure/sign/barsign{ - pixel_y = 32 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "QK" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -17426,11 +17644,18 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"QN" = ( -/obj/machinery/light{ - dir = 4 +"QM" = ( +/obj/effect/mob_spawn/human/ghostcafe{ + dir = 8 }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"QN" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/obj/item/reagent_containers/rag/towel, +/turf/open/floor/carpet/red, /area/centcom/holding) "QP" = ( /obj/machinery/computer/mech_bay_power_console{ @@ -17450,6 +17675,15 @@ /obj/item/storage/box/donkpockets, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) +"QS" = ( +/obj/structure/chair/wood/normal{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "QT" = ( /obj/machinery/chem_dispenser/drinks, /turf/closed/indestructible{ @@ -17501,26 +17735,6 @@ }, /turf/open/floor/grass, /area/centcom/holding) -"Ri" = ( -/obj/structure/chair/wood/normal{ - dir = 1 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Rj" = ( -/obj/machinery/vending/hydroseeds, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Rl" = ( /obj/structure/mirror{ pixel_x = -28 @@ -17535,39 +17749,14 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ro" = ( -/obj/structure/closet{ - anchored = 1; - desc = "A storage unit for plasmaman internals, courtesy of the Spider Clan."; - icon_state = "emergency"; - name = "Plasmaman emergency closet" - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Rq" = ( -/obj/machinery/light{ - dir = 1; - light_color = "#cee5d2" - }, -/turf/open/indestructible/hotelwood, +/obj/machinery/washing_machine, +/turf/open/floor/mineral/titanium/blue, /area/centcom/holding) "Ru" = ( -/obj/structure/fireplace, -/turf/open/floor/carpet/red, -/area/centcom/holding) -"Rv" = ( -/obj/structure/dresser, -/turf/open/floor/carpet/royalblue, +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/plasteel/white, /area/centcom/holding) "Rz" = ( /obj/effect/turf_decal/loading_area, @@ -17583,48 +17772,12 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) -"RK" = ( -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/plasteel/white, -/area/centcom/holding) -"RL" = ( -/obj/machinery/vending/cola, +"RM" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479" + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"RN" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/light, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"RO" = ( -/obj/machinery/shower{ - dir = 1 - }, -/obj/structure/window{ - dir = 8 - }, -/obj/structure/curtain, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) -"RP" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja4"; - name = "Dorm 4" - }, -/turf/open/floor/wood, -/area/centcom/holding) "RQ" = ( /obj/item/kirbyplants{ icon_state = "plant-21"; @@ -17647,12 +17800,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"RX" = ( -/obj/structure/chair/comfy/brown{ - color = "#596479" - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "RZ" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -17671,6 +17818,9 @@ /turf/open/floor/plasteel/dark, /area/syndicate_mothership) "Sd" = ( +/obj/structure/sign/painting{ + pixel_x = 32 + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Sf" = ( @@ -17698,13 +17848,6 @@ /obj/item/toy/nuke, /turf/open/floor/wood, /area/syndicate_mothership) -"Sj" = ( -/obj/machinery/vending/autodrobe{ - extended_inventory = 1 - }, -/obj/machinery/light, -/turf/open/floor/wood, -/area/centcom/holding) "So" = ( /obj/structure/chair/wood/wings{ dir = 4 @@ -17714,21 +17857,15 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Sw" = ( -/obj/machinery/hydroponics/constructable, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ +"St" = ( +/obj/machinery/shower{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, +/turf/open/floor/plasteel/freezer, +/area/centcom/holding) +"Sv" = ( +/obj/structure/closet/secure_closet, +/obj/item/coin/silver, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Sy" = ( @@ -17755,6 +17892,13 @@ /obj/item/mop, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) +"SE" = ( +/obj/structure/chair/wood/normal, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "SF" = ( /obj/effect/turf_decal/tile/brown{ dir = 1 @@ -17764,14 +17908,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"SG" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 - }, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "SH" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -17789,6 +17925,13 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) +"SM" = ( +/obj/machinery/vending/autodrobe{ + extended_inventory = 1 + }, +/obj/machinery/light, +/turf/open/floor/wood, +/area/centcom/holding) "SN" = ( /obj/structure/mopbucket, /obj/item/mop, @@ -17798,16 +17941,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/space/basic, /area/centcom/supplypod) -"SR" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja7"; - name = "Dorm 7" +"SU" = ( +/obj/machinery/light{ + dir = 4 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"ST" = ( -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "SV" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -17817,7 +17956,14 @@ /turf/open/floor/plasteel, /area/syndicate_mothership) "SW" = ( -/obj/machinery/seed_extractor, +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/wirecutters, +/obj/item/wrench, +/obj/item/watertank, +/obj/item/cultivator, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -17834,28 +17980,18 @@ /obj/structure/table/wood, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"SZ" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja3"; - name = "Dorm 3" - }, -/turf/open/floor/wood, -/area/centcom/holding) -"Tc" = ( -/obj/machinery/button/door{ - id = "Ninja2"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, +"Td" = ( +/obj/structure/fireplace, +/turf/open/floor/carpet/red, /area/centcom/holding) "Tf" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/floor/plasteel/freezer, +/obj/machinery/light, +/obj/effect/landmark/holding_facility, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Tg" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/white, /area/centcom/holding) "Tj" = ( /obj/effect/turf_decal/tile/bar, @@ -17875,26 +18011,14 @@ "To" = ( /turf/open/indestructible/airblock, /area/fabric_of_reality) -"Tq" = ( -/obj/structure/table/wood/bar, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/storage/toolbox/mechanical, -/obj/item/stack/sheet/plastic/fifty, -/obj/item/multitool, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Tr" = ( /obj/structure/closet/chefcloset, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"Tt" = ( -/obj/structure/toilet{ +"Ts" = ( +/obj/machinery/light{ dir = 4 }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, /turf/open/floor/plasteel/white, /area/centcom/holding) "Tu" = ( @@ -17905,38 +18029,6 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Tw" = ( -/obj/structure/closet{ - anchored = 1; - name = "Plasmaman suits" - }, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Tx" = ( -/obj/machinery/plantgenes/seedvault, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/structure/table, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Tz" = ( /obj/effect/light_emitter, /turf/open/floor/plating/asteroid/snow/airless, @@ -17951,17 +18043,9 @@ /obj/structure/reagent_dispensers/cooking_oil, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"TC" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/freezer, -/area/centcom/holding) "TD" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/sign/painting{ - pixel_x = 32 - }, +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement, /turf/open/indestructible/hotelwood, /area/centcom/holding) "TF" = ( @@ -17973,15 +18057,12 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) -"TG" = ( -/obj/machinery/light{ - dir = 8 +"TJ" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja5"; + name = "Dorm 5" }, -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, -/obj/machinery/washing_machine, -/turf/open/floor/plasteel/white, +/turf/open/floor/wood, /area/centcom/holding) "TM" = ( /mob/living/simple_animal/bot/medbot{ @@ -18008,24 +18089,46 @@ }, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) -"TY" = ( -/obj/machinery/light{ - dir = 1 +"TS" = ( +/obj/structure/closet{ + anchored = 1; + name = "Plasmaman suits" }, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/janiupgrade, -/obj/vehicle/ridden/janicart, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"TV" = ( +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/reagent_containers/glass/beaker, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"TY" = ( +/obj/structure/bedsheetbin/color, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"TZ" = ( +/obj/machinery/sleeper{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Uc" = ( -/obj/machinery/vending/sustenance, +/obj/structure/bodycontainer/crematorium{ + dir = 4; + id = "crematoriumGhostDojo" + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ud" = ( -/turf/closed/indestructible/wood, -/area/centcom/holding) "Ug" = ( /obj/machinery/door/poddoor/shuttledock{ checkdir = 1; @@ -18045,11 +18148,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Ui" = ( -/obj/structure/table, -/obj/item/clothing/mask/luchador/tecnicos, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) "Uj" = ( /obj/machinery/door/airlock/centcom{ name = "Restroom"; @@ -18058,23 +18156,7 @@ /turf/open/floor/plasteel, /area/syndicate_mothership) "Uk" = ( -/obj/structure/closet/crate, -/obj/item/vending_refill/autodrobe, -/obj/item/vending_refill/autodrobe, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/boozeomat, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/clothing, -/obj/item/vending_refill/coffee, -/obj/item/vending_refill/coffee, -/obj/item/vending_refill/cola, -/obj/item/vending_refill/cola, -/obj/item/vending_refill/wallmed, -/obj/item/vending_refill/wallmed, -/obj/item/vending_refill/snack, -/obj/item/vending_refill/snack, -/turf/open/indestructible/hotelwood, +/turf/open/floor/mineral/titanium/blue, /area/centcom/holding) "Ul" = ( /obj/structure/table, @@ -18083,15 +18165,27 @@ }, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"Um" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/shovel/spade, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/item/watertank, -/obj/item/cultivator, -/obj/item/reagent_containers/glass/bucket, -/obj/item/reagent_containers/glass/bucket, +"Un" = ( +/obj/machinery/door/airlock/centcom{ + name = "Thunderdome"; + req_access_txt = "101" + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plasteel, +/area/tdome/tdomeobserve) +"Uq" = ( +/obj/machinery/button/door{ + id = "Ninja2"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"Ur" = ( +/obj/machinery/hydroponics/constructable, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -18104,29 +18198,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Un" = ( -/obj/machinery/door/airlock/centcom{ - name = "Thunderdome"; - req_access_txt = "101" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plasteel, -/area/tdome/tdomeobserve) -"Uq" = ( -/obj/structure/table/wood, -/obj/item/soap, -/obj/item/soap, -/obj/item/soap, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Ur" = ( -/turf/open/floor/carpet/royalblue, -/area/centcom/holding) "Uu" = ( /obj/machinery/light{ dir = 8 @@ -18143,30 +18214,19 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"Ux" = ( +/obj/structure/table, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Uy" = ( /obj/structure/flora/bush, /obj/effect/light_emitter, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) -"Uz" = ( -/obj/structure/table, -/obj/machinery/dish_drive, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "UC" = ( /obj/machinery/vending/cola, /turf/open/floor/plasteel, /area/centcom/supplypod) -"UD" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; - name = "Personal ID-Locked Closet" - }, -/obj/item/coin/silver, -/obj/item/coin/silver, -/obj/item/coin/silver, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "UE" = ( /obj/structure/chair/stool/bar, /turf/open/indestructible/hotelwood, @@ -18177,6 +18237,13 @@ /obj/effect/light_emitter, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) +"UI" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "Ninja4"; + name = "Dorm 4" + }, +/turf/open/floor/wood, +/area/centcom/holding) "UL" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18187,17 +18254,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod) -"UN" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/mob/living/simple_animal/bot/cleanbot, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "UO" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; @@ -18211,6 +18267,10 @@ }, /turf/open/floor/plasteel, /area/centcom/control) +"UP" = ( +/obj/structure/chair/comfy/brown, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "UQ" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18221,16 +18281,21 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/one) -"US" = ( -/obj/machinery/gibber, -/turf/open/floor/plasteel/cafeteria, -/area/centcom/holding) "UT" = ( /obj/structure/chair/wood/wings{ dir = 1 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) +"UU" = ( +/obj/structure/table/wood/bar, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/sheet/plastic/fifty, +/obj/item/multitool, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "UV" = ( /obj/machinery/computer/arcade, /turf/open/indestructible/hotelwood, @@ -18292,11 +18357,11 @@ /obj/structure/window/reinforced/tinted, /turf/open/floor/plasteel/freezer, /area/syndicate_mothership) -"Vk" = ( -/obj/structure/table, -/obj/item/storage/belt/champion/wrestling/holodeck, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) +"Vn" = ( +/obj/item/storage/box/bodybags, +/obj/item/storage/box/bodybags, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Vt" = ( /obj/item/paper/fluff/stations/centcom/disk_memo, /obj/structure/noticeboard{ @@ -18359,6 +18424,16 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/one) +"VC" = ( +/obj/machinery/button/door{ + id = "Ninja6"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "VF" = ( /obj/structure/rack, /obj/item/nullrod/scythe/vibro{ @@ -18367,11 +18442,16 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"VL" = ( -/obj/machinery/button/crematorium{ - id = "crematoriumGhostDojo"; - pixel_x = -25 - }, +"VH" = ( +/obj/machinery/vending/sustenance, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"VI" = ( +/obj/machinery/autolathe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"VK" = ( +/obj/machinery/vending/clothing, /turf/open/indestructible/hotelwood, /area/centcom/holding) "VO" = ( @@ -18406,6 +18486,10 @@ /obj/effect/landmark/shuttle_import, /turf/open/space/basic, /area/space) +"VY" = ( +/obj/machinery/vending/cola, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Wb" = ( /obj/machinery/door/window/westleft, /turf/open/indestructible/boss/air, @@ -18423,6 +18507,10 @@ }, /turf/open/floor/plasteel, /area/centcom/evac) +"We" = ( +/obj/machinery/vending/coffee, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Wi" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18440,58 +18528,38 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"Wl" = ( -/obj/machinery/door/airlock/wood, -/turf/open/indestructible/hotelwood, +"Wp" = ( +/obj/machinery/processor, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/centcom/holding) +"Wq" = ( +/obj/machinery/gibber, +/turf/open/floor/plasteel/cafeteria, /area/centcom/holding) "Wr" = ( /turf/open/floor/plasteel/dark, /area/centcom/supplypod) -"Ws" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "Ninja6"; - name = "Dorm 6" +"Wu" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 }, -/turf/open/floor/wood, -/area/centcom/holding) -"Ww" = ( -/obj/structure/bodycontainer/crematorium{ - dir = 4; - id = "crematoriumGhostDojo" +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Wx" = ( -/obj/structure/table, -/obj/item/clothing/mask/luchador, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) -"Wz" = ( -/obj/structure/table, -/obj/item/storage/backpack/duffelbag/med/surgery, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "WC" = ( /obj/structure/table/reinforced, /obj/item/pen, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) -"WD" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/obj/structure/sink/kitchen{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "sink"; - pixel_y = 28 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"WE" = ( -/obj/machinery/vending/kink{ - extended_inventory = 1 - }, -/turf/open/floor/wood, -/area/centcom/holding) "WH" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ @@ -18523,16 +18591,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"WN" = ( -/obj/machinery/button/door{ - id = "Ninja6"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "WO" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -18554,27 +18612,44 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) +"WR" = ( +/obj/structure/bed, +/obj/item/bedsheet/syndie, +/obj/effect/landmark/holding_facility, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "WS" = ( /obj/structure/closet/syndicate/personal, /turf/open/floor/wood, /area/syndicate_mothership) "WV" = ( -/obj/structure/bed, -/obj/item/bedsheet/hos{ - desc = "A fancy red bedsheet."; - name = "red bedsheet" +/obj/machinery/vending/cigarette, +/obj/machinery/light{ + dir = 4 }, -/turf/open/floor/carpet/red, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "WW" = ( /obj/machinery/processor, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) -"WY" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/light{ - dir = 4 - }, +"Xb" = ( +/obj/structure/closet/crate, +/obj/item/vending_refill/autodrobe, +/obj/item/vending_refill/autodrobe, +/obj/item/vending_refill/boozeomat, +/obj/item/vending_refill/boozeomat, +/obj/item/vending_refill/cigarette, +/obj/item/vending_refill/cigarette, +/obj/item/vending_refill/clothing, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/cola, +/obj/item/vending_refill/cola, +/obj/item/vending_refill/wallmed, +/obj/item/vending_refill/wallmed, +/obj/item/vending_refill/snack, +/obj/item/vending_refill/snack, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Xd" = ( @@ -18584,23 +18659,6 @@ /obj/structure/window/reinforced/fulltile, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Xe" = ( -/obj/machinery/vending/autodrobe, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"Xf" = ( -/obj/structure/table/wood/bar, -/obj/structure/mirror{ - pixel_y = 28 - }, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/lightreplacer, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/obj/item/storage/bag/trash, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xg" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -18613,6 +18671,15 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) +"Xk" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/grass, +/area/centcom/holding) "Xl" = ( /obj/structure/closet/syndicate/personal, /obj/effect/turf_decal/stripes/line{ @@ -18620,9 +18687,14 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) -"Xn" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, +"Xm" = ( +/obj/machinery/button/door{ + id = "Ninja4"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Xo" = ( @@ -18646,10 +18718,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supplypod/loading/four) -"Xs" = ( -/obj/structure/chair/comfy/brown, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xt" = ( /obj/machinery/door/airlock/centcom{ name = "CentCom Security"; @@ -18669,10 +18737,6 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/holofloor, /area/holodeck/rec_center/firingrange) -"Xw" = ( -/obj/structure/table/wood/fancy/royalblue, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xy" = ( /obj/machinery/door/airlock/external{ name = "Ferry Airlock" @@ -18685,16 +18749,6 @@ }, /turf/open/floor/plasteel, /area/centcom/ferry) -"XD" = ( -/obj/machinery/button/door{ - id = "Ninja4"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = 25; - specialfunctions = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "XE" = ( /obj/machinery/door/airlock/centcom{ name = "Kitchen"; @@ -18712,25 +18766,8 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"XS" = ( -/obj/structure/closet/secure_closet/hydroponics{ - locked = 0 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/item/seeds/ambrosia/gaia, -/obj/item/seeds/ambrosia/gaia, -/obj/item/seeds/pumpkin/blumpkin, -/obj/item/seeds/pumpkin/blumpkin, -/turf/open/indestructible/hotelwood, +"XN" = ( +/turf/open/floor/carpet/red, /area/centcom/holding) "XT" = ( /obj/structure/table/wood, @@ -18743,6 +18780,12 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/evac) +"XW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "XX" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/sake, @@ -18755,14 +18798,8 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"Ya" = ( -/obj/machinery/button/door{ - id = "Ninja1"; - name = "Dorm Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -25; - specialfunctions = 4 - }, +"XZ" = ( +/obj/effect/landmark/holding_facility, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Yc" = ( @@ -18794,30 +18831,14 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) -"Yh" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Yi" = ( /obj/structure/dresser, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) -"Yj" = ( -/obj/structure/table/optable, -/turf/open/floor/plasteel/white, -/area/centcom/holding) "Ym" = ( /obj/machinery/computer/arcade/orion_trail, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Yo" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Ys" = ( /obj/structure/table/reinforced, /turf/open/floor/mineral/plastitanium/red, @@ -18839,11 +18860,6 @@ }, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"Yv" = ( -/obj/structure/table, -/obj/item/clothing/mask/luchador/rudos, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) "Yw" = ( /turf/closed/indestructible/fakedoor{ name = "External Access" @@ -18853,9 +18869,23 @@ /obj/machinery/door/airlock/titanium, /turf/open/floor/mineral/titanium, /area/centcom/evac) -"YC" = ( -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) +"Yz" = ( +/obj/structure/chair/comfy/brown{ + color = "#596479"; + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) +"YF" = ( +/obj/machinery/vending/clothing{ + extended_inventory = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding) +"YH" = ( +/obj/item/hilbertshotel/ghostdojo, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "YJ" = ( /obj/item/reagent_containers/food/condiment/enzyme, /obj/item/reagent_containers/food/drinks/shaker, @@ -18864,10 +18894,6 @@ /obj/structure/closet/crate, /turf/open/floor/plasteel/cafeteria, /area/centcom/holding) -"YL" = ( -/obj/machinery/vending/clothing, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "YN" = ( /obj/structure/window/reinforced{ dir = 8 @@ -18875,10 +18901,24 @@ /mob/living/simple_animal/chicken, /turf/open/floor/grass, /area/centcom/holding) -"YO" = ( -/obj/structure/chair/comfy/brown{ +"YP" = ( +/obj/structure/sink/kitchen{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "sink"; + pixel_y = 28 + }, +/obj/effect/turf_decal/tile/green{ dir = 1 }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/book/manual/hydroponics_pod_people, /turf/open/indestructible/hotelwood, /area/centcom/holding) "YU" = ( @@ -18929,17 +18969,24 @@ /turf/open/floor/plasteel, /area/centcom/supplypod) "Zl" = ( -/obj/structure/table, -/obj/item/clothing/gloves/boxing, -/obj/item/clothing/gloves/boxing/blue, -/obj/item/clothing/gloves/boxing/green, -/obj/item/clothing/gloves/boxing/yellow, -/turf/open/floor/holofloor/wood, -/area/holodeck/rec_center/wrestlingarena) +/obj/structure/bed/dogbed, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Zr" = ( /obj/machinery/light, /turf/open/floor/plasteel/dark, /area/syndicate_mothership) +"Zv" = ( +/obj/structure/closet, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/machinery/iv_drip, +/obj/item/roller, +/obj/item/storage/firstaid/regular, +/obj/item/reagent_containers/medspray/synthflesh, +/obj/item/reagent_containers/medspray/synthflesh, +/obj/item/reagent_containers/medspray/synthflesh, +/turf/open/floor/plasteel/white, +/area/centcom/holding) "Zw" = ( /obj/structure/bed, /obj/item/bedsheet/syndie, @@ -18958,20 +19005,6 @@ /obj/effect/landmark/start/nukeop_leader, /turf/open/floor/wood, /area/syndicate_mothership) -"ZB" = ( -/obj/effect/landmark/holding_facility, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"ZE" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/turf/open/floor/mineral/titanium/blue, -/area/centcom/holding) "ZF" = ( /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ @@ -19008,26 +19041,6 @@ /turf/open/floor/mineral/plastitanium/red, /area/syndicate_mothership) "ZL" = ( -/obj/structure/closet, -/obj/item/stack/sheet/mineral/wood/fifty, -/obj/item/stack/tile/wood{ - amount = 24 - }, -/obj/item/stack/tile/carpet/black/fifty, -/obj/item/stack/tile/carpet/blackred/fifty, -/obj/item/stack/tile/carpet/blue/fifty, -/obj/item/stack/tile/carpet/cyan/fifty, -/obj/item/stack/tile/carpet/fifty, -/obj/item/stack/tile/carpet/green/fifty, -/obj/item/stack/tile/carpet/monochrome/fifty, -/obj/item/stack/tile/carpet/orange/fifty, -/obj/item/stack/tile/carpet/purple/fifty, -/obj/item/stack/tile/carpet/red/fifty, -/obj/item/stack/tile/carpet/royalblack/fifty, -/obj/item/stack/tile/carpet/royalblue/fifty, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) -"ZN" = ( /obj/machinery/vending/snack, /turf/open/indestructible/hotelwood, /area/centcom/holding) @@ -19044,8 +19057,13 @@ /turf/open/floor/plasteel, /area/centcom/supplypod/loading/two) "ZR" = ( -/obj/structure/bed/dogbed, -/turf/open/indestructible/hotelwood, +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/open/floor/plasteel/white, /area/centcom/holding) "ZT" = ( /mob/living/simple_animal/cow, @@ -19082,27 +19100,6 @@ }, /turf/open/floor/plasteel, /area/centcom/supply) -"ZZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/chem_master/condimaster{ - desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; - name = "BrewMaster 2199"; - pixel_x = -4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) (1,1,1) = {" aa @@ -26210,7 +26207,7 @@ lI lI lI Ax -Qi +Na qZ qZ Ax @@ -43442,50 +43439,50 @@ aa aa aa Nd -SW -PO -PO -Sw -PO -PO -PO +Mq +Ur +Ur PO +Ur +Ur +Ur +Ur Nd -Tt -Tt -TG +ZR +ZR +qF Op Nd Rm Tn UT yd -Sd -Sd +NS +NS XM NT UV -CV -Sd +Fb +NS Nd -OW -Ln +CT +oV Nd -Lm -Lm -Lm +St +St +St Nd -PQ -Sd -ZR +Sv +NS +Zl Nd -RL -Yo -Uq +VY +PL +oW Nd -VL -Ww -NN +NP +Uc +Vn Nd aa aa @@ -43699,49 +43696,49 @@ aa aa aa Nd -Pc -PY -PY -PY -PY -PY -PY -PY +YP +Wu +Wu +Wu +Wu +Wu +Wu +Wu Nd ZW ZW ZW ZW Za -Sd -Sd -Sd +NS +NS +NS Tu -Sd -Sd +NS +NS Tn NT RQ -Sd -Sd +NS +NS Nd -UN -ST +yW +Uk Nd -zS -Qw -TC +Oi +Pz +kv Nd -MJ -Sd -Sd +Ly +NS +NS Nd -AE -Sd -Ph +We +NS +Fj Nd Gs -Sd +NS HH Nd aa @@ -43947,59 +43944,59 @@ aa aa aa aa -Ud -Ud -Ud -Ud -Ud +Fe +Fe +Fe +Fe +Fe aa aa aa Nd -ZZ -PY -PY -PY -PY -PY -PY -RN +pB +Wu +Wu +Wu +Wu +Wu +Wu +PI Nd SB ZW ZW ZW Nd -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS GY NT UV -CV -Sd +Fb +NS Nd -Ot -ST +Rq +Uk Nd -Tf -Qw -Tf +Px +Pz +Px Nd -ma -Sd -Sd -Nd -ZN -Sd -Sd +Mw +NS +NS Nd ZL -Sd -Lr +NS +NS +Nd +CU +NS +Ns Nd aa aa @@ -44204,58 +44201,58 @@ aa aa aa aa -Ud -Uc -ZB -ZB -Ud +Fe +VH +XZ +XZ +Fe aa aa aa Nd -PI -PY -PY -PY -PY -PY -PY -Rj +pG +Wu +Wu +Wu +Wu +Wu +Wu +PE Nd SB -NE -Fl +Ts +OI Nw Nd -Sd -Sd -Sd -Ph -Sd +NS +NS +NS +Fj +NS Tu Vu Nd -hH -Sd -Sd +Gt +NS +NS Nd Nd -Wl +Qn Nd Nd -Wl +Qn Nd Nd Nd -yS +Np Nd Nd -WD -Sd +MW +NS HH Nd Nd -Ox +Ff Nd Nd aa @@ -44461,59 +44458,59 @@ aa aa aa aa -Ud -ZB -CQ -Ql -Ud +Fe +XZ +sf +Tf +Fe aa aa aa Nd -Tx +zE +Wu +Wu +Wu +SW PY -PY -PY -Um -XS -PY -vs +Wu +Nn Nd Nd Nd Nd Nd Nd -Sd -Sd +NS +NS XM QL -Sd -Sd +NS +NS XM NT PX -CV -Sd +Fb +NS NT -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS Nd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -WE +NS +NS +NS +NS +NS +NS +NS +NS +NS +NS +Ow Nd aa aa @@ -44718,11 +44715,11 @@ aa aa aa aa -Ud -wZ -ZB -Qn -Ud +Fe +WR +XZ +Mn +Fe aa aa aa @@ -44736,41 +44733,41 @@ Nd py Nd Nd -Yh -Sd -Yo -Sd -Wl -Sd -Sd +XW +NS +PL +NS +Qn +NS +NS Tn Tu -Sd -Sd +NS +NS Tn NT Zh -Sd -Sd -Dl -Sd -Sd -Sd -Sd -Sd -Sd -Qu -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sj +NS +NS +zy +NS +NS +NS +NS +NS +NS +tc +NS +NS +NS +NS +NS +NS +NS +NS +NS +NS +SM Nd aa aa @@ -44975,59 +44972,59 @@ aa aa aa aa -Ud -Ud -Ud -Ud -Ud +Fe +Fe +Fe +Fe +Fe aa aa aa Nd -Lr -Sd -Yo -Sd -Sd -Sd -Sd -Sd -Sd -Sd +Ns +NS +PL +NS +NS +NS +NS +NS +NS +NS Nd Nd Nd Nd Gs -Sd +NS GY Tu -Sd -Sd +NS +NS GY NT Ym -CV -Sd +Fb +NS NT -Sd -MR -Sd -Sd -MR -Sd +NS +SU +NS +NS +SU +NS Nd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -Sd -PM +NS +NS +NS +NS +NS +NS +NS +NS +NS +NS +YF Nd aa aa @@ -45241,31 +45238,31 @@ aa aa aa Nd -Tq -Sd +UU +NS MG YN Nd -US +Wq Fh Fh zV Nd Nd -Hj +zY Fa KT -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS HH Nd -Sd -Sd -Sd +NS +NS +NS Nd Nd Nd @@ -45278,8 +45275,8 @@ Nd Nd Nd Nd -Rq -Sd +Mz +NS HH Nd Nd @@ -45498,31 +45495,31 @@ aa aa aa Nd -ZL -Sd +CU +NS Rh Mm Nd -Nx +Wp Fh Fh Yu Nd -AE -CV -Sd -Ll -CV -Sd -Sd -Sd -Sd -Sd -Sd +We +Fb +NS +wY +Fb +NS +NS +NS +NS +NS +NS Re -Sd -Sd -Sd +NS +NS +NS NT vt YV @@ -45531,17 +45528,17 @@ OU RS VF Nd -UD -tZ +Oq +SE SY Nd -Sd -Sd -Sd +NS +NS +NS Nd SY -Os -UD +QS +Oq Nd aa aa @@ -45755,9 +45752,9 @@ aa aa aa Nd -ZN -Sd -yW +ZL +NS +Xk ZT Nd Pr @@ -45765,40 +45762,40 @@ Fh Fh QW Nd -QJ -Sd -Sd -NA -Sd -Sd -Sd -Sd -Sd -Sd -Sd +vx +NS +NS +Ng +NS +NS +NS +NS +NS +NS +NS Nd Gs Zx -Sd +NS OL -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS Nd -Sd -Sd -Sd -lS -Sd -Sd -Sd -RP -Sd -Sd -Sd +NS +NS +NS +Qh +NS +NS +NS +UI +NS +NS +NS Nd aa aa @@ -46022,40 +46019,40 @@ Fh Fh Vv Nd -Sd -Sd -Sd +NS +NS +NS FW -Sd -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS +NS Re -Sd -Sd -Sd +NS +NS +NS NT So XM -Sd +NS XM XM -Sd +NS Nd -Xn -Sd -Ya +wj +NS +Oo Nd -Sd -Sd -Sd +NS +NS +NS Nd -XD -Sd -Xn +Xm +NS +wj Nd aa aa @@ -46269,46 +46266,46 @@ aa aa aa Nd -NZ -Sd -Yo +Qs +NS PL +VI Nd -SG +Pp Fh Fh Fh -Wl +Qn +NS +Bm Sd -TD -On FX -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS HH Nd WM -Sd -Sd +NS +NS NT Nj Po Wb Po ZU -Sd +NS Nd Nd Nd Nd Nd -Sd -Sd -Sd +NS +NS +NS Nd Nd Nd @@ -46526,50 +46523,50 @@ aa aa aa Nd -OG -Sd -Sd -Tq +HE +NS +NS +UU Nd zX Fh Fh -JV +TV Nd -Dl +zy Nd Nd Nd Gs -Sd +NS XM Tu -Sd -Sd +NS +NS XM NT -Sd -Sd -Sd +NS +NS +NS NT YU -zT -zT -zT +Ok +Ok +Ok MM -Sd +NS Nd -UD -tZ +Oq +SE SY Nd -Sd -Sd -Sd +NS +NS +NS Nd SY -Os -UD +QS +Oq Nd aa aa @@ -46783,50 +46780,50 @@ aa aa aa Nd -Xf -Sd -Sd -Nf +xL +NS +NS +ue Nd QA Fh Fh -Uz -ED -Sd -Yo +ug +Nv +NS +PL Yf UE -Sd -Sd +NS +NS Tn Xd -Sd -Sd +NS +NS Tn NT -Sd -Sd -Sd +NS +NS +NS NT YU -zT -zT -zT +Ok +Ok +Ok MM TM Nd -Sd -Sd -Sd -uh -Sd -Sd -Sd -zW -Sd -Sd -Sd +NS +NS +NS +Dm +NS +NS +NS +TJ +NS +NS +NS Nd aa aa @@ -47040,50 +47037,50 @@ aa aa aa Nd -YL -Sd -Sd -Uk +VK +NS +NS +Xb Nd Xo Fh Fh Fh py -Sd -Sd +NS +NS SY UE -Sd -Sd +NS +NS GY Tu -Sd -Sd +NS +NS GY NT -Sd -Sd -Sd +NS +NS +NS NT YU -zT -zT -zT +Ok +Ok +Ok MM -Sd +NS Nd -Xn -Sd -Tc +wj +NS +Uq Nd -Sd -Sd -Sd +NS +NS +NS Nd -AC -Sd -Xn +MQ +NS +wj Nd aa aa @@ -47297,45 +47294,45 @@ aa aa aa Nd -Xe -Sd -Sd -ZL +ll +NS +NS +CU Nd TB Fh Fh Fh BV -Sd -Sd +NS +NS XT UE -Sd -Sd -Sd -Ph -Sd +NS +NS +NS +Fj +NS Qk Vu Nd Gs -Sd -Sd +NS +NS NT Mt PA Ra PA Pl -Sd +NS Nd Nd Nd Nd Nd -Rq -Sd +Mz +NS HH Nd Nd @@ -47554,50 +47551,50 @@ aa aa aa Nd -TY -Sd -Sd -Sd +lS +NS +NS +NS Nd Vz Fh Fh YJ QT -Sd -Sd +NS +NS SY UE -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS XM NT -Sd -Sd -Sd +NS +NS +NS NT Ye GY -Sd +NS GY GY -Sd +NS Nd -Xs -Ol -YO +UP +ML +NX Nd -Sd -Sd -Sd +NS +NS +NS Nd -RX -Xw -qP +RM +Qy +Yz Nd aa aa @@ -47811,49 +47808,49 @@ aa aa aa Nd -Bs -Ri -Sd -Sd +TD +CS +NS +NS XL Fh Fh Fh Fh XL -Sd -Sd +NS +NS XX UE -Sd -Sd -Sd +NS +NS +NS Tu -Sd -Sd +NS +NS Tn NT -Sd -Sd -Sd +NS +NS +NS OL -Sd -Sd -Sd -Sd -Sd -Sd +NS +NS +NS +NS +NS +NS Nd Gs -Sd -Sd -SZ -Sd -Sd -Sd -Ws -Sd -Sd +NS +NS +Hy +NS +NS +NS +Lq +NS +NS HH Nd aa @@ -48068,50 +48065,50 @@ aa aa aa Nd -Hk -Sd -MR -Mz +rh +NS +SU +uH Nd SN pV pV Tr Nd -WY -Ph +WV +Fj Nd Nd Rm Tn UT Hm -Sd -Sd +NS +NS GY NT -Tw -Ms -Ro +TS +QM +ta NT vt Mx -Sd -Sd +NS +NS Uh tW Nd -Ru -Of -QF +Td +XN +xB Nd -Sd -Sd -Sd +NS +NS +NS Nd -WN -Ur -Ki +VC +Nl +ma Nd aa aa @@ -48353,22 +48350,22 @@ Nd Nd Nd Nd -Sd -Sd +NS +NS Nd Nd Nd -Kf -WV -Sd +QN +vp +NS Nd -sa -Sd -Sd +YH +NS +NS Nd -Sd -zY -Rv +NS +Mj +uh Nd aa aa @@ -48608,22 +48605,22 @@ aa aa aa Nd -vv +Zv VA ZW ZW -px -Lk +Nf +MX Nd Nd Nd -QC +sk Nd Nd -SR +wU Nd Nd -QC +sk Nd Nd Nd @@ -48865,24 +48862,24 @@ aa aa aa Nd -sf +Dn ZW ZW ZW ZW -OT +Ux Nd -Ln -ST -ST +oV +Uk +Uk Nd -Qp -Sd -Nt +Hj +NS +TY Nd -ST -ST -Ln +Uk +Uk +oV Nd aa aa @@ -49122,24 +49119,24 @@ aa aa aa Nd -Bq -RK -Qy -Yj +TZ +yf +Tg +Qd ZW -Wz +Ru Nd -xO -QN -ZE +yX +Lj +OO Nd -Qp -Qz -Nt +Hj +QF +TY Nd -ZE -QN -RO +OO +Lj +Oy Nd aa aa @@ -58969,7 +58966,7 @@ aa aa aa aa -Qc +wi aa aa aa @@ -72327,16 +72324,16 @@ aa aa aa bj -YC -YC -YC -YC -YC -YC -YC -YC -YC -YC +tv +tv +tv +tv +tv +tv +tv +tv +tv +tv fx aa aa @@ -72584,16 +72581,16 @@ aa aa aa bj -Vk -YC -YC -YC -YC -YC -YC -YC -YC -Vk +NB +tv +tv +tv +tv +tv +tv +tv +tv +NB fx aa aa @@ -72841,16 +72838,16 @@ aa aa aa bj -Vk -YC -YC -YC -YC -YC -YC -YC -YC -Vk +NB +tv +tv +tv +tv +tv +tv +tv +tv +NB fx aa aa @@ -73098,16 +73095,16 @@ aa aa aa bj -Vk -YC -YC -YC -YC -YC -YC -YC -YC -Vk +NB +tv +tv +tv +tv +tv +tv +tv +tv +NB fx aa aa @@ -73355,16 +73352,16 @@ aa aa aa bj -YC -YC -Wx -YC -Yv -Ui -YC -Zl -YC -YC +tv +tv +rg +tv +Ld +Lm +tv +Qw +tv +tv fx aa aa diff --git a/_maps/runtimestation.json b/_maps/runtimestation.json index f9333c65a2..ca2cc3d379 100644 --- a/_maps/runtimestation.json +++ b/_maps/runtimestation.json @@ -1,8 +1,8 @@ -{ - "map_name": "Runtime Station", - "map_path": "map_files/debug", - "map_file": "runtimestation.dmm", - "shuttles": { - "cargo": "cargo_delta" - } -} +{ + "map_name": "Runtime Station", + "map_path": "map_files/debug", + "map_file": "runtimestation.dmm", + "shuttles": { + "cargo": "cargo_delta" + } +} diff --git a/_maps/templates/hilbertshotel.dmm b/_maps/templates/hilbertshotel.dmm index da5d13d93e..5654e0428f 100644 --- a/_maps/templates/hilbertshotel.dmm +++ b/_maps/templates/hilbertshotel.dmm @@ -72,7 +72,7 @@ /turf/open/indestructible/hotelwood, /area/hilbertshotel) "n" = ( -/obj/effect/landmark/xmastree, +/obj/effect/landmark/xmastree/hilbert, /turf/open/indestructible/hotelwood, /area/hilbertshotel) "o" = ( diff --git a/bot/nudge.py b/bot/nudge.py index b1e6058cc0..6c551ab0d2 100644 --- a/bot/nudge.py +++ b/bot/nudge.py @@ -1,25 +1,25 @@ -#!/usr/bin/env python3 -from config import * -import sys -import pickle -import socket - - -def pack(): - ip = sys.argv[1] - try: - data = sys.argv[2:] - except: - data = "NO DATA SPECIFIED" - - nudge(pickle.dumps({"ip": ip, "data": data})) - - -def nudge(data): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect(("localhost", 45678)) - s.send(data) - s.close() - -if __name__ == "__main__" and len(sys.argv) > 1: - pack() +#!/usr/bin/env python3 +from config import * +import sys +import pickle +import socket + + +def pack(): + ip = sys.argv[1] + try: + data = sys.argv[2:] + except: + data = "NO DATA SPECIFIED" + + nudge(pickle.dumps({"ip": ip, "data": data})) + + +def nudge(data): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect(("localhost", 45678)) + s.send(data) + s.close() + +if __name__ == "__main__" and len(sys.argv) > 1: + pack() diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 97f07acc05..143063b4e9 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -35,8 +35,9 @@ #define R_SPAWN (1<<12) #define R_AUTOLOGIN (1<<13) #define R_DBRANKS (1<<14) +#define R_SENSITIVE (1<<15) -#define R_DEFAULT R_AUTOLOGIN +#define R_DEFAULT R_AUTOLOGIN | R_SENSITIVE #define R_EVERYTHING ALL //the sum of all other rank permissions, used for +EVERYTHING diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 1d47549685..68515426c3 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -70,6 +70,7 @@ ///Heretics -- #define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic)) +#define IS_HERETIC_MONSTER(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) #define PATH_SIDE "Side" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 7eebada734..d12fe77448 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -81,6 +81,8 @@ //stamina stuff /// crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit #define STAMINA_CRIT 140 +/// Threshold for leaving stamina critical +#define STAMINA_CRIT_REMOVAL_THRESHOLD 100 /// Threshold under for which you are unable to draw from stamina health to replace stamina buffer #define STAMINA_NO_OVERDRAW_THRESHOLD 100 diff --git a/code/__DEFINES/combat/stamina_combat.dm b/code/__DEFINES/combat/stamina_combat.dm index 1f781ca3e0..351009f27f 100644 --- a/code/__DEFINES/combat/stamina_combat.dm +++ b/code/__DEFINES/combat/stamina_combat.dm @@ -10,7 +10,7 @@ /// Usage for eyestabbing with a screwdriver #define STAMINA_COST_ITEM_EYESTAB 7.5 /// Usage for shoving yourself off the ground instantly -#define STAMINA_COST_SHOVE_UP 10 +#define STAMINA_COST_SHOVE_UP 15 //items total mass, used to calculate their attacks' stamina costs. If not defined, the cost will be (w_class * 1.25) #define TOTAL_MASS_TINY_ITEM 1.25 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 7b214df421..51a5fb3ece 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -490,6 +490,17 @@ #define COMPONENT_PROGRAM_INSTALLED 1 //Installation successful #define COMPONENT_PROGRAM_NOT_INSTALLED 2 //Installation failed, but there are still nanites #define COMSIG_NANITE_SYNC "nanite_sync" //(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component +/// Checks if a nanite component is able to be controlled by console +#define COMSIG_NANITE_CHECK_CONSOLE_LOCK "is_console_locked" +/// Checks if a nanite component is able to be interfaced with by a host with innate nanite control +#define COMSIG_NANITE_CHECK_HOST_LOCK "is_host_locked" +/// Checks if a nanite component is able to be overwritten by viral replica +#define COMSIG_NANITE_CHECK_VIRAL_PREVENTION "is_virus_locked" + #define NANITE_CHANGES_LOCKED 1 +// Internal signals that programs register to and respond with to not require for loops +#define COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK "naniteiconsolelocked" +#define COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK "naniteihostlocked" +#define COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK "naniteiviruslocked" // /datum/component/storage signals #define COMSIG_CONTAINS_STORAGE "is_storage" //() - returns bool. diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index 6f1740cc9f..7fe5fa4876 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -67,3 +67,13 @@ #define LOADOUT_LIMB_AMPUTATED "Amputated" #define LOADOUT_LIMBS list(LOADOUT_LIMB_NORMAL,LOADOUT_LIMB_PROSTHETIC,LOADOUT_LIMB_AMPUTATED) //you can amputate your legs/arms though + +//loadout saving/loading specific defines +#define MAXIMUM_LOADOUT_SAVES 5 +#define LOADOUT_ITEM "loadout_item" +#define LOADOUT_COLOR "loadout_color" + +//loadout item flags +#define LOADOUT_CAN_NAME (1<<0) //renaming items +#define LOADOUT_CAN_DESCRIPTION (1<<1) //adding a custom description to items +#define LOADOUT_CAN_COLOR_POLYCHROMIC (1<<2) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e8849d04c8..153a82ad5e 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -48,6 +48,8 @@ #define MOB_EPIC (1 << 7) // Megafauna #define MOB_REPTILE (1 << 8) #define MOB_SPIRIT (1 << 9) +/// Mobs that otherwise support nanites +#define MOB_NANITES (1 << 10) // Organ defines for carbon mobs #define ORGAN_ORGANIC 1 @@ -56,6 +58,7 @@ #define BODYPART_ORGANIC 1 #define BODYPART_ROBOTIC 2 #define BODYPART_HYBRID 3 +#define BODYPART_NANITES 4 #define HYBRID_BODYPART_DAMAGE_THRESHHOLD 25 //How much damage has to be suffered until the damage threshhold counts as passed #define HYBRID_BODYPART_THESHHOLD_MINDAMAGE 15 //Which damage value this limb cannot be healed out of via easy nonsurgical means if the threshhold has been passed, state resets if damage value goes below mindamage. diff --git a/code/__DEFINES/mobs/innate_abilities.dm b/code/__DEFINES/mobs/innate_abilities.dm new file mode 100644 index 0000000000..d2d3dbbc67 --- /dev/null +++ b/code/__DEFINES/mobs/innate_abilities.dm @@ -0,0 +1,29 @@ +// helpers + +// sources +/// Species +#define ABILITY_SOURCE_SPECIES "species" +/// Changeling +#define ABILITY_SOURCE_CHANGELING "changeling" + +// abilities +/// Full customization and transformation of mutantparts/hair/sprite accessories/etc - excludes name by default +#define INNATE_ABILITY_HUMANOID_CUSTOMIZATION "humanoid_customization" +/// Slime blobform +#define INNATE_ABILITY_SLIME_BLOBFORM "slime_blobform" +/// limb regrowth +#define INNATE_ABILITY_LIMB_REGROWTH "limb_regrowth" + +/// ability properties +// customization/body change +/// is this silent? +#define PROPERTY_CUSTOMIZATION_SILENT "silent" +// blobform +/// Blobform color +#define PROPERTY_BLOBFORM_COLOR "color" +// limb regrwoth +/// limb regrowth usage type +#define PROPERTY_LIMB_REGROWTH_USAGE_TYPE "cost" + /// blood + #define REGROWTH_USES_BLOOD "blood" + diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index d7487eb54b..605b3f6485 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -40,6 +40,7 @@ //#define ROLE_MONSTERHUNTER "monster hunter" Disabled for now #define ROLE_GHOSTCAFE "ghostcafe" #define ROLE_MINOR_ANTAG "minorantag" +#define ROLE_RESPAWN "respawnsystem" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough //(in game days played) to play that role diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index e70955845c..2562bfe4d3 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "5.2.8" +#define TGS_DMAPI_VERSION "5.2.9" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -117,22 +117,22 @@ //REQUIRED HOOKS /** - * 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]. - */ + * 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]. + */ /world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) return /** - * Call this when your initializations are complete and your 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 - * Before this point, note that any static files or directories may be in use by another server. Your code should account for this. - * This function should not be called before ..() in [/world/proc/New]. - */ + * Call this when your initializations are complete and your 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 + * Before this point, note that any static files or directories may be in use by another server. Your code should account for this. + * This function should not be called before ..() in [/world/proc/New]. + */ /world/proc/TgsInitializationComplete() return @@ -140,8 +140,8 @@ #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return /** - * Call this at the beginning of [world/proc/Reboot]. - */ + * Call this at the beginning of [world/proc/Reboot]. + */ /world/proc/TgsReboot() return @@ -175,16 +175,16 @@ var/deprefixed_parameter /** - * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. - */ + * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. + */ /datum/tgs_version/proc/Wildcard() return /** - * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] equals some other version. - * - * other_version - The [/datum/tgs_version] to compare against. - */ + * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] equals some other version. + * + * other_version - The [/datum/tgs_version] to compare against. + */ /datum/tgs_version/proc/Equals(datum/tgs_version/other_version) return @@ -234,10 +234,10 @@ var/datum/tgs_chat_channel/channel /** - * User definable callback for handling TGS events. - * - * event_code - One of the TGS_EVENT_ defines. Extra parameters will be documented in each - */ + * User definable callback for handling TGS events. + * + * event_code - One of the TGS_EVENT_ defines. Extra parameters will be documented in each + */ /datum/tgs_event_handler/proc/HandleEvent(event_code, ...) set waitfor = FALSE return @@ -252,11 +252,11 @@ var/admin_only = FALSE /** - * Process command activation. Should return a string to respond to the issuer with. - * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. - */ + * Process command activation. Should return a string to respond to the issuer with. + * + * 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()") @@ -271,48 +271,48 @@ return /** - * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. - */ + * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. + */ /world/proc/TgsAvailable() return // No function below this succeeds if it TgsAvailable() returns FALSE or if TgsNew() has yet to be called. /** - * Forces a hard reboot of DreamDaemon by ending the process. - * - * Unlike del(world) clients will try to reconnect. - * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again - */ + * Forces a hard reboot of DreamDaemon by ending the process. + * + * Unlike del(world) clients will try to reconnect. + * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again + */ /world/proc/TgsEndProcess() return /** - * Send a message to connected chats. - * - * message - The string to send. - * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. - */ + * Send a message to connected chats. + * + * message - The string to send. + * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. + */ /world/proc/TgsTargetedChatBroadcast(message, admin_only = FALSE) return /** - * Send a private message to a specific user. - * - * message - The string to send. - * user: The [/datum/tgs_chat_user] to PM. - */ + * Send a private message to a specific user. + * + * message - The string to send. + * user: The [/datum/tgs_chat_user] to PM. + */ /world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) return // The following functions will sleep if a call to TgsNew() is sleeping /** - * Send a message to connected chats that are flagged as game-related in TGS. - * - * message - The string to send. - * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. - */ + * Send a message to connected chats that are flagged as game-related in TGS. + * + * message - The string to send. + * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. + */ /world/proc/TgsChatBroadcast(message, list/channels = null) return diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 1a3c926884..2275c4b90b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -213,6 +213,10 @@ #define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" /// Prevents stamina buffer regeneration #define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" /// Prevents stamina regeneration #define TRAIT_ARMOR_BROKEN "armor_broken" //acts as if you are wearing no clothing when taking damage, does not affect non-clothing sources of protection +/// forces update_density to make us not dense +#define TRAIT_LIVING_NO_DENSITY "living_no_density" +/// forces us to not render our overlays +#define TRAIT_HUMAN_NO_RENDER "human_no_render" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm index 0e97314f1f..34b31cc1c7 100644 --- a/code/__HELPERS/custom_holoforms.dm +++ b/code/__HELPERS/custom_holoforms.dm @@ -46,17 +46,29 @@ I = getPAIHologramIcon(I) return I -//Errors go to user. -/proc/generate_custom_holoform_from_prefs_safe(datum/preferences/prefs, mob/user) - if(user) - if(user.client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) - to_chat(user, "You are attempting to set your custom holoform too fast!") - return - return generate_custom_holoform_from_prefs(prefs, null, null, TRUE, TRUE) - //Prompts this client for custom holoform parameters. /proc/user_interface_custom_holoform(client/C) var/datum/preferences/target_prefs = C.prefs + if(target_prefs.path) + var/list/characters = list() + var/savefile/S = new /savefile(target_prefs.path) + if(S) + var/name + var/max_save_slots = C.prefs.max_save_slots + for(var/i=1, i<=max_save_slots, i++) + S.cd = "/character[i]" + S["real_name"] >> name + if(name) + characters[name] = i + var/chosen_name = input(C, "Which character do you wish to use as your appearance.") as anything in characters + if(chosen_name) + if(C.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) + to_chat(C.mob, "You are attempting to set your custom holoform too fast!") + return + target_prefs = new(C) + if(!target_prefs.load_character(characters[chosen_name], TRUE)) + target_prefs = C.prefs + ASSERT(target_prefs) //In the future, maybe add custom path allowances a la admin create outfit but for now.. - return generate_custom_holoform_from_prefs_safe(target_prefs, C.mob) + return generate_custom_holoform_from_prefs(target_prefs, null, null, TRUE, TRUE) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 90864cf359..1d37f639bf 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1235,3 +1235,18 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico var/icon/I = getFlatIcon(thing) return icon2html(I, target, sourceonly = sourceonly) +/* Gives the result RGB of a RGB string after a matrix transformation. No alpha. + * Input: rr, rg, rb, gr, gg, gb, br, bg, bb, cr, cg, cb + * Output: RGB string + */ +/proc/RGBMatrixTransform(list/color, list/cm) + ASSERT(cm.len >= 9) + if(cm.len < 12) // fill in the rest + for(var/i in 1 to (12 - cm.len)) + cm += 0 + if(!islist(color)) + color = ReadRGB(color) + color[1] = color[1] * cm[1] + color[2] * cm[2] + color[3] * cm[3] + cm[10] * 255 + color[2] = color[1] * cm[4] + color[2] * cm[5] + color[3] * cm[6] + cm[11] * 255 + color[3] = color[1] * cm[7] + color[2] * cm[8] + color[3] * cm[9] + cm[12] * 255 + return rgb(color[1], color[2], color[3]) diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index af8efd425d..59fbb4ffc0 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -177,3 +177,9 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro for(x in 1 to 4) output[offset+x] = round(A[offset+1]*B[x] + A[offset+2]*B[x+4] + A[offset+3]*B[x+8] + A[offset+4]*B[x+12]+(y==5?B[x+16]:0), 0.001) return output + +/** + * Assembles a color matrix, defaulting to identity + */ +/proc/rgb_construct_color_matrix(rr = 1, rg, rb, gr, gg = 1, gb, br, bg, bb = 1, cr, cg, cb) + return list(rr, rg, rb, gr, gg, gb, br, bg, bb, cr, cg, cb) diff --git a/code/__HELPERS/shell.dm b/code/__HELPERS/shell.dm index 3438f38b85..303036b341 100644 --- a/code/__HELPERS/shell.dm +++ b/code/__HELPERS/shell.dm @@ -13,6 +13,7 @@ var/err_file = "" var/static/list/interpreters = list("[MS_WINDOWS]" = "cmd /c", "[UNIX]" = "sh -c") var/interpreter = interpreters["[world.system_type]"] + log_subsystem("SHELL", "Executing command [command]") if(interpreter) for(var/seo_id in shelleo_ids) if(!shelleo_ids[seo_id]) @@ -36,6 +37,7 @@ else CRASH("Operating System: [world.system_type] not supported") // If you encounter this error, you are encouraged to update this proc with support for the new operating system . = list(errorcode, stdout, stderr) + log_subsystem("SHELL", "Finished execution: [errorcode], [stdout], [stderr]") #undef SHELLEO_NAME #undef SHELLEO_ERR #undef SHELLEO_OUT diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index bbbf99c9de..0987e95dc9 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -225,6 +225,8 @@ . += "[seperator]AUTOLOGIN" if(rights & R_DBRANKS) . += "[seperator]DBRANKS" + if(rights & R_SENSITIVE) + . += "[seperator]SENSITIVE" if(!.) . = "NONE" return . diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index b558b28cf2..3fc275d436 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -67,7 +67,8 @@ GLOBAL_LIST_INIT(bitfields, list( "SOUNDS" = R_SOUNDS, "SPAWN" = R_SPAWN, "AUTOLOGIN" = R_AUTOLOGIN, - "DBRANKS" = R_DBRANKS + "DBRANKS" = R_DBRANKS, + "SENSITIVE" = R_SENSITIVE ), "interaction_flags_atom" = list( "INTERACT_ATOM_REQUIRES_ANCHORED" = INTERACT_ATOM_REQUIRES_ANCHORED, diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 0fd09d297d..9d5110daf5 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -388,6 +388,8 @@ Example config: var/list/probabilities = Get(/datum/config_entry/keyed_list/storyteller_weight) var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust) var/list/min_player_counts = Get(/datum/config_entry/keyed_list/storyteller_min_players) + var/list/storyteller_min_chaos = Get(/datum/config_entry/keyed_list/storyteller_min_chaos) + var/list/storyteller_max_chaos = Get(/datum/config_entry/keyed_list/storyteller_max_chaos) for(var/T in storyteller_cache) var/datum/dynamic_storyteller/S = T var/config_tag = initial(S.config_tag) @@ -399,6 +401,13 @@ Example config: continue if(length(GLOB.player_list) < min_players) continue + if(!Get(/datum/config_entry/flag/no_storyteller_threat_removal)) + var/min_chaos = (probabilities in storyteller_min_chaos) ? storyteller_min_chaos[config_tag] : initial(S.min_chaos) + var/max_chaos = (probabilities in storyteller_max_chaos) ? storyteller_max_chaos[config_tag] : initial(S.max_chaos) + if(SSpersistence.average_dynamic_threat < min_chaos) + continue + if(SSpersistence.average_dynamic_threat > max_chaos) + continue if(SSpersistence.saved_storytellers.len == repeated_mode_adjust.len) var/name = initial(S.name) var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3) diff --git a/code/controllers/configuration/entries/dynamic.dm b/code/controllers/configuration/entries/dynamic.dm index 44d9a041a6..935164352e 100644 --- a/code/controllers/configuration/entries/dynamic.dm +++ b/code/controllers/configuration/entries/dynamic.dm @@ -1,5 +1,7 @@ /datum/config_entry/flag/dynamic_voting +/datum/config_entry/flag/no_storyteller_threat_removal + /datum/config_entry/number/dynamic_high_pop_limit config_entry_value = 55 min_val = 1 @@ -67,6 +69,9 @@ /datum/config_entry/number/dynamic_third_rule_high_pop_requirement config_entry_value = 70 +/datum/config_entry/number/dynamic_threat_baseline + config_entry_value = 50 + /datum/config_entry/number_list/dynamic_hijack_requirements /datum/config_entry/number/dynamic_hijack_high_population_requirement @@ -74,7 +79,7 @@ /datum/config_entry/number/dynamic_hijack_cost config_entry_value = 5 - + /datum/config_entry/number/dynamic_glorious_death_cost config_entry_value = 5 @@ -96,3 +101,11 @@ /datum/config_entry/keyed_list/storyteller_min_players key_mode = KEY_MODE_TEXT value_mode = VALUE_MODE_NUM + +/datum/config_entry/keyed_list/storyteller_min_chaos + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_NUM + +/datum/config_entry/keyed_list/storyteller_max_chaos + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_NUM diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 90ec3bc289..3c93952b65 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -172,8 +172,6 @@ /datum/config_entry/string/hostedby -/datum/config_entry/flag/norespawn - /datum/config_entry/flag/guest_jobban /datum/config_entry/flag/usewhitelist diff --git a/code/controllers/configuration/entries/respawns.dm b/code/controllers/configuration/entries/respawns.dm new file mode 100644 index 0000000000..40c7d248a4 --- /dev/null +++ b/code/controllers/configuration/entries/respawns.dm @@ -0,0 +1,47 @@ +/// Allows usage of respawn system +/datum/config_entry/flag/respawns_enabled + config_entry_value = FALSE + +/// Minutes before allowing respawns. +/datum/config_entry/number/respawn_delay + config_entry_value = 15.0 + integer = FALSE + +/// Minutes before allowing respawn, if user cryo'd. +/datum/config_entry/number/respawn_delay_cryo + config_entry_value = 5.0 + integer = FALSE + +/// Allows respawning as non-assistant. Overrides all others of this type. +/datum/config_entry/flag/allow_non_assistant_respawn + config_entry_value = FALSE + +/// Allows respawning as a combat role, defined as security/head. +/datum/config_entry/flag/allow_combat_role_respawn + config_entry_value = FALSE + +/// Allows respawning as the same character as a previous life +/datum/config_entry/flag/allow_same_character_respawn + config_entry_value = FALSE + +/// Observing penalizes for respawns, not just joining. +/datum/config_entry/flag/respawn_penalty_includes_observe + config_entry_value = FALSE + +/// Minutes from roundstart before someone can respawn +/datum/config_entry/number/respawn_minimum_delay_roundstart + config_entry_value = 30.0 + integer = FALSE + +/// Gamemode config tags that are banned from respawning +/datum/config_entry/keyed_list/respawn_chaos_gamemodes + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_FLAG + +/datum/config_entry/keyed_list/respawn_chaos_gamemodes/ValidateListEntry(key_name, key_value) + . = ..() + return . && (key_name in config.modes) + +/datum/config_entry/keyed_list/respawn_chaos_gamemodes/preprocess_key(key) + . = ..() + return lowertext(key) diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 8c4fba367d..28505c70f8 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -93,12 +93,14 @@ SUBSYSTEM_DEF(input) user.full_macro_assert() /datum/controller/subsystem/input/fire() + set waitfor = FALSE var/list/clients = GLOB.clients // Let's sing the list cache song for(var/i in 1 to clients.len) var/client/C = clients[i] C.keyLoop() +#define NONSENSICAL_VERB "NONSENSICAL_VERB_THAT_DOES_NOTHING" /// *sigh /client/verb/NONSENSICAL_VERB_THAT_DOES_NOTHING() - set name = ".NONSENSICAL_VERB_THAT_DOES_NOTHING" + set name = "NONSENSICAL_VERB_THAT_DOES_NOTHING" set hidden = TRUE diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 0f936bdeff..4963e33cc3 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -670,11 +670,12 @@ SUBSYSTEM_DEF(job) var/mob/the_mob = N if(!the_mob) the_mob = M // cause this doesn't get assigned if player is a latejoiner - if(the_mob.client && the_mob.client.prefs && (the_mob.client.prefs.chosen_gear && the_mob.client.prefs.chosen_gear.len)) + var/list/chosen_gear = the_mob.client.prefs.loadout_data["SAVE_[the_mob.client.prefs.loadout_slot]"] + if(the_mob.client && the_mob.client.prefs && (chosen_gear && chosen_gear.len)) if(!ishuman(M))//no silicons allowed return - for(var/i in the_mob.client.prefs.chosen_gear) - var/datum/gear/G = i + for(var/i in chosen_gear) + var/datum/gear/G = istext(i[LOADOUT_ITEM]) ? text2path(i[LOADOUT_ITEM]) : i[LOADOUT_ITEM] G = GLOB.loadout_items[initial(G.category)][initial(G.subcategory)][initial(G.name)] if(!G) continue @@ -690,6 +691,19 @@ SUBSYSTEM_DEF(job) if(!permitted) continue var/obj/item/I = new G.path + if(I && length(i[LOADOUT_COLOR])) //handle loadout colors + //handle polychromic items + if((G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) && length(G.loadout_initial_colors)) + var/datum/element/polychromic/polychromic = I.comp_lookup["item_worn_overlays"] //stupid way to do it but GetElement does not work for this + if(polychromic && istype(polychromic)) + var/list/polychromic_entry = polychromic.colors_by_atom[I] + if(polychromic_entry) + polychromic.colors_by_atom[I] = i[LOADOUT_COLOR] + I.update_icon() + else + //handle non-polychromic items (they only have one color) + I.add_atom_colour(i[LOADOUT_COLOR][1], FIXED_COLOUR_PRIORITY) + I.update_icon() if(!M.equip_to_slot_if_possible(I, G.slot, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first if(iscarbon(M)) var/mob/living/carbon/C = M diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index e1b6e6f6e2..e39242aac3 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -422,7 +422,7 @@ SUBSYSTEM_DEF(persistence) saved_storytellers[3] = saved_storytellers[2] saved_storytellers[2] = saved_storytellers[1] saved_storytellers[1] = mode.storyteller.name - average_dynamic_threat = (mode.threat_average + average_dynamic_threat) / 2 + average_dynamic_threat = (mode.max_threat + average_dynamic_threat) / 2 var/json_file = file("data/RecentStorytellers.json") var/list/file_data = list() file_data["data"] = saved_storytellers + average_dynamic_threat diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 95d8928368..198c380f41 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -371,6 +371,11 @@ SUBSYSTEM_DEF(ticker) if(player.ready == PLAYER_READY_TO_PLAY && player.mind) GLOB.joined_player_list += player.ckey player.create_character(FALSE) + if(player.new_character && player.client && player.client.prefs) // we cannot afford a runtime, ever + LAZYOR(player.client.prefs.slots_joined_as, player.client.prefs.default_slot) + LAZYOR(player.client.prefs.characters_joined_as, player.new_character.real_name) + else + stack_trace("WARNING: Either a player did not have a new_character, did not have a client, or did not have preferences. This is VERY bad.") else player.new_player_panel() CHECK_TICK diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 06b76718c1..880802fd5c 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -492,7 +492,7 @@ SUBSYSTEM_DEF(vote) if("dynamic") GLOB.master_mode = "dynamic" var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight) - for(var/T in config.storyteller_cache) + for(var/T in config.get_runnable_storytellers()) var/datum/dynamic_storyteller/S = T var/probability = ((initial(S.config_tag) in probabilities) ? probabilities[initial(S.config_tag)] : initial(S.weight)) if(probability > 0) diff --git a/code/datums/components/README.md b/code/datums/components/README.md index 509630bb0a..dd27c05469 100644 --- a/code/datums/components/README.md +++ b/code/datums/components/README.md @@ -1,9 +1,9 @@ -# Datum Component System (DCS) - -## Concept - -Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening. - -See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole. - -### See/Define signals and their arguments in [__DEFINES\components.dm](..\..\__DEFINES\components.dm) +# Datum Component System (DCS) + +## Concept + +Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening. + +See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole. + +### See/Define signals and their arguments in [__DEFINES\components.dm](..\..\__DEFINES\components.dm) diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 29add286be..4e0ce3fc16 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -17,6 +17,44 @@ var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners + /// Delete ourselves when we're depleted. + var/qdel_self_on_depletion = TRUE + /// Allow deletion + var/can_be_deleted = TRUE + /// Whether or not we can survive no cloud syncing without errors + var/requires_cloud_sync = TRUE + /// Permanent programs - can never be deleted. does not count towards max_programs. + var/list/datum/nanite_program/permanent_programs = list() + + // Vulnerabilities + /// EMP flat deletion upper + var/emp_flat_deletion_upper = 35 + /// EMP flat deletion lower + var/emp_flat_deletion_lower = 20 + /// EMP percent deletion upper + var/emp_percent_deletion_upper = 0.35 + /// EMP percent deletion lower + var/emp_percent_deletion_lower = 0.30 + /// EMP severity multiplier, capping to 0 to 100 + var/emp_severity_mod = 1 + /// EMP severity div for cloudsync reset chance + var/emp_desync_mod = 0.25 + + /// Shock flat deletion upper + var/shock_flat_deletion_upper = 45 + /// Shock flat deletion lower + var/shock_flat_deletion_lower = 25 + /// Shock percent deletion upper + var/shock_percent_deletion_upper = 0.25 + /// Shock percent deletion lower + var/shock_percent_deletion_lower = 0.20 + + + /// minor shock deletion lower + var/minor_shock_deletion_lower = 5 + /// minor shock deletion upper + var/minor_shock_deletion_upper = 15 + /datum/component/nanites/Initialize(amount = 100, cloud = 0) if(!isliving(parent) && !istype(parent, /datum/nanite_cloud_backup)) return COMPONENT_INCOMPATIBLE @@ -55,6 +93,9 @@ RegisterSignal(parent, COMSIG_NANITE_ADD_PROGRAM, .proc/add_program) RegisterSignal(parent, COMSIG_NANITE_SCAN, .proc/nanite_scan) RegisterSignal(parent, COMSIG_NANITE_SYNC, .proc/sync) + RegisterSignal(parent, COMSIG_NANITE_CHECK_CONSOLE_LOCK, .proc/check_console_locking) + RegisterSignal(parent, COMSIG_NANITE_CHECK_HOST_LOCK, .proc/check_host_lockout) + RegisterSignal(parent, COMSIG_NANITE_CHECK_VIRAL_PREVENTION, .proc/check_viral_prevention) if(isliving(parent)) RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, .proc/on_emp) @@ -118,13 +159,63 @@ next_sync = world.time + NANITE_SYNC_DELAY set_nanite_bar() +/** + * Called when nanites are depleted. + * Deletes ourselves by default. + */ +/datum/component/nanites/proc/nanites_depleted() + if(qdel_self_on_depletion) + delete_nanites() +/** + * Used to rid ourselves + */ /datum/component/nanites/proc/delete_nanites() - qdel(src) + if(can_be_deleted) + qdel(src) + +/** + * Adds permanent programs + * + * WARNING: Has no sanity checks. Make sure you know what you are doing! (make sure programs do not conflict) + */ +/datum/component/nanites/proc/add_permanent_program(list/program, immutable = FALSE) + if(!islist(program)) + program = list(program) + for(var/i in program) + if(i in permanent_programs) + continue + var/datum/nanite_program/P = i + permanent_programs += P + if(immutable) + P.immutable = TRUE + for(var/e in programs) + var/datum/nanite_program/E = e + if(E.unique && (E.type == P.type)) + qdel(e) + programs += P + +/** + * Checks if we can block out console modification + */ +/datum/component/nanites/proc/check_console_locking() + return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK) + +/** + * Checks if we can lock out host internal conscious modification + */ +/datum/component/nanites/proc/check_host_lockout() + return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK) + +/** + * Checks if we can block out viral replica + */ +/datum/component/nanites/proc/check_viral_prevention() + return SEND_SIGNAL(src, COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK) //Syncs the nanite component to another, making it so programs are the same with the same programming (except activation status) /datum/component/nanites/proc/sync(datum/signal_source, datum/component/nanites/source, full_overwrite = TRUE, copy_activation = FALSE) - var/list/programs_to_remove = programs.Copy() + var/list/programs_to_remove = programs.Copy() - permanent_programs var/list/programs_to_add = source.programs.Copy() for(var/X in programs) var/datum/nanite_program/NP = X @@ -151,7 +242,7 @@ sync(null, cloud_copy) return //Without cloud syncing nanites can accumulate errors and/or defects - if(prob(8) && programs.len) + if(prob(8) && programs.len && requires_cloud_sync) var/datum/nanite_program/NP = pick(programs) NP.software_error() @@ -159,8 +250,11 @@ for(var/X in programs) var/datum/nanite_program/NP = X if(NP.unique && NP.type == new_program.type) - qdel(NP) - if(programs.len >= max_programs) + if(NP in permanent_programs) + return COMPONENT_PROGRAM_NOT_INSTALLED + else + qdel(NP) + if((programs.len - length(permanent_programs)) >= max_programs) return COMPONENT_PROGRAM_NOT_INSTALLED if(source_program) source_program.copy_programming(new_program) @@ -177,7 +271,7 @@ /datum/component/nanites/proc/adjust_nanites(datum/source, amount) nanite_volume = clamp(nanite_volume + amount, 0, max_nanites) if(nanite_volume <= 0) //oops we ran out - qdel(src) + nanites_depleted() /datum/component/nanites/proc/set_nanite_bar(remove = FALSE) var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD] @@ -191,28 +285,28 @@ holder.icon_state = "nanites[nanite_percent]" /datum/component/nanites/proc/on_emp(datum/source, severity) - nanite_volume *= (rand(60, 90) * 0.01) //Lose 10-40% of nanites - adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume - if(prob(40/severity)) + severity *= emp_severity_mod + var/loss = (severity / 100) * (rand(emp_percent_deletion_lower, emp_percent_deletion_upper) * nanite_volume) + rand(emp_flat_deletion_lower, emp_flat_deletion_upper) + adjust_nanites(null, -loss) + if(prob(severity * emp_desync_mod)) cloud_id = 0 for(var/X in programs) var/datum/nanite_program/NP = X NP.on_emp(severity) - /datum/component/nanites/proc/on_shock(datum/source, shock_damage, siemens_coeff = 1, flags = NONE) if(shock_damage < 1) return if(!HAS_TRAIT_NOT_FROM(host_mob, TRAIT_SHOCKIMMUNE, "nanites"))//Another shock protection must protect nanites too, but nanites protect only host - nanite_volume *= (rand(45, 80) * 0.01) //Lose 20-55% of nanites - adjust_nanites(null, -(rand(5, 50))) //Lose 5-50 flat nanite volume + var/loss = (rand(shock_percent_deletion_lower, shock_percent_deletion_upper) * nanite_volume) + rand(shock_flat_deletion_lower, shock_flat_deletion_upper) + adjust_nanites(null, -loss) for(var/X in programs) var/datum/nanite_program/NP = X NP.on_shock(shock_damage) /datum/component/nanites/proc/on_minor_shock(datum/source) - adjust_nanites(null, -(rand(5, 15))) //Lose 5-15 flat nanite volume + adjust_nanites(null, -(rand(minor_shock_deletion_lower, minor_shock_deletion_upper))) //Lose 5-15 flat nanite volume for(var/X in programs) var/datum/nanite_program/NP = X NP.on_minor_shock() @@ -237,7 +331,7 @@ NP.receive_comm_signal(comm_code, comm_message, comm_source) /datum/component/nanites/proc/check_viable_biotype() - if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) + if(!(host_mob.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD|MOB_NANITES))) qdel(src) //bodytype no longer sustains nanites /datum/component/nanites/proc/check_access(datum/source, obj/O) @@ -378,3 +472,10 @@ id++ mob_programs += list(mob_program) data["mob_programs"] = mob_programs + +/** + * Subtype that doesn't erase itself from running out + */ +/datum/component/nanites/permanent + qdel_self_on_depletion = FALSE + can_be_deleted = FALSE diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm index d919828e8e..8014cf17c2 100644 --- a/code/datums/components/storage/concrete/rped.dm +++ b/code/datums/components/storage/concrete/rped.dm @@ -16,6 +16,32 @@ to_chat(M, "[parent] only accepts machine parts!") return FALSE +/datum/component/storage/concrete/rped/quick_empty(mob/M) + var/atom/A = parent + if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated()) + return + if(check_locked(null, M, TRUE)) + return FALSE + A.add_fingerprint(M) + var/list/things = contents() + var/lowest_rating = INFINITY + for(var/obj/item/B in things) + if(B.get_part_rating() < lowest_rating) + lowest_rating = B.get_part_rating() + for(var/obj/item/B in things) + if(B.get_part_rating() > lowest_rating) + things.Remove(B) + if(lowest_rating == INFINITY) + to_chat(M, "There's no parts to dump out from [parent].") + return + to_chat(M, "You start dumping out tier/cell rating [lowest_rating] parts from [parent].") + var/turf/T = get_turf(A) + var/datum/progressbar/progress = new(M, length(things), T) + while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress))) + stoplag(1) + qdel(progress) + A.do_squish(0.8, 1.2) + /datum/component/storage/concrete/bluespace/rped collection_mode = COLLECT_EVERYTHING allow_quick_gather = TRUE @@ -33,5 +59,29 @@ to_chat(M, "[parent] only accepts machine parts!") return FALSE -/datum/component/storage/concrete/cyborg/rped - max_items = 150 + +/datum/component/storage/concrete/bluespace/rped/quick_empty(mob/M) + var/atom/A = parent + if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated()) + return + if(check_locked(null, M, TRUE)) + return FALSE + A.add_fingerprint(M) + var/list/things = contents() + var/lowest_rating = INFINITY + for(var/obj/item/B in things) + if(B.get_part_rating() < lowest_rating) + lowest_rating = B.get_part_rating() + for(var/obj/item/B in things) + if(B.get_part_rating() > lowest_rating) + things.Remove(B) + if(lowest_rating == INFINITY) + to_chat(M, "There's no parts to dump out from [parent].") + return + to_chat(M, "You start dumping out tier/cell rating [lowest_rating] parts from [parent].") + var/turf/T = get_turf(A) + var/datum/progressbar/progress = new(M, length(things), T) + while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, .proc/mass_remove_from_storage, T, things, progress))) + stoplag(1) + qdel(progress) + A.do_squish(0.8, 1.2) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index fe041c41ff..b6b93bdddc 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -660,27 +660,34 @@ return if(dna.stability > 0) return - var/instability = -dna.stability + var/instability = - dna.stability dna.remove_all_mutations() dna.stability = 100 - if(prob(max(70-instability,0))) + if(prob(max(70 - instability,0))) switch(rand(0,3)) //not complete and utter death if(0) monkeyize() if(1) gain_trauma(/datum/brain_trauma/severe/paralysis) if(2) + unequip_everything() + drop_all_held_items() corgize() if(3) to_chat(src, "Oh, we actually feel quite alright!") else switch(rand(0,3)) if(0) + unequip_everything() + drop_all_held_items() gib() if(1) + unequip_everything() + drop_all_held_items() dust() - if(2) + unequip_everything() + drop_all_held_items() death() petrify(INFINITY) if(3) @@ -689,6 +696,8 @@ if(BP) BP.dismember() else + unequip_everything() + drop_all_held_items() gib() else set_species(/datum/species/dullahan) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 7ae0d04b05..600bf9250e 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -170,7 +170,7 @@ if(istype(source,/obj/item/clothing/suit/hooded)) //so how come it be like this, where toggleable headslots are named separately (helmet/hood) anyways? var/obj/item/clothing/suit/hooded/sourcesuit = source H = sourcesuit.hood - else if(istype(source,/obj/item/clothing/suit/space/hardsuit)) + else if(istype(source,/obj/item/clothing/suit/space/hardsuit)) var/obj/item/clothing/suit/space/hardsuit/sourcesuit = source H = sourcesuit.helmet else diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 14f3eae689..5683367c55 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -55,7 +55,7 @@ return user.log_message(msg, LOG_EMOTE) - msg = "[user] " + msg + msg = "[user] [msg]" for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) @@ -144,7 +144,7 @@ var/sound //Sound to play when emote is called var/vary = FALSE //used for the honk borg emote var/volume = 50 - mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon) + mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/camera/aiEye) /datum/emote/sound/run_emote(mob/user, params) . = ..() diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 81b7ea0628..8af80dc6b8 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -134,6 +134,28 @@ return BULLET_ACT_FORCE_PIERCE return BULLET_ACT_HIT +/datum/block_parry_data/sleeping_carp + parry_time_windup = 0 + parry_time_active = 25 + parry_time_spindown = 0 + // we want to signal to players the most dangerous phase, the time when automatic counterattack is a thing. + parry_time_windup_visual_override = 1 + parry_time_active_visual_override = 3 + parry_time_spindown_visual_override = 12 + parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK //can attack while + parry_time_perfect = 2.5 // first ds isn't perfect + parry_time_perfect_leeway = 1.5 + parry_imperfect_falloff_percent = 5 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 65 // VERY generous + parry_efficiency_perfect = 100 + parry_failed_stagger_duration = 4 SECONDS + parry_cooldown = 0.5 SECONDS + +/mob/living/carbon/human/UseStaminaBuffer(amount, warn = FALSE, considered_action = TRUE) + amount *= physiology? physiology.stamina_buffer_mod : 1 + return ..() + /datum/martial_art/the_sleeping_carp/teach(mob/living/carbon/human/H, make_temporary = FALSE) . = ..() if(!.) @@ -144,12 +166,12 @@ ADD_TRAIT(H, TRAIT_TASED_RESISTANCE, SLEEPING_CARP_TRAIT) H.physiology.brute_mod *= 0.4 //brute is really not gonna cut it H.physiology.burn_mod *= 0.7 //burn is distinctly more useful against them than brute but they're still resistant - H.physiology.stamina_mod *= 0.5 //You take less stamina damage overall, but you do not reduce the damage from stun batons + H.physiology.stamina_mod *= 0.4 //You take less stamina damage overall, but you do not reduce the damage from stun batons as much H.physiology.stun_mod *= 0.3 //for those rare stuns H.physiology.pressure_mod *= 0.3 //go hang out with carp H.physiology.cold_mod *= 0.3 //cold mods are different to burn mods, they do stack however H.physiology.heat_mod *= 2 //this is mostly so sleeping carp has a viable weakness. Cooking them alive. Setting them on fire and heating them will be their biggest weakness. The reason for this is....filet jokes. - + H.physiology.stamina_buffer_mod *= 0.75 //to help with some stamina H.faction |= "carp" //:D /datum/martial_art/the_sleeping_carp/on_remove(mob/living/carbon/human/H) @@ -165,7 +187,7 @@ H.physiology.pressure_mod = initial(H.physiology.pressure_mod) //no more carpies H.physiology.cold_mod = initial(H.physiology.cold_mod) H.physiology.heat_mod = initial(H.physiology.heat_mod) - + H.physiology.stamina_buffer_mod = initial(H.physiology.stamina_buffer_mod) H.faction -= "carp" //:( /mob/living/carbon/human/proc/sleeping_carp_help() diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 1abe077980..90982a00ec 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -163,7 +163,7 @@ timeout = 3 MINUTES /datum/mood_event/gates_of_mansus - description = "LIVING IN A PERFORMANCE IS WORSE THAN DEATH\n" + description = "I HAD A GLIMPSE OF THE HORROR BEYOND THIS WORLD. REALITY UNCOILED BEFORE MY EYES!\n" mood_change = -25 timeout = 4 MINUTES diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index cabdd7cfb8..19b12410bc 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -586,7 +586,7 @@ var/list/mob/living/targets = list() for(var/mob/living/potential_target in oview(owner, 1)) - if(IS_HERETIC(potential_target) || potential_target.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) + if(IS_HERETIC(potential_target) || IS_HERETIC_MONSTER(potential_target)) continue targets += potential_target if(LAZYLEN(targets)) diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 261e423640..7a1f0f6980 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -164,7 +164,7 @@ . = list() .["version"] = GLOB.game_version .["mode"] = "hidden" //CIT CHANGE - hides the gamemode in topic() calls to prevent meta'ing the gamemode - .["respawn"] = config ? !CONFIG_GET(flag/norespawn) : FALSE + .["respawn"] = config ? CONFIG_GET(flag/respawns_enabled) : FALSE .["enter"] = GLOB.enter_allowed .["vote"] = CONFIG_GET(flag/allow_vote_mode) .["ai"] = CONFIG_GET(flag/allow_ai) diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 43ea487894..e7f8c63d4a 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -150,7 +150,6 @@ /area/shuttle/escape/luxury name = "Luxurious Emergency Shuttle" - noteleport = TRUE /area/shuttle/escape/arena name = "The Arena" diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index be8dee5bf8..29455afe56 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -150,14 +150,14 @@ Credit where due: var/datum/team/clockcult/main_clockcult /datum/game_mode/clockwork_cult/pre_setup() //Gamemode and job code is pain. Have fun codediving all of that stuff, whoever works on this next - Delta - var/list/errorList = list() + /*var/list/errorList = list() var/list/reebes = SSmapping.LoadGroup(errorList, "Reebe", "map_files/generic", "City_of_Cogs.dmm", default_traits = ZTRAITS_REEBE, silent = TRUE) if(errorList.len) // reebe failed to load message_admins("Reebe failed to load!") log_game("Reebe failed to load!") return FALSE - for(var/datum/parsed_map/PM in reebes) - PM.initTemplateBounds() + for(var/datum/parsed_map/PM in reebes) //Temporarily commented because of z-level loading reliably segfaulting the server. + PM.initTemplateBounds()*/ if(CONFIG_GET(flag/protect_roles_from_antagonist)) restricted_jobs += protected_jobs if(CONFIG_GET(flag/protect_assistant_from_antagonist)) diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 836b00250f..6a16b62643 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -64,6 +64,8 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) var/threat_average_weight = 0 /// Last time a threat average sample was taken. Used for weighting the rolling average. var/last_threat_sample_time = 0 + /// Maximum threat recorded so far, for cross-round chaos adjustment. + var/max_threat = 0 /// Things that cause a rolling threat adjustment to be displayed at roundend. var/list/threat_tallies = list() /// Running information about the threat. Can store text or datum entries. @@ -145,6 +147,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) third_rule_req = list(101, 101, 101, 101, 101, 100, 90, 80, 70, 60) high_pop_second_rule_req = CONFIG_GET(number/dynamic_second_rule_high_pop_requirement) high_pop_third_rule_req = CONFIG_GET(number/dynamic_third_rule_high_pop_requirement) + added_threat = CONFIG_GET(number/dynamic_threat_baseline) GLOB.dynamic_high_pop_limit = CONFIG_GET(number/dynamic_high_pop_limit) GLOB.dynamic_latejoin_delay_min = CONFIG_GET(number/dynamic_latejoin_delay_min)*600 GLOB.dynamic_latejoin_delay_max = CONFIG_GET(number/dynamic_latejoin_delay_max)*600 @@ -415,7 +418,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) /datum/game_mode/dynamic/post_setup(report) update_playercounts() if(minor_ruleset_start) - addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/minor_roundstart),rand(1 MINUTES,5 MINUTES)) + addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/minor_roundstart),rand(1 MINUTES,3 MINUTES)) else for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules) addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_roundstart_rule, rule), rule.delay) @@ -439,7 +442,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) potential_minor_rulesets -= rule update_playercounts() iterations++ - message_admins("Minor antag roundstart rolls completed, with [num_rulesets_executed] antags or antag teams made.") + message_admins("Minor antag roundstart rolls completed, with [iterations] rolls done and [num_rulesets_executed] antags or antag teams made.") log_game("DYNAMIC: Minor antag roundstart made [num_rulesets_executed] antags or antag teams.") @@ -612,6 +615,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) latejoin_rules = remove_from_list(latejoin_rules, rule.type) else if(rule.ruletype == "Midround") midround_rules = remove_from_list(midround_rules, rule.type) + message_admins("DYNAMIC: Picked [rule]; executing soon...") addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_midround_latejoin_rule, rule), rule.delay) return TRUE @@ -663,6 +667,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) /datum/game_mode/dynamic/proc/execute_midround_latejoin_rule(sent_rule) var/datum/dynamic_ruleset/rule = sent_rule if (rule.execute()) + message_admins("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].") log_game("DYNAMIC: Injected a [rule.ruletype == "latejoin" ? "latejoin" : "midround"] ruleset [rule.name].") log_threat("[rule.ruletype] [rule.name] added [rule.cost]", verbose = TRUE) if(rule.flags & HIGHLANDER_RULESET) @@ -741,6 +746,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) if(!M.voluntary_ghosted) current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow) threat = storyteller.calculate_threat() + added_threat + max_threat = max(max_threat,threat) if(threat_average_weight) var/cur_sample_weight = world.time - last_threat_sample_time threat_average = ((threat_average * threat_average_weight) + (threat * cur_sample_weight)) / (threat_average_weight + cur_sample_weight) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 416721702b..7ce6e74cc1 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -48,6 +48,9 @@ if (!M.client) // Are they connected? trimmed_list.Remove(M) continue + if(M.client.prefs && M.client.prefs.toggles & MIDROUND_ANTAG) + trimmed_list.Remove(M) + continue if(!mode.check_age(M.client, minimum_required_age)) trimmed_list.Remove(M) continue diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm index 618befbaa7..74a61bd3ff 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_minor.dm @@ -1,3 +1,46 @@ +/datum/dynamic_ruleset/minor/proc/trim_list(list/L = list()) + var/list/trimmed_list = L.Copy() + for(var/mob/M in trimmed_list) + if (!ishuman(M)) + trimmed_list.Remove(M) + continue + if (HAS_TRAIT(M, TRAIT_NO_MIDROUND_ANTAG)) + trimmed_list.Remove(M) + continue + if (!M.client) // Are they connected? + trimmed_list.Remove(M) + continue + if(!mode.check_age(M.client, minimum_required_age)) + trimmed_list.Remove(M) + continue + if(antag_flag_override) + if(!(antag_flag_override in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag_override)) + trimmed_list.Remove(M) + continue + else + if(!(antag_flag in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag)) + trimmed_list.Remove(M) + continue + if (M.mind) + if ((M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role? + trimmed_list.Remove(M) + continue + if (M.mind.assigned_role in restricted_roles) // Does their job allow it? + trimmed_list.Remove(M) + continue + if ((exclusive_roles.len > 0) && !(M.mind.assigned_role in exclusive_roles)) // Is the rule exclusive to their job? + trimmed_list.Remove(M) + continue + return trimmed_list + +/datum/dynamic_ruleset/minor/trim_candidates() + // + // All you need to know is that here, the candidates list contains 4 lists itself, indexed with the following defines: + // Candidates = list(CURRENT_LIVING_PLAYERS, CURRENT_LIVING_ANTAGS, CURRENT_DEAD_PLAYERS, CURRENT_OBSERVERS) + // So for example you can get the list of all current dead players with var/list/dead_players = candidates[CURRENT_DEAD_PLAYERS] + // Make sure to properly typecheck the mobs in those lists, as the dead_players list could contain ghosts, or dead players still in their bodies. + // We're still gonna trim the obvious (mobs without clients, jobbanned players, etc) + candidates = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS]) ////////////////////////////////////////////// // // diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index c5e0857461..1be5cb3c57 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -8,7 +8,6 @@ /datum/dynamic_ruleset/roundstart/traitor name = "Traitors" config_tag = "traitor" - persistent = TRUE antag_flag = ROLE_TRAITOR antag_datum = /datum/antagonist/traitor/ minimum_required_age = 0 @@ -34,15 +33,6 @@ M.mind.restricted_roles = restricted_roles return TRUE -/datum/dynamic_ruleset/roundstart/traitor/rule_process() - if (autotraitor_cooldown > 0) - autotraitor_cooldown-- - else - autotraitor_cooldown = 450 // 15 minutes - message_admins("Checking if we can turn someone into a traitor.") - log_game("DYNAMIC: Checking if we can turn someone into a traitor.") - mode.picking_specific_rule(/datum/dynamic_ruleset/midround/autotraitor) - ////////////////////////////////////////// // // // BLOOD BROTHERS // diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm index d5766b287e..03aa9d174a 100644 --- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -15,10 +15,13 @@ */ var/flags = 0 var/dead_player_weight = 1 // How much dead players matter for threat calculation - var/weight = 3 // Weights for randomly picking storyteller. Multiplied by score after voting. + var/weight = 0 // Weights for randomly picking storyteller. Multiplied by score after voting. + var/min_chaos = -1000 // Won't show up if recent rounds have been below this chaotic on average + var/max_chaos = 1000 // Won't show up if recent rounds have been above this chaotic on average var/event_frequency_lower = 6 MINUTES // How rare events will be, at least. var/event_frequency_upper = 20 MINUTES // How rare events will be, at most. var/min_players = -1 // How many players are required for this one to start. + var/soft_antag_ratio_cap = 4 // how many players-per-antag there should be var/datum/game_mode/dynamic/mode = null // Cached as soon as it's made, by dynamic. /** @@ -101,8 +104,10 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/proc/should_inject_antag(dry_run = FALSE) if(mode.forced_injection) - mode.forced_injection = !dry_run + mode.forced_injection = dry_run return TRUE + if(mode.current_players[CURRENT_LIVING_PLAYERS].len < (mode.current_players[CURRENT_LIVING_ANTAGS].len * soft_antag_ratio_cap)) + return FALSE return mode.threat < mode.threat_level /datum/dynamic_storyteller/proc/roundstart_draft() @@ -126,11 +131,10 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/proc/minor_rule_draft() var/list/drafted_rules = list() - for (var/datum/dynamic_ruleset/minor/rule in mode.minor_rules) + for (var/datum/dynamic_ruleset/rule in mode.minor_rules) if (rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level)) - rule.candidates = mode.candidates.Copy() rule.trim_candidates() - if (rule.ready() && rule.candidates.len > 0) + if (rule.ready()) var/property_weight = 0 for(var/property in property_weights) if(property in rule.property_weights) // just treat it as 0 if it's not in there @@ -213,6 +217,8 @@ Property weights are added to the config weight of the ruleset. They are: weight = 1 event_frequency_lower = 2 MINUTES event_frequency_upper = 10 MINUTES + max_chaos = 50 + soft_antag_ratio_cap = 1 flags = WAROPS_ALWAYS_ALLOWED | FORCE_IF_WON min_players = 30 var/refund_cooldown = 0 @@ -235,12 +241,13 @@ Property weights are added to the config weight of the ruleset. They are: desc = "Modes where the crew must band together. Nukies, xenos, blob. Only one antag threat at once." curve_centre = 2 curve_width = 1.5 - weight = 2 + weight = 4 + max_chaos = 75 min_players = 20 flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS property_weights = list("valid" = 3, "trust" = 5) -/datum/dynamic_storyteller/chaotic/minor_start_chance() +/datum/dynamic_storyteller/team/minor_start_chance() return 0 /datum/dynamic_storyteller/team/should_inject_antag(dry_run = FALSE) @@ -256,13 +263,15 @@ Property weights are added to the config weight of the ruleset. They are: flags = WAROPS_ALWAYS_ALLOWED property_weights = list("valid" = 1, "conversion" = 20) -/datum/dynamic_storyteller/chaotic/minor_start_chance() +/datum/dynamic_storyteller/conversion/minor_start_chance() return 0 /datum/dynamic_storyteller/random name = "Random" config_tag = "random" weight = 1 + max_chaos = 60 + soft_antag_ratio_cap = 1 desc = "No weighting at all; every ruleset has the same chance of happening. Cooldowns vary wildly. As random as it gets." /datum/dynamic_storyteller/random/on_start() @@ -275,7 +284,7 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/random/should_inject_antag() return prob(50) -/datum/dynamic_storyteller/chaotic/minor_start_chance() +/datum/dynamic_storyteller/random/minor_start_chance() return 20 /datum/dynamic_storyteller/random/roundstart_draft() @@ -331,7 +340,7 @@ Property weights are added to the config weight of the ruleset. They are: name = "Story" config_tag = "story" desc = "Antags with options for loadouts and gimmicks. Traitor, wizard, nukies." - weight = 2 + weight = 4 curve_width = 2 flags = USE_PREV_ROUND_WEIGHTS property_weights = list("story_potential" = 2) @@ -339,6 +348,7 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/classic name = "Classic" config_tag = "classic" + weight = 8 desc = "No special antagonist weights. Good variety, but not like random. Uses your chaos preference to weight." flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS @@ -346,7 +356,7 @@ Property weights are added to the config weight of the ruleset. They are: name = "Intrigue" config_tag = "intrigue" desc = "Antags that instill distrust in the crew. Traitors, bloodsuckers." - weight = 2 + weight = 4 curve_width = 2 dead_player_weight = 2 flags = USE_PREV_ROUND_WEIGHTS @@ -358,8 +368,8 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/grabbag name = "Grab Bag" config_tag = "grabbag" - desc = "Crew antags (e.g. traitor, changeling, bloodsucker, heretic) only, all mixed together." - weight = 2 + desc = "Crew antags (e.g. traitor, changeling, bloodsucker, heretic) only at round start, all mixed together." + weight = 4 flags = USE_PREF_WEIGHTS | USE_PREV_ROUND_WEIGHTS /datum/dynamic_storyteller/grabbag/minor_start_chance() @@ -372,12 +382,14 @@ Property weights are added to the config weight of the ruleset. They are: curve_centre = -3 curve_width = 0.5 flags = NO_ASSASSIN - weight = 1 + min_chaos = 30 + weight = 3 dead_player_weight = 5 + soft_antag_ratio_cap = 8 property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "conversion" = -10) /datum/dynamic_storyteller/liteextended/minor_start_chance() - return 100 + return 90 /datum/dynamic_storyteller/no_antag name = "Extended" @@ -385,6 +397,7 @@ Property weights are added to the config weight of the ruleset. They are: desc = "No standard antags." curve_centre = -5 curve_width = 0.5 + min_chaos = 40 flags = NO_ASSASSIN | FORCE_IF_WON weight = 1 property_weights = list("extended" = 2) diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 795508320b..5cfec2376a 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -46,17 +46,17 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event var/startx switch(startSide) if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) + starty = world.maxy-(TRANSITIONEDGE+2) + startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2)) if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) + starty = rand((TRANSITIONEDGE+2),world.maxy-(TRANSITIONEDGE+2)) + startx = world.maxx-(TRANSITIONEDGE+2) if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) + starty = (TRANSITIONEDGE+2) + startx = rand((TRANSITIONEDGE+2), world.maxx-(TRANSITIONEDGE+2)) if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) + starty = rand((TRANSITIONEDGE+2), world.maxy-(TRANSITIONEDGE+2)) + startx = (TRANSITIONEDGE+2) . = locate(startx, starty, Z) /proc/spaceDebrisFinishLoc(startSide, Z) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index d103e2a856..e515f56196 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -75,3 +75,38 @@ if (!area_motion) if(isliving(AM)) newTarget(AM) + +/obj/machinery/camera/motion/thunderdome + name = "entertainment camera" + network = list("thunder") + c_tag = "Arena" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF + +/obj/machinery/camera/motion/thunderdome/Initialize() + . = ..() + proximity_monitor.SetRange(7) + +/obj/machinery/camera/motion/thunderdome/HasProximity(atom/movable/AM as mob|obj) + if (!isliving(AM) || get_area(AM) != get_area(src)) + return + localMotionTargets |= WEAKREF(AM) + if (!detectTime) + for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines) + TV.notify(TRUE) + detectTime = world.time + 30 SECONDS + +/obj/machinery/camera/motion/thunderdome/process() + if (!detectTime) + return + + for (var/datum/weakref/targetref in localMotionTargets) + var/mob/target = targetref.resolve() + if(QDELETED(target) || target.stat == DEAD || get_dist(src, target) > 7 || get_area(src) != get_area(target)) + localMotionTargets -= targetref + + if (localMotionTargets.len) + detectTime = world.time + 30 SECONDS + else if (world.time > detectTime) + detectTime = 0 + for(var/obj/machinery/computer/security/telescreen/entertainment/TV in GLOB.machines) + TV.notify(FALSE) \ No newline at end of file diff --git a/code/game/machinery/colormate.dm b/code/game/machinery/colormate.dm new file mode 100644 index 0000000000..38edcd6d8a --- /dev/null +++ b/code/game/machinery/colormate.dm @@ -0,0 +1,223 @@ +/obj/machinery/gear_painter + name = "\improper Color Mate" + desc = "A machine to give your apparel a fresh new color! Recommended to use with white items for best results." + icon = 'icons/obj/vending.dmi' + icon_state = "colormate" + density = TRUE + anchored = TRUE + circuit = /obj/item/circuitboard/machine/colormate + var/obj/item/inserted + var/activecolor = "#FFFFFF" + var/list/color_matrix_last + var/matrix_mode = FALSE + /// Minimum lightness for normal mode + var/minimum_normal_lightness = 50 + /// Minimum lightness for matrix mode, tested using 4 test colors of full red, green, blue, white. + var/minimum_matrix_lightness = 75 + /// Minimum matrix tests that must pass for something to be considered a valid color (see above) + var/minimum_matrix_tests = 2 + var/list/allowed_types = list( + /obj/item/clothing, + /obj/item/storage/backpack, + /obj/item/storage/belt + ) + +/obj/machinery/gear_painter/Initialize(mapload) + . = ..() + color_matrix_last = list( + 1, 0, 0, + 0, 1, 0, + 0, 0, 1, + 0, 0, 0 + ) + +/obj/machinery/gear_painter/update_icon_state() + if(panel_open) + icon_state = "colormate_open" + else if(!is_operational()) + icon_state = "colormate_off" + else if(inserted) + icon_state = "colormate_active" + else + icon_state = "colormate" + +/obj/machinery/gear_painter/Destroy() + inserted.forceMove(drop_location()) + return ..() + +/obj/machinery/gear_painter/attackby(obj/item/I, mob/living/user) + if(inserted) + to_chat(user, "The machine is already loaded.") + return + if(default_deconstruction_screwdriver(user, "colormate_open", "colormate", I)) + return + if(default_deconstruction_crowbar(I)) + return + if(default_unfasten_wrench(user, I, 40)) + return + if(user.a_intent == INTENT_HARM) + return ..() + + if(is_type_in_list(I, allowed_types) && is_operational()) + if(!user.transferItemToLoc(I, src)) + to_chat(user, "[I] is stuck to your hand!") + return + user.visible_message("[user] inserts [I] into [src]'s receptable.") + + inserted = I + update_icon() + else + return ..() + +/obj/machinery/gear_painter/AllowDrop() + return FALSE + +/obj/machinery/gear_painter/AltClick(mob/user) + . = ..() + if(!user.CanReach(src)) + return + if(!inserted) + return + to_chat(user, "You remove [inserted] from [src]") + inserted.forceMove(drop_location()) + inserted = null + update_icon() + updateUsrDialog() + +/obj/machinery/gear_painter/ui_interact(mob/user) + if(!is_operational()) + return + user.set_machine(src) + var/list/dat = list("Color Mate Control Panel
") + if(!inserted) + dat += "No item inserted." + else + dat += "Item inserted: [inserted]
" + dat += "Matrix mode: [matrix_mode? "On" : "Off"]" + if(!matrix_mode) + dat += "Select new color.
" + dat += "Color: " + dat += "Apply new color.

" + else + // POGGERS +#define MATRIX_FIELD(field, default) " " + dat += "
" + dat += "" + dat += "[cm] is far too dark (min lightness [minimum_normal_lightness]!") + return FALSE + return TRUE + else // matrix + // We test using full red, green, blue, and white + // A predefined number of them must pass to be considered valid + var/passed = 0 +#define COLORTEST(thestring, thematrix) passed += (ReadHSV(RGBtoHSV(RGBMatrixTransform(thestring, thematrix)))[3] >= minimum_matrix_lightness) + COLORTEST("FF0000", cm) + COLORTEST("00FF00", cm) + COLORTEST("0000FF", cm) + COLORTEST("FFFFFF", cm) +#undef COLORTEST + if(passed < minimum_matrix_tests) + to_chat(user, "[english_list(color)] is not allowed (pased [passed] out of 4, minimum [minimum_matrix_tests], minimum lightness [minimum_matrix_lightness]).") + return FALSE + return TRUE diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index d42291cd3c..03a5a17493 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -246,10 +246,12 @@ network = list("thunder") density = FALSE circuit = null - interaction_flags_atom = NONE // interact() is called by BigClick() + //interaction_flags_atom = NONE // interact() is called by BigClick() var/icon_state_off = "entertainment_blank" var/icon_state_on = "entertainment" +/* If someone would like to try to get this long-distance viewing thing working, be my guest. I tried everything I could possibly think of and it just refused to operate correctly. + /obj/machinery/computer/security/telescreen/entertainment/Initialize() . = ..() RegisterSignal(src, COMSIG_CLICK, .proc/BigClick) @@ -258,6 +260,8 @@ /obj/machinery/computer/security/telescreen/entertainment/proc/BigClick() interact(usr) +*/ + /obj/machinery/computer/security/telescreen/entertainment/proc/notify(on) if(on && icon_state == icon_state_off) say(pick( @@ -278,7 +282,7 @@ name = "circuitry telescreen" desc = "Used for watching the other eggheads from the safety of the circuitry lab." network = list("rd") - + /obj/machinery/computer/security/telescreen/ce name = "\improper Chief Engineer's telescreen" desc = "Used for watching the engine, telecommunications and the minisat." diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 5bc0ed20b0..ea41d77e2a 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -22,17 +22,16 @@ //Used for logging people entering cryosleep and important items they are carrying. var/list/frozen_crew = list() - var/list/frozen_items = list() - - // Used for containing rare items traitors need to steal, so it's not - // game-over if they get iced - var/list/objective_items = list() - // A cache of theft datums so you don't have to re-create them for - // each item check - var/list/theft_cache = list() + var/list/obj/stored_packages = list() var/allow_items = TRUE +/obj/machinery/computer/cryopod/deconstruct() + . = ..() + for(var/i in stored_packages) + var/obj/O = i + O.forceMove(drop_location()) + /obj/machinery/computer/cryopod/attack_ai() attack_hand() @@ -67,11 +66,11 @@ if(3) dat += "<< Back

" dat += "

Recently stored objects




" - if(!frozen_items.len) + if(!stored_packages.len) dat += "There has been no storage usage at this terminal.
" else - for(var/obj/item/I in frozen_items) - dat += "[I.name]
" + for(var/obj/O in stored_packages) + dat += "[O.name]
" dat += "
" var/datum/browser/popup = new(user, "cryopod_console", "Cryogenic System Control") @@ -87,25 +86,27 @@ add_fingerprint(user) if(href_list["item"]) - if(!allowed(user)) + if(!allowed(user) && !(obj_flags & EMAGGED)) to_chat(user, "Access Denied.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) updateUsrDialog() return - if(!allow_items) return - if(frozen_items.len == 0) + if(!allow_items) + return + + if(stored_packages.len == 0) to_chat(user, "There is nothing to recover from storage.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) updateUsrDialog() return - var/obj/item/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items + var/obj/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in stored_packages playsound(src, "terminal_type", 25, 0) if(!I) return - if(!(I in frozen_items)) + if(!(I in stored_packages)) to_chat(user, "\The [I] is no longer in storage.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) updateUsrDialog() @@ -117,20 +118,21 @@ I.forceMove(drop_location()) if(user && Adjacent(user) && user.can_hold_items()) user.put_in_hands(I) - frozen_items -= I + stored_packages -= I updateUsrDialog() else if(href_list["allitems"]) playsound(src, "terminal_type", 25, 0) - if(!allowed(user)) + if(!allowed(user) && !(obj_flags & EMAGGED)) to_chat(user, "Access Denied.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) updateUsrDialog() return + if(!allow_items) return - if(frozen_items.len == 0) + if(stored_packages.len == 0) to_chat(user, "There is nothing to recover from storage.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return @@ -138,10 +140,10 @@ visible_message("The console beeps happily as it disgorges the desired objects.") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - for(var/obj/item/I in frozen_items) - I.forceMove(drop_location()) - frozen_items -= I - updateUsrDialog() + for(var/obj/O in stored_packages) + O.forceMove(get_turf(src)) + stored_packages.Cut() + updateUsrDialog() else if (href_list["menu"]) src.menu = text2num(href_list["menu"]) @@ -159,6 +161,13 @@ /obj/machinery/computer/cryopod/contents_explosion() return +/obj/machinery/computer/cryopod/contents_explosion() + return //don't blow everyone's shit up. + +/// The box +/obj/item/storage/box/blue/cryostorage_items + w_class = WEIGHT_CLASS_HUGE + //Cryopods themselves. /obj/machinery/cryopod name = "cryogenic freezer" @@ -177,44 +186,9 @@ var/despawn_world_time = null // Used to keep track of the safe period. var/obj/machinery/computer/cryopod/control_computer + var/item_storage_type = /obj/item/storage/box/blue/cryostorage_items //with how storage components work this can be anything the player can open or anything with a storage component. var/last_no_computer_message = 0 - // These items are preserved when the process() despawn proc occurs. - var/static/list/preserve_items = typecacheof(list( - /obj/item/hand_tele, - /obj/item/card/id/captains_spare, - /obj/item/aicard, - /obj/item/mmi, - /obj/item/paicard, - /obj/item/gun, - /obj/item/pinpointer, - /obj/item/clothing/shoes/magboots, - /obj/item/areaeditor/blueprints, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/suit/space, - /obj/item/clothing/suit/armor, - /obj/item/defibrillator/compact, - /obj/item/reagent_containers/hypospray/CMO, - /obj/item/clothing/accessory/medal/gold/captain, - /obj/item/clothing/gloves/krav_maga, - /obj/item/nullrod, - /obj/item/tank/jetpack, - /obj/item/documents, - /obj/item/nuke_core_container - )) - // These items will NOT be preserved - var/static/list/do_not_preserve_items = typecacheof(list( - /obj/item/mmi/posibrain, - /obj/item/gun/energy/laser/mounted, - /obj/item/gun/energy/e_gun/advtaser/mounted, - /obj/item/gun/ballistic/revolver/grenadelauncher/cyborg, - /obj/item/gun/energy/disabler/cyborg, - /obj/item/gun/energy/e_gun/advtaser/cyborg, - /obj/item/gun/energy/printer, - /obj/item/gun/energy/kinetic_accelerator/cyborg, - /obj/item/gun/energy/laser/cyborg - )) - /obj/machinery/cryopod/Initialize(mapload) . = ..() update_icon() @@ -286,73 +260,89 @@ despawn_occupant() -#define CRYO_DESTROY 0 -#define CRYO_PRESERVE 1 -#define CRYO_OBJECTIVE 2 -#define CRYO_IGNORE 3 -#define CRYO_DESTROY_LATER 4 - -/obj/machinery/cryopod/proc/should_preserve_item(obj/item/I) - for(var/datum/objective_item/steal/T in control_computer.theft_cache) - if(istype(I, T.targetitem) && T.check_special_completion(I)) - return CRYO_OBJECTIVE - if(preserve_items[I] && !do_not_preserve_items[I]) - return CRYO_PRESERVE - return CRYO_DESTROY - // This function can not be undone; do not call this unless you are sure /obj/machinery/cryopod/proc/despawn_occupant() if(!control_computer) find_control_computer() var/mob/living/mob_occupant = occupant - var/list/obj/item/cryo_items = list() + + var/list/obj/item/storing = list() + var/list/obj/item/destroying = list() + var/list/obj/item/destroy_later = list() investigate_log("Despawning [key_name(mob_occupant)].", INVESTIGATE_CRYOGENICS) - //Handle Borg stuff first + var/atom/target_store = (control_computer?.allow_items && control_computer) || src //the double control computer check makes it return the control computer. + var/drop_to_ground = !istype(target_store, /obj/machinery/computer/cryopod) + + var/mind_identity = mob_occupant.mind?.name + var/occupant_identity = mob_occupant.real_name + if(iscyborg(mob_occupant)) var/mob/living/silicon/robot/R = mob_occupant if(R.mmi?.brain) - cryo_items[R.mmi] = CRYO_DESTROY_LATER - cryo_items[R.mmi.brain] = CRYO_DESTROY_LATER - for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc - for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags - cryo_items[O] = should_preserve_item(O) - O.forceMove(src) - R.module.remove_module(I, TRUE) //delete the module itself so it doesn't transfer over. - - //Drop all items into the pod. - for(var/obj/item/I in mob_occupant) - if(cryo_items[I] == CRYO_IGNORE || cryo_items[I] ==CRYO_DESTROY_LATER) - continue - cryo_items[I] = should_preserve_item(I) - mob_occupant.transferItemToLoc(I, src, TRUE) - if(I.contents.len) //Make sure we catch anything not handled by qdel() on the items. - if(cryo_items[I] != CRYO_DESTROY) // Don't remove the contents of things that need preservation + destroy_later += R.mmi + destroy_later += R.mmi.brain + for(var/i in R.module) + if(!isitem(i)) + destroying += i continue - for(var/obj/item/O in I.contents) - cryo_items[O] = should_preserve_item(O) - O.forceMove(src) - - for(var/A in cryo_items) - var/obj/item/I = A - if(QDELETED(I)) //edge cases and DROPDEL. - continue - var/preserve = cryo_items[I] - if(preserve == CRYO_DESTROY_LATER) - continue - if(preserve != CRYO_IGNORE) - if(preserve == CRYO_DESTROY) - qdel(I) - else if(control_computer?.allow_items) - control_computer.frozen_items += I - if(preserve == CRYO_OBJECTIVE) - control_computer.objective_items += I - I.moveToNullspace() + var/obj/item/I = i + // let's be honest we only care about the trash bag don't beat around the bush + if(SEND_SIGNAL(I, COMSIG_CONTAINS_STORAGE)) + storing += I.contents + for(var/atom/movable/AM in I.contents) + AM.forceMove(src) + R.module.remove_module(I, TRUE) + else + var/list/gear = list() + if(iscarbon(mob_occupant)) // sorry simp-le-mobs deserve no mercy + var/mob/living/carbon/C = mob_occupant + gear = C.get_all_gear() + for(var/i in gear) + var/obj/item/I = i + I.forceMove(src) + if(!istype(I)) + destroying += I + continue + if(I.item_flags & (DROPDEL | ABSTRACT)) + destroying += I + continue + if(HAS_TRAIT(I, TRAIT_NODROP)) + destroying += I + continue + // WEE WOO SNOWFLAKE TIME + if(istype(I, /obj/item/pda)) + var/obj/item/pda/P = I + if((P.owner == mind_identity) || (P.owner == occupant_identity)) + destroying += P + else + storing += P + else if(istype(I, /obj/item/card/id)) + var/obj/item/card/id/idcard = I + if((idcard.registered_name == mind_identity) || (idcard.registered_name == occupant_identity)) + destroying += idcard + else + storing += idcard else - I.forceMove(loc) - cryo_items -= I + storing += I + + // get rid of mobs + for(var/mob/living/L in mob_occupant.GetAllContents() - mob_occupant) + L.forceMove(drop_location()) + + if(storing.len) + var/obj/O = new item_storage_type + O.name = "cryogenic retrieval package: [mob_occupant.real_name]" + for(var/i in storing) + var/obj/item/I = i + I.forceMove(O) + O.forceMove(drop_to_ground? target_store.drop_location() : target_store) + if((target_store == control_computer) && !drop_to_ground) + control_computer.stored_packages += O + + QDEL_LIST(destroying) //Update any existing objectives involving this mob. for(var/i in GLOB.objectives) @@ -414,22 +404,13 @@ // Ghost and delete the mob. if(!mob_occupant.get_ghost(1)) - mob_occupant.ghostize(FALSE, penalize = TRUE, voluntary = TRUE) + mob_occupant.ghostize(FALSE, penalize = TRUE, voluntary = TRUE, cryo = TRUE) QDEL_NULL(occupant) - for(var/I in cryo_items) //only "CRYO_DESTROY_LATER" atoms are left) - var/atom/A = I - if(!QDELETED(A)) - qdel(A) + QDEL_LIST(destroy_later) open_machine() name = initial(name) -#undef CRYO_DESTROY -#undef CRYO_PRESERVE -#undef CRYO_OBJECTIVE -#undef CRYO_IGNORE -#undef CRYO_DESTROY_LATER - /obj/machinery/cryopod/MouseDrop_T(mob/living/target, mob/user) if(!istype(target) || user.incapacitated() || !target.Adjacent(user) || !Adjacent(user) || !ismob(target) || (!ishuman(user) && !iscyborg(user)) || !istype(user.loc, /turf) || target.buckled) return diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index bed006d0b5..7847c3757e 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -67,9 +67,9 @@ /obj/machinery/door/window/proc/open_and_close() open() if(src.check_access(null)) - sleep(50) + sleep(60) else //secure doors close faster - sleep(20) + sleep(40) close() /obj/machinery/door/window/Bumped(atom/movable/AM) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index f77cf3adfb..33f949aba4 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -24,19 +24,24 @@ var/selected_category var/screen = 1 var/list/categories = list( - "human", - "lizard", - "fly", - "insect", - "plasmaman", - "mammal", - "xeno", - "other" + "human" = /datum/species/human, + "lizard" = /datum/species/lizard, + "mammal" = /datum/species/mammal, + "insect" = /datum/species/insect, + "fly" = /datum/species/fly, + "plasmaman" = /datum/species/plasmaman, + "xeno" = /datum/species/xeno, + "other" = /datum/species, ) + var/list/stored_species = list() + var/obj/item/disk/data/dna_disk /obj/machinery/limbgrower/Initialize() create_reagents(100, OPENCONTAINER) stored_research = new /datum/techweb/specialized/autounlocking/limbgrower + for(var/i in categories) + var/species = categories[i] + stored_species[i] = new species() . = ..() /obj/machinery/limbgrower/ui_interact(mob/user) @@ -64,8 +69,8 @@ ..() /obj/machinery/limbgrower/attackby(obj/item/O, mob/user, params) - if (busy) - to_chat(user, "The Limb Grower is busy. Please wait for completion of previous operation.") + if(busy) + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return if(default_deconstruction_screwdriver(user, "limbgrower_panelopen", "limbgrower_idleoff", O)) @@ -78,6 +83,16 @@ if(user.a_intent == INTENT_HARM) //so we can hit the machine return ..() + if(istype(O, /obj/item/disk)) + if(dna_disk) + to_chat(user, "\The [src] already has a dna disk, take it out first!") + return + else + O.forceMove(src) + dna_disk = O + to_chat(user, "You insert \the [O] into \the [src].") + return + /obj/machinery/limbgrower/Topic(href, href_list) if(..()) return @@ -110,8 +125,24 @@ icon_state = "limbgrower_idleon" addtimer(CALLBACK(src, .proc/build_item),32*prod_coeff) + if(href_list["dna_disk"]) + var/mob/living/carbon/user = usr + if(istype(user)) + if(!dna_disk) + var/obj/item/disk/diskette = user.get_active_held_item() + if(istype(diskette)) + diskette.forceMove(src) + dna_disk = diskette + to_chat(user, "You insert \the [diskette] into \the [src].") + else + dna_disk.forceMove(src.loc) + user.put_in_active_hand(dna_disk) + to_chat(user, "You remove \the [dna_disk] from \the [src].") + dna_disk = null + else + to_chat(user, "You are unable to grasp \the [dna_disk] disk from \the [src].") else - to_chat(usr, "The limb grower is busy. Please wait for completion of previous operation.") + to_chat(usr, "\The [src] is busy. Please wait for completion of previous operation.") updateUsrDialog() return @@ -120,8 +151,10 @@ if(reagents.has_reagent(/datum/reagent/medicine/synthflesh, being_built.reagents_list[/datum/reagent/medicine/synthflesh]*prod_coeff)) //sanity check, if this happens we are in big trouble reagents.remove_reagent(/datum/reagent/medicine/synthflesh, being_built.reagents_list[/datum/reagent/medicine/synthflesh]*prod_coeff) var/buildpath = being_built.build_path - if(ispath(buildpath, /obj/item/bodypart)) //This feels like spatgheti code, but i need to initilise a limb somehow + if(ispath(buildpath, /obj/item/bodypart)) //This feels like spaghetti code, but i need to initiliaze a limb somehow build_limb(buildpath) + else if(ispath(buildpath, /obj/item/organ/genital)) //genitals are uhh... customizable + build_genital(buildpath) else //Just build whatever it is new buildpath(loc) @@ -135,19 +168,65 @@ /obj/machinery/limbgrower/proc/build_limb(buildpath) //i need to create a body part manually using a set icon (otherwise it doesnt appear) var/obj/item/bodypart/limb + var/datum/species/selected = stored_species[selected_category] limb = new buildpath(loc) - if(selected_category=="human" || selected_category=="lizard") //Species with greyscale parts should be included here - limb.icon = 'icons/mob/human_parts_greyscale.dmi' - limb.base_bp_icon = DEFAULT_BODYPART_ICON_ORGANIC - limb.color_src = MUTCOLORS - else - limb.icon = 'icons/mob/human_parts.dmi' - // Set this limb up using the specias name and body zone - limb.icon_state = "[selected_category]_[limb.body_zone]" - limb.name = "\improper synthetic [selected_category] [parse_zone(limb.body_zone)]" - limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]." - limb.species_id = selected_category + limb.base_bp_icon = selected.icon_limbs || DEFAULT_BODYPART_ICON_ORGANIC + limb.species_id = selected.limbs_id + limb.color_src = (MUTCOLORS in selected.species_traits ? MUTCOLORS : (selected.use_skintones ? SKINTONE : FALSE)) + limb.should_draw_gender = (selected.sexes && (limb.body_zone in list(BODY_ZONE_HEAD, BODY_ZONE_CHEST))) + limb.update_limb(TRUE) limb.update_icon_dropped() + limb.name = "\improper synthetic [lowertext(selected.name)] [limb.name]" + limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]." + for(var/obj/item/bodypart/BP in limb) + BP.base_bp_icon = selected.icon_limbs || DEFAULT_BODYPART_ICON_ORGANIC + BP.species_id = selected.limbs_id + BP.color_src = (MUTCOLORS in selected.species_traits ? MUTCOLORS : (selected.use_skintones ? SKINTONE : FALSE)) + BP.should_draw_gender = (selected.sexes && (limb.body_zone in list(BODY_ZONE_HEAD, BODY_ZONE_CHEST))) + BP.update_limb(TRUE) + BP.update_icon_dropped() + BP.name = "\improper synthetic [lowertext(selected.name)] [limb.name]" + BP.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]." + +/obj/machinery/limbgrower/proc/build_genital(buildpath) + //i needed to create a way to customize gene tools using dna + var/list/features = dna_disk?.fields["features"] + if(length(features)) + switch(buildpath) + if(/obj/item/organ/genital/penis) + var/obj/item/organ/genital/penis/penis = new(loc) + if(features["has_cock"]) + penis.shape = features["cock_shape"] + penis.length = features["cock_shape"] + penis.diameter_ratio = features["cock_diameter_ratio"] + penis.color = sanitize_hexcolor(features["cock_color"], 6) + penis.update_icon() + if(/obj/item/organ/genital/testicles) + var/obj/item/organ/genital/testicles/balls = new(loc) + if(features["has_balls"]) + balls.color = sanitize_hexcolor(features["balls_color"], 6) + balls.shape = features["balls_shape"] + balls.size = features["balls_size"] + balls.fluid_rate = features["balls_cum_rate"] + balls.fluid_mult = features["balls_cum_mult"] + balls.fluid_efficiency = features["balls_efficiency"] + if(/obj/item/organ/genital/vagina) + var/obj/item/organ/genital/vagina/vegana = new(loc) + if(features["has_vagina"]) + vegana.color = sanitize_hexcolor(features["vag_color"], 6) + vegana.shape = features["vag_shape"] + if(/obj/item/organ/genital/breasts) + var/obj/item/organ/genital/breasts/boobs = new(loc) + if(features["has_breasts"]) + boobs.color = sanitize_hexcolor(features["breasts_color"], 6) + boobs.size = features["breasts_size"] + boobs.shape = features["breasts_shape"] + if(!features["breasts_producing"]) + boobs.genital_flags &= ~(GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH) + else + new buildpath(loc) + else + new buildpath(loc) /obj/machinery/limbgrower/RefreshParts() reagents.maximum_volume = 0 @@ -165,7 +244,9 @@ . += "The status display reads: Storing up to [reagents.maximum_volume]u of synthflesh.
Synthflesh consumption at [prod_coeff*100]%." /obj/machinery/limbgrower/proc/main_win(mob/user) - var/dat = "

Limb Grower Menu:


" + var/dat = "

[src] Menu:


" + dat += "[dna_disk ? "Remove" : "Insert"] cloning data disk" + dat += "
" dat += "Chemical Storage" dat += materials_printout() dat += "" @@ -218,7 +299,7 @@ /obj/machinery/limbgrower/proc/get_design_cost(datum/design/D) var/dat - if(D.reagents_list["synthflesh"]) + if(D.reagents_list[/datum/reagent/medicine/synthflesh]) dat += "[D.reagents_list[/datum/reagent/medicine/synthflesh] * prod_coeff] Synthetic flesh " return dat @@ -233,3 +314,47 @@ to_chat(user, "A warning flashes onto the screen, stating that safety overrides have been deactivated!") obj_flags |= EMAGGED return TRUE + +/obj/machinery/limbgrower/AltClick(mob/living/user) + . = ..() + if(istype(user) && user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + if(busy) + to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") + else + if(dna_disk) + dna_disk.forceMove(src.loc) + user.put_in_active_hand(dna_disk) + to_chat(user, "You remove \the [dna_disk] from \the [src].") + dna_disk = null + else + to_chat(user, "\The [src] has doesn't have a disk on it!") + +//Defines some vars that makes limbs appears, TO-DO: define every single species. + +/datum/species/human + limbs_id = SPECIES_HUMAN + icon_limbs = 'icons/mob/human_parts_greyscale.dmi' + +/datum/species/lizard + limbs_id = SPECIES_LIZARD + icon_limbs = 'icons/mob/human_parts_greyscale.dmi' + +/datum/species/mammal + limbs_id = SPECIES_MAMMAL + icon_limbs = 'icons/mob/human_parts_greyscale.dmi' + +/datum/species/insect + limbs_id = SPECIES_INSECT + icon_limbs = 'icons/mob/human_parts_greyscale.dmi' + +/datum/species/fly + limbs_id = SPECIES_FLY + icon_limbs = 'icons/mob/human_parts.dmi' + +/datum/species/plasmaman + limbs_id = SPECIES_PLASMAMAN + icon_limbs = 'icons/mob/human_parts.dmi' + +/datum/species/xeno + limbs_id = SPECIES_XENOHYBRID + icon_limbs = 'icons/mob/human_parts_greyscale.dmi' diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index d5f53b2f1c..b0e801137d 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -16,7 +16,7 @@ return . = ..() - if(AM.movement_type & FLYING) + if(AM.movement_type & FLYING || iseffect(AM)) return triggermine(AM) diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 8e59e91e38..4873962587 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -243,6 +243,12 @@ /obj/item/stack/sheet/glass = 1) def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) +/obj/item/circuitboard/machine/colormate + name = "Colormate (Machine Board)" + build_path = /obj/machinery/gear_painter + req_components = list() + def_components = list() + /obj/item/circuitboard/machine/vendor name = "Custom Vendor (Machine Board)" desc = "You can turn the \"brand selection\" dial using a screwdriver." diff --git a/code/game/objects/items/devices/polycircuit.dm b/code/game/objects/items/devices/polycircuit.dm index 0308f19b5f..17e364c4f3 100644 --- a/code/game/objects/items/devices/polycircuit.dm +++ b/code/game/objects/items/devices/polycircuit.dm @@ -18,8 +18,8 @@ else if(zero_amount()) return - chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) in list("airlock","firelock","fire alarm","air alarm","APC") - if(zero_amount()) + chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) as null|anything in list("airlock","firelock","fire alarm","air alarm","APC") + if(zero_amount() || !chosen_circuit || !in_range(src,user)) return switch(chosen_circuit) if("airlock") diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index f15a4d00e1..7f2fe6a01d 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -175,7 +175,7 @@ /obj/item/kitchen/knife/combat/survival/knuckledagger/Initialize() . = ..() - AddComponent(/datum/component/butchering, 50, 120, 5) // it's good for butchering stuff + AddComponent(/datum/component/butchering, 30, 130, 20) // it's good for butchering stuff /obj/item/kitchen/knife/combat/survival/knuckledagger/ui_action_click(mob/user, actiontype) light_on = !light_on @@ -189,6 +189,11 @@ else set_light(0) +/obj/item/kitchen/knife/combat/survival/knuckledagger/update_overlays() + . = ..() + if(light_on) + . += "[icon_state]_lit" + /obj/item/kitchen/knife/combat/bone name = "bone dagger" item_state = "bone_dagger" diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 648ba27897..d0fd4dc3f6 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -137,8 +137,7 @@ AM.anchored = TRUE flick("laserbox_burn", AM) trigger() - sleep(15) - qdel(AM) + QDEL_IN(src, 15) // snowflake code until undertile elements /obj/item/pressure_plate/hologrid/hide() diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 2a1844d218..abd862736b 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -853,8 +853,8 @@ /obj/item/storage/belt/sabre/twin name = "twin sheath" desc = "Two sheaths. One is capable of holding a katana (or bokken) and the other a wakizashi. You could put two wakizashis in if you really wanted to. Now you can really roleplay as a samurai." - icon_state = "twinsheath" - item_state = "quiver" //this'll do. + icon_state = "2sheath" + item_state = "katana" //this'll do. w_class = WEIGHT_CLASS_BULKY fitting_swords = list(/obj/item/melee/smith/wakizashi, /obj/item/melee/smith/twohand/katana, /obj/item/melee/bokken) starting_sword = null @@ -865,6 +865,42 @@ STR.max_items = 2 STR.max_w_class = WEIGHT_CLASS_BULKY + WEIGHT_CLASS_NORMAL //katana and waki. +/obj/item/melee/smith/twohand/katana/on_exit_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/twin/B = S.parent + if(istype(B)) + playsound(B, 'sound/items/unsheath.ogg', 25, 1) + . = ..() + +/obj/item/melee/smith/twohand/katana/on_enter_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/twin/B = S.parent + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, 1) + . = ..() + +/obj/item/melee/smith/wakizashi/on_exit_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/twin/B = S.parent + if(istype(B)) + playsound(B, 'sound/items/unsheath.ogg', 25, 1) + . = ..() + +/obj/item/melee/smith/wakizashi/on_enter_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/twin/B = S.parent + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, 1) + . = ..() + +/obj/item/melee/bokken/on_exit_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/twin/B = S.parent + if(istype(B)) + playsound(B, 'sound/items/unsheath.ogg', 25, 1) + . = ..() + +/obj/item/melee/bokken/on_enter_storage(datum/component/storage/S) + var/obj/item/storage/belt/sabre/twin/B = S.parent + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, 1) + . = ..() + /obj/item/storage/belt/plant name = "botanical belt" desc = "A belt used to hold most hydroponics supplies. Suprisingly, not green." diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index cde6f5bd5a..4080a45af0 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -17,9 +17,6 @@ /obj/item/storage/fancy icon = 'icons/obj/food/containers.dmi' - icon_state = "donutbox6" - name = "donut box" - desc = "Mmm. Donuts." resistance_flags = FLAMMABLE var/icon_type = "donut" var/spawn_type = null @@ -59,18 +56,22 @@ fancy_open = TRUE update_icon() +#define DONUT_INBOX_SPRITE_WIDTH 3 + /* * Donut Box */ /obj/item/storage/fancy/donut_box - icon = 'icons/obj/food/containers.dmi' - icon_state = "donutbox6" - icon_type = "donut" name = "donut box" + desc = "Mmm. Donuts." + icon = 'icons/obj/food/donut.dmi' + icon_state = "donutbox_inner" + icon_type = "donut" spawn_type = /obj/item/reagent_containers/food/snacks/donut fancy_open = TRUE custom_price = PRICE_NORMAL + appearance_flags = KEEP_TOGETHER /obj/item/storage/fancy/donut_box/ComponentInitialize() . = ..() @@ -78,6 +79,36 @@ STR.max_items = 6 STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/donut)) +/obj/item/storage/fancy/donut_box/PopulateContents() + . = ..() + update_icon() + +/obj/item/storage/fancy/donut_box/update_icon_state() + if(fancy_open) + icon_state = "donutbox_inner" + else + icon_state = "donutbox" + +/obj/item/storage/fancy/donut_box/update_overlays() + . = ..() + + if (!fancy_open) + return + + var/donuts = 0 + + for (var/_donut in contents) + var/obj/item/reagent_containers/food/snacks/donut/donut = _donut + if (!istype(donut)) + continue + + . += image(icon = initial(icon), icon_state = donut.in_box_sprite(), pixel_x = donuts * DONUT_INBOX_SPRITE_WIDTH) + donuts += 1 + + . += image(icon = initial(icon), icon_state = "donutbox_top") + +#undef DONUT_INBOX_SPRITE_WIDTH + /* * Egg Box */ diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 442228ef31..97012528a0 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -520,3 +520,9 @@ new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) new /obj/item/lighter(src) +/obj/item/storage/box/syndie_kit/scarp + +/obj/item/storage/box/syndie_kit/scarp/PopulateContents() + new /obj/item/book/granter/martial/carp(src) + new /obj/item/clothing/suit/hooded/carp_costume(src) + new /obj/item/staff/bostaff(src) diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 2a4856f60e..acddf27b6f 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -271,6 +271,11 @@ icon = "the_lightbulb" desc = "A cafe popular among moths and moffs. Once shut down for a week after the bartender used mothballs to protect her spare uniforms." +/datum/barsign/goose + name = "The Loose Goose" + icon = "goose" + desc = "Drink till you puke and/or break the laws of reality!" + /datum/barsign/cybersylph name = "Cyber Sylph's" icon = "cybersylph" diff --git a/code/game/say.dm b/code/game/say.dm index a5691ad11f..61dd9c0879 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -96,18 +96,16 @@ GLOBAL_LIST_INIT(freqtospan, list( return "[say_mod(input, message_mode)][spanned ? ", \"[spanned]\"" : ""]" // Citadel edit [spanned ? ", \"[spanned]\"" : ""]" -#define ENCODE_HTML_EPHASIS(input, char, html, varname) \ - var/static/regex/##varname = regex("[char]{2}(.+?)[char]{2}", "g");\ - input = varname.Replace_char(input, "<[html]>$1") - +/// Converts specific characters, like +, |, and _ to formatted output. /atom/movable/proc/say_emphasis(input) - ENCODE_HTML_EPHASIS(input, "\\|", "i", italics) - ENCODE_HTML_EPHASIS(input, "\\+", "b", bold) - ENCODE_HTML_EPHASIS(input, "_", "u", underline) + var/static/regex/italics = regex(@"\|(\S[\w\W]*?\S)\|", "g") + input = italics.Replace_char(input, "$1") + var/static/regex/bold = regex(@"\+(\S[\w\W]*?\S)\+", "g") + input = bold.Replace_char(input, "$1") + var/static/regex/underline = regex(@"_(\S[\w\W]*?\S)_", "g") + input = underline.Replace_char(input, "$1") return input -#undef ENCODE_HTML_EPHASIS - /// Quirky citadel proc for our custom sayverbs to strip the verb out. Snowflakey as hell, say rewrite 3.0 when? /atom/movable/proc/quoteless_say_quote(input, list/spans = list(speech_span), message_mode) if((input[1] == "!") && (length_char(input) > 1)) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d4b2d03428..d4afc3dbb4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -679,8 +679,8 @@ set category = "Server" set desc="Respawn basically" set name="Toggle Respawn" - var/new_nores = !CONFIG_GET(flag/norespawn) - CONFIG_SET(flag/norespawn, new_nores) + var/new_nores = CONFIG_GET(flag/respawns_enabled) + CONFIG_SET(flag/respawns_enabled, !new_nores) if (!new_nores) to_chat(world, "You may now respawn.", confidential = TRUE) else diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index ef4abeb0ad..39053b8e15 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -44,6 +44,11 @@ GLOBAL_PROTECT(protected_ranks) /datum/admin_rank/vv_edit_var(var_name, var_value) return FALSE +/datum/admin_rank/CanProcCall(procname) + . = ..() + if(!check_rights(R_SENSITIVE)) + return FALSE + /proc/admin_keyword_to_flag(word, previous_rights=0) var/flag = 0 switch(ckey(word)) @@ -79,6 +84,8 @@ GLOBAL_PROTECT(protected_ranks) flag = R_AUTOLOGIN if("dbranks") flag = R_DBRANKS + if("sensitive") + flag = R_SENSITIVE if("@","prev") flag = previous_rights return flag diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 52b4fa05b1..e2c12353f7 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -78,8 +78,11 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/mark_datum_mapview, /client/proc/hide_verbs, /*hides all our adminverbs*/ /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ - /datum/admins/proc/open_borgopanel + /datum/admins/proc/open_borgopanel, + /client/proc/admin_cmd_respawn_return_to_lobby, + /client/proc/admin_cmd_remove_ghost_respawn_timer ) + GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel)) GLOBAL_PROTECT(admin_verbs_ban) GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/manual_play_web_sound, /client/proc/set_round_end_sound)) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 09f9664295..8f4a9742ea 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -28,6 +28,11 @@ GLOBAL_PROTECT(href_token) var/deadmined +/datum/admins/CanProcCall(procname) + . = ..() + if(!check_rights(R_SENSITIVE)) + return FALSE + /datum/admins/New(datum/admin_rank/R, ckey, force_active = FALSE, protected) if(IsAdminAdvancedProcCall()) var/msg = " has tried to elevate permissions!" @@ -147,6 +152,8 @@ GLOBAL_PROTECT(href_token) return 0 /datum/admins/vv_edit_var(var_name, var_value) + if(var_name == NAMEOF(src, fakekey)) + return ..() return FALSE //nice try trialmin /* diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 41662c1cad..ffe5371619 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -131,7 +131,7 @@ for(var/mob/living/mob in thunderdome) qdel(mob) //Clear mobs for(var/obj/obj in thunderdome) - if(!istype(obj, /obj/machinery/camera)) + if(!istype(obj, /obj/machinery/camera) && !istype(obj, /obj/effect/abstract/proximity_checker)) qdel(obj) //Clear objects var/area/template = locate(/area/tdome/arena_source) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 356746ddbc..4218d4238f 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -298,7 +298,9 @@ browse_messages(target_ckey = ckey(target_key), agegate = TRUE) qdel(query_find_message_secret) -/proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE) +/proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE, override = FALSE) + if((!override || IsAdminAdvancedProcCall()) && !check_rights(R_SENSITIVE)) + return if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ad8dd168eb..e0434a6fea 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -936,6 +936,12 @@ else dat += "" + //Respawns + if(jobban_isbanned(M, ROLE_RESPAWN)) + dat += "" + else + dat += "" + dat += "
Mind Transfer PotionRespawnsRespawns
" usr << browse(dat, "window=jobban2;size=800x450") return @@ -1799,12 +1805,15 @@ if(alert(usr, "Send [key_name(M)] back to Lobby?", "Message", "Yes", "No") != "Yes") return - log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby.") - message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby.") + log_admin("[key_name(usr)] has sent [key_name(M)] back to the Lobby, removing their respawn restrictions if they existed.") + message_admins("[key_name(usr)] has sent [key_name(M)] back to the Lobby, removing their respawn restrictions if they existed.") var/mob/dead/new_player/NP = new() NP.ckey = M.ckey qdel(M) + if(GLOB.preferences_datums[NP.ckey]) + var/datum/preferences/P = GLOB.preferences_datums[NP.ckey] + P.respawn_restrictions_active = FALSE else if(href_list["tdome1"]) if(!check_rights(R_FUN)) diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index e3937e19b6..1cddbe9509 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -23,13 +23,6 @@ var/rendered = "DEAD: [uppertext(holder.rank)]([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[emoji_parse(msg)]\"" - // var/rank_name = holder.rank - // var/admin_name = key - // if(holder.fakekey) - // rank_name = pick(strings("admin_nicknames.json", "ranks", "config")) please use this soon. - // admin_name = pick(strings("admin_nicknames.json", "names", "config")) - // var/rendered = "DEAD: [rank_name]([admin_name]) says, \"[emoji_parse(msg)]\"" - for (var/mob/M in GLOB.player_list) if(isnewplayer(M)) continue diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index 4cbb0214f7..446dbcc69a 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -14,6 +14,8 @@ browseserverlogs("[GLOB.log_directory]/") /client/proc/browseserverlogs(path = "data/logs/") + if(!check_rights(R_SENSITIVE)) + return path = browse_files(path) if(!path) return diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index a3a1403e58..38e6edc6d4 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -45,8 +45,12 @@ desc = "A solid wall of slightly twitching tendrils with a reflective glow." damaged_desc = "A wall of twitching tendrils with a reflective glow." icon_state = "blob_glow" + flags_1 = DEFAULT_RICOCHET_1 flags_ricochet = RICOCHET_SHINY point_return = 8 max_integrity = 100 brute_resist = 1 explosion_block = 2 + +/obj/structure/blob/shield/reflective/check_projectile_ricochet(obj/item/projectile/P) + return PROJECTILE_RICOCHET_FORCE diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index 26c8bd5949..2fb7a2ccca 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -30,6 +30,7 @@ var/can_be_staked = FALSE // Only Feed can happen with a stake in you. var/cooldown_static = FALSE // Feed, Masquerade, and One-Shot powers don't improve their cooldown. //var/not_bloodsucker = FALSE // This goes to Vassals or Hunters, but NOT bloodsuckers. + var/must_be_concious = TRUE //Can't use this ability while unconcious. /datum/action/bloodsucker/New() if(bloodcost > 0) @@ -101,6 +102,11 @@ if(display_error) to_chat(owner, "Garlic in your blood is interfering with your powers!") return FALSE + if(must_be_concious) + if(owner.stat != CONSCIOUS) + if(display_error) + to_chat(owner, "You can't do this while you are unconcious!") + return FALSE // Incap? if(must_be_capacitated) var/mob/living/L = owner diff --git a/code/modules/antagonists/bloodsucker/powers/go_home.dm b/code/modules/antagonists/bloodsucker/powers/go_home.dm index c46a7fce6c..a8060ad07e 100644 --- a/code/modules/antagonists/bloodsucker/powers/go_home.dm +++ b/code/modules/antagonists/bloodsucker/powers/go_home.dm @@ -16,6 +16,7 @@ can_use_in_torpor = TRUE must_be_capacitated = TRUE can_be_immobilized = TRUE + must_be_concious = FALSE /datum/action/bloodsucker/gohome/CheckCanUse(display_error) . = ..() diff --git a/code/modules/antagonists/bloodsucker/powers/masquerade.dm b/code/modules/antagonists/bloodsucker/powers/masquerade.dm index d83f938e3f..f4ce531ef0 100644 --- a/code/modules/antagonists/bloodsucker/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsucker/powers/masquerade.dm @@ -27,6 +27,7 @@ warn_constant_cost = TRUE can_use_in_torpor = TRUE // Masquerade is maybe the only one that can do this. It stops your healing. cooldown_static = TRUE + must_be_concious = FALSE // NOTE: Firing off vulgar powers disables your Masquerade! diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 90eaeb57ac..574ebf66a1 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -689,8 +689,8 @@ wound_enhancement = 6 var/fast_enhancement = 6 var/fast_wound_enhancement = 6 - var/slow_enhancement = 20 - var/slow_wound_enhancement = 20 + var/slow_enhancement = 12 + var/slow_wound_enhancement = 15 silent = TRUE inherited_trait = TRAIT_CHUNKYFINGERS // how do you expect to shoot anyone with bone covered hands secondary_trait = TRAIT_MAULER // just punch them idiot diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index e6ec3a08b6..4a697a6bd7 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -445,7 +445,7 @@ if(L.move_resist < MOVE_FORCE_STRONG) var/atom/throw_target = get_edge_target_turf(L, user.dir) L.throw_at(throw_target, 7, 1, user) - else if(!iscultist(L)) + else if(!is_servant_of_ratvar(L)) L.DefaultCombatKnockdown(160) L.adjustStaminaLoss(140) //Ensures hard stamcrit L.flash_act(1,1) @@ -465,7 +465,7 @@ C.drowsyness = max(10, C.drowsyness) C.confused += clamp(20 - C.confused, 0, 10) L.adjustBruteLoss(15) - to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"]") + to_chat(user, "In an brilliant flash of red, [L] [is_servant_of_ratvar(L) ? "writhes in pain!" : "falls to the ground!"]") uses-- ..() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_book.dm b/code/modules/antagonists/eldritch_cult/eldritch_book.dm index 839150d37d..7f23922432 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_book.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_book.dm @@ -40,7 +40,7 @@ ///Gives you a charge and destroys a corresponding influence /obj/item/forbidden_book/proc/get_power_from_influence(atom/target, mob/user) var/obj/effect/reality_smash/RS = target - to_chat(target, "You start drawing power from influence...") + to_chat(user, "You start drawing power from influence...") if(do_after(user,10 SECONDS,TRUE,RS)) qdel(RS) charge += 1 @@ -50,7 +50,7 @@ for(var/turf/T in range(1,target)) if(is_type_in_typecache(T, blacklisted_turfs)) - to_chat(target, "The terrain doesn't support runes!") + to_chat(user, "The terrain doesn't support runes!") return var/A = get_turf(target) to_chat(user, "You start drawing a rune...") diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm index 99794024f1..99f0ae7596 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm @@ -8,6 +8,12 @@ ///Used mainly for summoning ritual to prevent spamming the rune to create millions of monsters. var/is_in_use = FALSE +/obj/effect/eldritch/Initialize() + . = ..() + var/image/I = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src) + I.override = TRUE + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "heretic_rune", I) + /obj/effect/eldritch/attack_hand(mob/living/user) . = ..() if(.) @@ -69,6 +75,7 @@ if(is_type_in_list(local_atom_in_range,local_required_atom_list)) selected_atoms |= local_atom_in_range local_required_atoms -= list(local_required_atom_list) + break if(length(local_required_atoms) > 0) continue @@ -190,6 +197,19 @@ icon_state = "pierced_illusion" anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + alpha = 0 + invisibility = INVISIBILITY_OBSERVER + +/obj/effect/broken_illusion/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/show_presence), 15 SECONDS) + var/image/I = image(icon = 'icons/effects/eldritch.dmi', icon_state = null, loc = src) + I.override = TRUE + add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "pierced_reality", I) + +/obj/effect/broken_illusion/proc/show_presence() + invisibility = 0 + animate(src, alpha = 255, time = 15 SECONDS) /obj/effect/broken_illusion/attack_hand(mob/living/user) if(!ishuman(user)) @@ -228,17 +248,19 @@ explosion.start() /obj/effect/broken_illusion/examine(mob/user) + . = ..() if(!IS_HERETIC(user) && ishuman(user)) var/mob/living/carbon/human/human_user = user to_chat(human_user,"Your brain hurts when you look at this!") - human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,30) - . = ..() + human_user.adjustOrganLoss(ORGAN_SLOT_BRAIN,20,190) + SEND_SIGNAL(human_user, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) /obj/effect/reality_smash name = "/improper reality smash" icon = 'icons/effects/eldritch.dmi' anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + invisibility = INVISIBILITY_OBSERVER ///We cannot use icon_state since this is invisible, functions the same way but with custom behaviour. var/image_state = "reality_smash" ///Who can see us? diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 739304e822..da2c61ad16 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -16,9 +16,9 @@ return var/dist = get_dist(user.loc,target.loc) var/dir = get_dir(user.loc,target.loc) - + if(user.z != target.z) - to_chat(user,"[target.real_name] is beyond our reach.") + to_chat(user,"[target.real_name] is on another plane of existance!") else switch(dist) if(0 to 15) @@ -33,6 +33,34 @@ if(target.stat == DEAD) to_chat(user,"[target.real_name] is dead. Bring them onto a transmutation rune!") +/datum/action/innate/heretic_shatter + name = "Shattering Offer" + desc = "By breaking your blade, you will be granted salvation from a dire situation. (Teleports you to a random safe turf on your current z level, but destroys your blade.)" + background_icon_state = "bg_ecult" + button_icon_state = "shatter" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + check_flags = MOBILITY_HOLD|MOBILITY_MOVE|MOBILITY_USE + var/mob/living/carbon/human/holder + var/obj/item/melee/sickly_blade/sword + +/datum/action/innate/heretic_shatter/Grant(mob/user, obj/object) + sword = object + holder = user + //i know what im doing + return ..() + +/datum/action/innate/heretic_shatter/IsAvailable() + if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder)) + return TRUE + else + return FALSE + +/datum/action/innate/heretic_shatter/Activate() + var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE) + do_teleport(holder,safe_turf,forceMove = TRUE) + to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...") + qdel(sword) + /obj/item/melee/sickly_blade name = "eldritch blade" desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..." @@ -50,15 +78,28 @@ throwforce = 10 hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "tore", "lacerated", "ripped", "diced", "rended") + var/datum/action/innate/heretic_shatter/linked_action + +/obj/item/melee/sickly_blade/Initialize() + . = ..() + linked_action = new(src) /obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user) - if(!IS_HERETIC(user)) + if(!(IS_HERETIC(user) || !IS_HERETIC_MONSTER(user))) to_chat(user,"You feel a pulse of some alien intellect lash out at your mind!") var/mob/living/carbon/human/human_user = user human_user.AdjustParalyzed(5 SECONDS) return FALSE return ..() +/obj/item/melee/sickly_blade/pickup(mob/user) + . = ..() + linked_action.Grant(user, src) + +/obj/item/melee/sickly_blade/dropped(mob/user, silent) + . = ..() + linked_action.Remove(user, src) + /obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() var/datum/antagonist/heretic/cultie = user.mind.has_antag_datum(/datum/antagonist/heretic) @@ -103,7 +144,7 @@ /obj/item/clothing/neck/eldritch_amulet/equipped(mob/user, slot) . = ..() - if(ishuman(user) && user.mind && slot == SLOT_NECK && IS_HERETIC(user)) + if(ishuman(user) && user.mind && slot == SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) ADD_TRAIT(user, trait, CLOTHING_TRAIT) user.update_sight() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm index a7330cd93a..e0189944e5 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm @@ -264,12 +264,19 @@ if(!LH.target) var/datum/objective/A = new A.owner = user.mind - var/datum/mind/targeted = A.find_target()//easy way, i dont feel like copy pasting that entire block of code - LH.target = targeted.current + var/list/targets = list() + for(var/i in 0 to 3) + var/datum/mind/targeted = A.find_target()//easy way, i dont feel like copy pasting that entire block of code + if(!targeted) + break + targets[targeted.current.real_name] = targeted.current + LH.target = targets[input(user,"Choose your next target","Target") in targets] + + if(!LH.target && targets.len) + LH.target = pick(targets) //Tsk tsk, you can and will get another target if you want it or not. qdel(A) if(LH.target) to_chat(user,"Your new target has been selected, go and sacrifice [LH.target.real_name]!") - else to_chat(user,"target could not be found for living heart.") diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index fbaa6cd26e..ba79cca07a 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -34,7 +34,7 @@ desc = "Touch spell that allows you to channel the power of the Old Gods through you." hand_path = /obj/item/melee/touch_attack/mansus_fist school = "evocation" - charge_max = 150 + charge_max = 100 clothes_req = FALSE action_icon = 'icons/mob/actions/actions_ecult.dmi' action_icon_state = "mansus_grasp" @@ -104,57 +104,61 @@ desc = "Spreads rust onto nearby turfs." range = 2 -/obj/effect/proc_holder/spell/targeted/touch/blood_siphon +/obj/effect/proc_holder/spell/pointed/blood_siphon name = "Blood Siphon" - desc = "Touch spell that heals you while damaging the enemy, has a chance to transfer wounds between you and your enemy." - hand_path = /obj/item/melee/touch_attack/blood_siphon + desc = "A touch spell that heals your wounds while damaging the enemy. It has a chance to transfer wounds between you and your enemy." school = "evocation" charge_max = 150 clothes_req = FALSE - invocation_type = "none" + invocation = "FL'MS O'ET'RN'ITY" + invocation_type = "whisper" action_icon = 'icons/mob/actions/actions_ecult.dmi' action_icon_state = "blood_siphon" action_background_icon_state = "bg_ecult" + range = 9 -/obj/item/melee/touch_attack/blood_siphon - name = "Blood Siphon" - desc = "A sinister looking aura that distorts the flow of reality around it." - color = RUNE_COLOR_RED - icon_state = "disintegrate" - item_state = "disintegrate" - catchphrase = "SUN'AI'KINI'MAS" - -/obj/item/melee/touch_attack/blood_siphon/afterattack(atom/target, mob/user, proximity_flag, proximity) - if(!proximity_flag) - return - playsound(user, 'sound/effects/curseattack.ogg', 75, TRUE) +/obj/effect/proc_holder/spell/pointed/blood_siphon/cast(list/targets, mob/user) + . = ..() + var/target = targets[1] + playsound(user, 'sound/magic/demon_attack1.ogg', 75, TRUE) if(ishuman(target)) var/mob/living/carbon/human/tar = target if(tar.anti_magic_check()) - tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + tar.visible_message("The spell bounces off of [target]!","The spell bounces off of you!") return ..() - var/mob/living/carbon/C2 = user + var/mob/living/carbon/carbon_user = user if(isliving(target)) - var/mob/living/L = target - L.adjustBruteLoss(20) - C2.adjustBruteLoss(-20) + var/mob/living/living_target = target + living_target.adjustBruteLoss(20) + carbon_user.adjustBruteLoss(-20) if(iscarbon(target)) - var/mob/living/carbon/C1 = target - for(var/obj/item/bodypart/bodypart in C2.bodyparts) + var/mob/living/carbon/carbon_target = target + for(var/bp in carbon_user.bodyparts) + var/obj/item/bodypart/bodypart = bp for(var/i in bodypart.wounds) var/datum/wound/iter_wound = i if(prob(50)) continue - var/obj/item/bodypart/target_bodypart = locate(bodypart.type) in C1.bodyparts + var/obj/item/bodypart/target_bodypart = locate(bodypart.type) in carbon_target.bodyparts if(!target_bodypart) continue iter_wound.remove_wound() iter_wound.apply_wound(target_bodypart) - C1.blood_volume -= 20 - if(C2.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all - C2.blood_volume += 20 - return ..() + carbon_target.blood_volume -= 20 + if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all + carbon_user.blood_volume += 20 + return + +/obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent) + . = ..() + if(!.) + return FALSE + if(!istype(target,/mob/living)) + if(!silent) + to_chat(user, "You are unable to siphon [target]!") + return FALSE + return TRUE /obj/effect/proc_holder/spell/aimed/rust_wave name = "Patron's Reach" @@ -451,7 +455,7 @@ new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) for(var/mob/living/livies in T.contents - centre) - livies.adjustFireLoss(10) + livies.adjustFireLoss(5) _range++ sleep(3) @@ -500,7 +504,7 @@ new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) for(var/mob/living/livies in T.contents - current_user) - livies.adjustFireLoss(5) + livies.adjustFireLoss(2.5) /obj/effect/proc_holder/spell/targeted/worm_contract @@ -519,6 +523,7 @@ . = ..() if(!istype(user,/mob/living/simple_animal/hostile/eldritch/armsy)) to_chat(user, "You try to contract your muscles but nothing happens...") + return var/mob/living/simple_animal/hostile/eldritch/armsy/armsy = user armsy.contract_next_chain_into_single_tile() @@ -727,7 +732,7 @@ /obj/effect/proc_holder/spell/cone/staggered/entropic_plume/do_mob_cone_effect(mob/living/victim, level) . = ..() - if(victim.anti_magic_check() || IS_HERETIC(victim) || victim.mind?.has_antag_datum(/datum/antagonist/heretic_monster)) + if(victim.anti_magic_check() || IS_HERETIC(victim) || IS_HERETIC_MONSTER(victim)) return victim.apply_status_effect(STATUS_EFFECT_AMOK) victim.apply_status_effect(STATUS_EFFECT_CLOUDSTRUCK, (level*10)) diff --git a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm index 425052de2a..1edb0ff19a 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm @@ -190,7 +190,7 @@ required_atoms = list(/mob/living/carbon/human) cost = 5 route = PATH_ASH - var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE) + var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE) /datum/eldritch_knowledge/final/ash_final/on_finished_recipe(mob/living/user, list/atoms, loc) priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the blaze, for Ashbringer [user.real_name] has come! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') diff --git a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm index 5e32cf1b4e..2b9f5b309f 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm @@ -173,9 +173,9 @@ /datum/eldritch_knowledge/summon/stalker name = "Lonely Ritual" gain_text = "I was able to combine my greed and desires to summon an eldritch beast I have not seen before." - desc = "You can now summon a Stalker using a knife, a flower, a pen and a piece of paper using a transmutation circle. Stalkers possess the ability to shapeshift into various forms while assuming the vigor and powers of that form." + desc = "You can now summon a Stalker using a knife, a candle, a pen and a piece of paper using a transmutation circle. Stalkers possess the ability to shapeshift into various forms while assuming the vigor and powers of that form." cost = 1 - required_atoms = list(/obj/item/kitchen/knife,/obj/item/reagent_containers/food/snacks/grown/poppy,/obj/item/pen,/obj/item/paper) + required_atoms = list(/obj/item/kitchen/knife,/obj/item/candle,/obj/item/pen,/obj/item/paper) mob_to_summon = /mob/living/simple_animal/hostile/eldritch/stalker next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/flesh_blade_upgrade_2) route = PATH_FLESH @@ -203,7 +203,7 @@ gain_text = "Our blood is all the same after all, the owl told me." desc = "You are granted a spell that drains some of the targets health, and returns it to you. It also has a chance to transfer any wounds you possess onto the target." cost = 1 - spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/blood_siphon + spell_to_add = /obj/effect/proc_holder/spell/pointed/blood_siphon next_knowledge = list(/datum/eldritch_knowledge/summon/raw_prophet,/datum/eldritch_knowledge/spell/area_conversion) /datum/eldritch_knowledge/final/flesh_final diff --git a/code/modules/antagonists/traitor/classes/ai.dm b/code/modules/antagonists/traitor/classes/ai.dm index b4d0135ce6..0c1709ee53 100644 --- a/code/modules/antagonists/traitor/classes/ai.dm +++ b/code/modules/antagonists/traitor/classes/ai.dm @@ -9,7 +9,7 @@ objective_count += forge_single_objective() for(var/i = objective_count, i < CONFIG_GET(number/traitor_objectives_amount), i++) - var/datum/objective/assassinate/kill_objective = new + var/datum/objective/assassinate/once/kill_objective = new kill_objective.owner = T.owner kill_objective.find_target() T.add_objective(kill_objective) diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 149b869649..0659655da5 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -261,6 +261,8 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( return //prevent the AI from activating an already active doomsday if (owner_AI.shunted) return //prevent AI from activating doomsday while shunted. + if (istype(owner.loc, /obj/item/aicard)) + return //prevent AI from activating doomsday while carded. If the AI gets carded after doomsdaying, there's already code to stop it then. active = TRUE set_us_up_the_bomb(owner) @@ -327,6 +329,10 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( sleep(30) if(QDELETED(owner) || owner.stat == DEAD) return + if(istype(owner.loc, /obj/item/aicard)) + to_chat(owner, "Error: Signal transmission failed. Reason: Lost connection to network.") + to_chat(owner, "You can't activate the doomsday device while inside an intelliCard!") + return priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", "aimalf") set_security_level("delta") var/obj/machinery/doomsday_device/DOOM = new(owner_AI) diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index f10506a0d9..1468a5a97b 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -17,16 +17,16 @@ threat = 3 /datum/antagonist/xeno/threat() - . = 1 + . = 3 if(isalienhunter(owner)) - . = 2 + . = 6 else if(isaliensentinel(owner)) - . = 4 + . = 12 else if(isalienroyal(owner)) if(isalienqueen(owner)) - . = 8 + . = 24 else - . = 6 + . = 18 /datum/antagonist/xeno/create_team(datum/team/xeno/new_team) if(!new_team) diff --git a/code/modules/arousal/arousal.dm b/code/modules/arousal/arousal.dm index 99683f1688..4503bba0e8 100644 --- a/code/modules/arousal/arousal.dm +++ b/code/modules/arousal/arousal.dm @@ -68,6 +68,10 @@ R.reaction(turfing ? target : target.loc, TOUCH, 1, 0) if(!turfing) R.trans_to(target, R.total_volume * (spill ? G.fluid_transfer_factor : 1)) + + overlay_fullscreen("flash", /obj/screen/fullscreen/flash) // To be more true to the hentai + clear_fullscreen("flash", 20) + G.last_orgasmed = world.time R.clear_reagents() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 39a99148c2..0540ee2ae6 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -88,6 +88,7 @@ if(!panel_open) return anchored = !anchored + move_resist = anchored? INFINITY : 100 I.play_tool_sound(src) if(generator) disconnectFromGenerator() diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 350a08dce6..bd7dd6d297 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -206,7 +206,7 @@ . = other_airs + air if(null in .) stack_trace("[src]([REF(src)]) has one or more null gas mixtures, which may cause bugs. Null mixtures will not be considered in reconcile_air().") - return listclearnulls(.) + listclearnulls(.) /datum/pipeline/proc/empty() for(var/datum/gas_mixture/GM in get_all_connected_airs()) diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index 671c22bde5..12a5002ac7 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -60,6 +60,9 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they if(!dry_run && (sold || delete_unsold)) if(ismob(thing)) thing.investigate_log("deleted through cargo export",INVESTIGATE_CARGO) + if(ismecha(thing)) + var/obj/mecha/mech = thing + mech.wreckage = null // why a mech left a wreck when sold i will never know qdel(thing) return report diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm index 0cf12fbc5d..86c6b114f0 100644 --- a/code/modules/cargo/packs/materials.dm +++ b/code/modules/cargo/packs/materials.dm @@ -147,6 +147,14 @@ crate_name = "fuel tank crate" crate_type = /obj/structure/closet/crate/large +/datum/supply_pack/materials/hightankfuel + name = "Large Fuel Tank Crate" + desc = "Contains a high-capacity fuel tank. Keep contents away from open flame." + cost = 2000 + contains = list(/obj/structure/reagent_dispensers/fueltank/high) + crate_name = "high-capacity fuel tank crate" + crate_type = /obj/structure/closet/crate/large + /datum/supply_pack/materials/watertank name = "Water Tank Crate" desc = "Contains a tank of dihydrogen monoxide... sounds dangerous." diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm index efac62c930..6169c4d3f0 100644 --- a/code/modules/cargo/supplypod.dm +++ b/code/modules/cargo/supplypod.dm @@ -74,6 +74,7 @@ bluespace = TRUE explosionSize = list(0,0,1,2) landingDelay = 25 //Longer than others + reverseOptionList = list("Mobs"=TRUE,"Objects"=FALSE,"Anchored"=FALSE,"Underfloor"=FALSE,"Wallmounted"=FALSE,"Floors"=FALSE,"Walls"=FALSE) /obj/structure/closet/supplypod/centcompod style = STYLE_CENTCOM diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 267ee3a5e1..c75454f3a6 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -921,8 +921,22 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if (NAMEOF(src, view)) view_size.setDefault(var_value) return TRUE + if(NAMEOF(src, computer_id)) + return FALSE + if(NAMEOF(src, address)) + return FALSE . = ..() +/client/vv_get_var(var_name) + . = ..() + switch(var_name) + if(NAMEOF(src, computer_id)) + if(!check_rights(R_SENSITIVE, FALSE)) + return "SENSITIVE" + if(NAMEOF(src, address)) + if(!check_rights(R_SENSITIVE, FALSE)) + return "SENSITIVE" + /client/proc/rescale_view(change, min, max) var/viewscale = getviewsize(view) var/x = viewscale[1] diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 16d6ca351d..e97f6dc3f4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -12,11 +12,29 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used var/max_save_slots = 24 - //non-preference stuff - var/muted = 0 + // Intra-round persistence begin + /// Flags for admin mutes + var/muted = NONE + /// Last IP the person was seen on var/last_ip + /// Last CID the person was seen on var/last_id + /// Do we log their clicks to disk? var/log_clicks = FALSE + /// Characters they have joined the round under - Lazylist of names + var/list/characters_joined_as + /// Slots they have joined the round under - Lazylist of numbers + var/list/slots_joined_as + /// Are we currently subject to respawn restrictions? Usually set by us using the "respawn" verb, but can be lifted by admins. + var/respawn_restrictions_active = FALSE + /// time of death we consider for respawns + var/respawn_time_of_death = -INFINITY + /// did they DNR? used to prevent respawns. + var/dnr_triggered = FALSE + /// did they cryo on their last ghost? + var/respawn_did_cryo = FALSE + + // Intra-round persistence end var/icon/custom_holoform_icon var/list/cached_holoform_icons @@ -179,7 +197,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) ///loadout stuff var/gear_points = 10 var/list/gear_categories - var/list/chosen_gear = list() + var/list/loadout_data = list() + var/loadout_slot = 1 //goes from 1 to MAXIMUM_LOADOUT_SAVES var/gear_category var/gear_subcategory @@ -806,6 +825,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" if(3) + //calculate your gear points from the chosen item + gear_points = CONFIG_GET(number/initial_gear_points) + var/list/chosen_gear = loadout_data["SAVE_[loadout_slot]"] + if(chosen_gear) + for(var/loadout_item in chosen_gear) + var/loadout_item_path = loadout_item[LOADOUT_ITEM] + if(loadout_item_path) + var/datum/gear/loadout_gear = text2path(loadout_item_path) + if(loadout_gear) + gear_points -= initial(loadout_gear.cost) + else + chosen_gear = list() + dat += "" dat += "" dat += "" @@ -861,15 +893,27 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(donoritem && !gear.donator_ckey_check(user.ckey)) continue var/class_link = "" - if(gear.type in chosen_gear) + var/list/loadout_item = has_loadout_gear(loadout_slot, "[gear.type]") + var/extra_color_data = "" + if(loadout_item) class_link = "style='white-space:normal;' class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=0'" + if(gear.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) + extra_color_data += "
Color" + for(var/loadout_color in loadout_item[LOADOUT_COLOR]) + extra_color_data += "   " + else + var/loadout_color_non_poly = "#FFFFFF" + if(length(loadout_item[LOADOUT_COLOR])) + loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1] + extra_color_data += "
Color" + extra_color_data += "   " else if(gear_points <= 0) class_link = "style='white-space:normal;' class='linkOff'" else if(donoritem) class_link = "style='white-space:normal;background:#ebc42e;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" else class_link = "style='white-space:normal;' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=1'" - dat += "" + dat += "" dat += ""+t+""),"
[gear_points] loadout points remaining. \[Clear Loadout\]
You can only choose one item per category, unless it's an item that spawns in your backpack or hands.
[name]
[name][extra_color_data][gear.cost]" if(islist(gear.restricted_roles)) if(gear.restricted_roles.len) @@ -2609,8 +2653,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) current_tab = text2num(href_list["tab"]) if(href_list["preference"] == "gear") if(href_list["clear_loadout"]) - chosen_gear = list() - gear_points = CONFIG_GET(number/initial_gear_points) + loadout_data["SAVE_[loadout_slot]"] = list() save_preferences() if(href_list["select_category"]) gear_category = html_decode(href_list["select_category"]) @@ -2623,10 +2666,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(!G) return var/toggle = text2num(href_list["toggle_gear"]) - if(!toggle && (G.type in chosen_gear))//toggling off and the item effectively is in chosen gear) - chosen_gear -= G.type - gear_points += initial(G.cost) - else if(toggle && (!(is_type_in_ref_list(G, chosen_gear)))) + if(!toggle && has_loadout_gear(loadout_slot, "[G.type]"))//toggling off and the item effectively is in chosen gear) + remove_gear_from_loadout(loadout_slot, "[G.type]") + else if(toggle && !(has_loadout_gear(loadout_slot, "[G.type]"))) if(!is_loadout_slot_available(G.category)) to_chat(user, "You cannot take this loadout, as you've already chosen too many of the same category!") return @@ -2634,8 +2676,46 @@ GLOBAL_LIST_EMPTY(preferences_datums) to_chat(user, "This is an item intended for donator use only. You are not authorized to use this item.") return if(gear_points >= initial(G.cost)) - chosen_gear += G.type - gear_points -= initial(G.cost) + var/list/new_loadout_data = list(LOADOUT_ITEM = "[G.type]") + if(length(G.loadout_initial_colors)) + new_loadout_data[LOADOUT_COLOR] = G.loadout_initial_colors + else + new_loadout_data[LOADOUT_COLOR] = list("#FFFFFF") + if(loadout_data["SAVE_[loadout_slot]"]) + loadout_data["SAVE_[loadout_slot]"] += list(new_loadout_data) //double packed because it does the union of the CONTENTS of the lists + else + loadout_data["SAVE_[loadout_slot]"] = list(new_loadout_data) //double packed because you somehow had no save slot in your loadout? + if(href_list["loadout_color"]) + var/name = html_decode(href_list["loadout_gear_name"]) + var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name] + if(!G) + return + var/user_gear = has_loadout_gear(loadout_slot, "[G.type]") + if(!user_gear) + return + if(!length(user_gear[LOADOUT_COLOR])) + user_gear[LOADOUT_COLOR] = list("#FFFFFF") + var/current_color = user_gear[LOADOUT_COLOR][1] + var/new_color = input(user, "Polychromic options", "Choose Color", current_color) as color|null + user_gear[LOADOUT_COLOR][1] = sanitize_hexcolor(new_color, 6, TRUE, current_color) + if(href_list["loadout_color_polychromic"]) + var/name = html_decode(href_list["loadout_gear_name"]) + var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name] + if(!G) + return + var/user_gear = has_loadout_gear(loadout_slot, "[G.type]") + if(!user_gear) + return + var/list/color_options = list() + for(var/i=1, i<=length(G.loadout_initial_colors), i++) + color_options += "Color [i]" + var/color_to_change = input(user, "Polychromic options", "Recolor [name]") as null|anything in color_options + if(color_to_change) + var/color_index = text2num(copytext(color_to_change, 7)) + var/current_color = user_gear[LOADOUT_COLOR][color_index] + var/new_color = input(user, "Polychromic options", "Choose [color_to_change] Color", current_color) as color|null + if(new_color) + user_gear[LOADOUT_COLOR][color_index] = sanitize_hexcolor(new_color, 6, TRUE, current_color) ShowChoices(user) return 1 @@ -2853,8 +2933,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences/proc/is_loadout_slot_available(slot) var/list/L LAZYINITLIST(L) - for(var/i in chosen_gear) - var/datum/gear/G = i + for(var/i in loadout_data["SAVE_[loadout_slot]"]) + var/datum/gear/G = i[LOADOUT_ITEM] var/occupied_slots = L[initial(G.category)] ? L[initial(G.category)] + 1 : 1 LAZYSET(L, initial(G.category), occupied_slots) switch(slot) @@ -2868,6 +2948,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(L[slot] < DEFAULT_SLOT_AMT) return TRUE +/datum/preferences/proc/has_loadout_gear(save_slot, gear_type) + var/list/gear_list = loadout_data["SAVE_[save_slot]"] + for(var/loadout_gear in gear_list) + if(loadout_gear[LOADOUT_ITEM] == gear_type) + return loadout_gear + return FALSE + +/datum/preferences/proc/remove_gear_from_loadout(save_slot, gear_type) + var/find_gear = has_loadout_gear(save_slot, gear_type) + if(find_gear) + loadout_data["SAVE_[save_slot]"] -= list(find_gear) + #undef DEFAULT_SLOT_AMT #undef HANDS_SLOT_AMT #undef BACKPACK_SLOT_AMT diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index acc24b13bd..86f7622a93 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 46 +#define SAVEFILE_VERSION_MAX 47 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -262,6 +262,29 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["color_scheme"] = OLD_CHARACTER_COLORING //advanced is off by default + if(current_version < 47) //loadout save gets changed to json + var/text_to_load + S["loadout"] >> text_to_load + var/list/saved_loadout_paths = splittext(text_to_load, "|") + //MAXIMUM_LOADOUT_SAVES save slots per loadout now + for(var/i=1, i<= MAXIMUM_LOADOUT_SAVES, i++) + loadout_data["SAVE_[i]"] = list() + for(var/some_gear_item in saved_loadout_paths) + if(!ispath(text2path(some_gear_item))) + message_admins("Failed to copy item [some_gear_item] to new loadout system when migrating from version [current_version] to 40, issue: item is not a path") + continue + var/datum/gear/gear_item = text2path(some_gear_item) + if(!(initial(gear_item.loadout_flags) & LOADOUT_CAN_COLOR_POLYCHROMIC)) + loadout_data["SAVE_1"] += list(list(LOADOUT_ITEM = some_gear_item)) //for the migration we put their old save into the first save slot, which is loaded by default! + else + //the same but we setup some new polychromic data (you can't get the initial value for a list so we have to do this horrible thing here) + var/datum/gear/temporary_gear_item = new gear_item + loadout_data["SAVE_1"] += list(list(LOADOUT_ITEM = some_gear_item, LOADOUT_COLOR = temporary_gear_item.loadout_initial_colors)) + qdel(temporary_gear_item) + //it's double packed into a list because += will union the two lists contents + + S["loadout"] = safe_json_encode(loadout_data) + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -711,20 +734,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/list/json_from_file = json_decode(file2text(char_vr_path)) if(json_from_file) belly_prefs = json_from_file["belly_prefs"] + //gear loadout - var/text_to_load - S["loadout"] >> text_to_load - var/list/saved_loadout_paths = splittext(text_to_load, "|") - chosen_gear = list() - gear_points = CONFIG_GET(number/initial_gear_points) - for(var/i in saved_loadout_paths) - var/datum/gear/path = text2path(i) - if(path) - var/init_cost = initial(path.cost) - if(init_cost > gear_points) - continue - chosen_gear += path - gear_points -= init_cost + loadout_data = safe_json_decode(S["loadout"]) //try to fix any outdated data if necessary //preference updating will handle saving the updated data for us. @@ -1058,11 +1070,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //gear loadout - if(chosen_gear.len) - var/text_to_save = chosen_gear.Join("|") - S["loadout"] << text_to_save + if(length(loadout_data)) + S["loadout"] << safe_json_encode(loadout_data) else - S["loadout"] << "" //empty string to reset the value + S["loadout"] << safe_json_encode(list()) cit_character_pref_save(S) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 5a8325fd64..c242509344 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -179,7 +179,7 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8") to_chat(usr, "Sorry, that function is not enabled on this server.") return - browse_messages(null, usr.ckey, null, TRUE) + browse_messages(null, usr.ckey, null, TRUE, override = TRUE) /client/proc/self_playtime() set name = "View tracked playtime" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 66d4b46c60..15a5345ad1 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -11,12 +11,25 @@ flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH resistance_flags = NONE mutantrace_variation = STYLE_MUZZLE + visor_flags_inv = HIDEFACE + var/flavor_adjust = TRUE //can it do the heehoo alt click to hide/show identity + +/obj/item/clothing/mask/gas/examine(mob/user) + . = ..() + if(flavor_adjust) + . += "Alt-click to toggle identity concealment. it's currently [flags_inv & HIDEFACE ? "on" : "off"]." + +/obj/item/clothing/mask/gas/AltClick(mob/user) + . = ..() + if(flavor_adjust && adjustmask(user, TRUE)) + return TRUE /obj/item/clothing/mask/gas/glass name = "glass gas mask" desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however." //More accurate icon_state = "gas_clear" flags_inv = HIDEEYES + flavor_adjust = FALSE // **** Welding gas mask **** @@ -35,6 +48,7 @@ visor_flags_inv = HIDEEYES visor_flags_cover = MASKCOVERSEYES resistance_flags = FIRE_PROOF + flavor_adjust = FALSE /obj/item/clothing/mask/gas/welding/attack_self(mob/user) weldingvisortoggle(user) @@ -72,7 +86,6 @@ flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) - visor_flags_inv = HIDEFACE dog_fashion = /datum/dog_fashion/head/clown var/static/list/clownmask_designs @@ -87,15 +100,6 @@ "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow") ) -/obj/item/clothing/mask/gas/clown_hat/examine(mob/user) - . = ..() - . += "Alt-click to toggle identity concealment. it's currently [flags_inv & HIDEFACE ? "on" : "off"]." - -/obj/item/clothing/mask/gas/clown_hat/AltClick(mob/user) - . = ..() - if(adjustmask(user, TRUE)) - return TRUE - /obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user) if(!istype(user) || user.incapacitated()) return @@ -130,18 +134,8 @@ flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) - visor_flags_inv = HIDEFACE var/static/list/mimemask_designs -/obj/item/clothing/mask/gas/mime/examine(mob/user) - . = ..() - . += "Alt-click to toggle identity concealment. it's currently [flags_inv & HIDEFACE ? "on" : "off"]." - -/obj/item/clothing/mask/gas/mime/AltClick(mob/user) - . = ..() - if(adjustmask(user, TRUE)) - return TRUE - /obj/item/clothing/mask/gas/mime/Initialize(mapload) .=..() if(!mimemask_designs) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 9d83752081..149f17f4d6 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -280,7 +280,7 @@ body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun, /obj/item/staff/bostaff) hoodtype = /obj/item/clothing/head/hooded/carp_hood /obj/item/clothing/head/hooded/carp_hood diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 7e6a9ca5bf..2a5d6974ef 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -168,7 +168,15 @@ desc = "A simple, inconspicuous harness replacement for a jumpsuit." icon_state = "gear_harness" item_state = "gear_harness" - can_adjust = FALSE + can_adjust = TRUE + body_parts_covered = CHEST|GROIN + +/obj/item/clothing/under/misc/gear_harness/toggle_jumpsuit_adjust() + adjusted = !adjusted + if(adjusted) + body_parts_covered = NONE + else + body_parts_covered = CHEST|GROIN /obj/item/clothing/under/misc/durathread name = "durathread jumpsuit" @@ -324,7 +332,7 @@ desc = "A blue bathrobe." icon_state = "bathrobe" item_state = "bathrobe" - + /obj/item/clothing/under/misc/mechsuitred name = "red mech suit" desc = "What are you, stupid?" @@ -336,10 +344,10 @@ desc = "...Mom?" icon_state = "white_mech_suit" item_state = "white_mech_suit" - + /obj/item/clothing/under/misc/mechsuitblue name = "blue mech suit" desc = "Get in the damn robot already!" icon_state = "blue_mech_suit" item_state = "blue_mech_suit" - + diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index ea63ee611f..919a1d2949 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -53,6 +53,9 @@ new festive_tree(get_turf(src)) return INITIALIZE_HINT_QDEL +/obj/effect/landmark/xmastree/hilbert + christmas_tree = /obj/structure/flora/tree/pine/xmas + /obj/effect/landmark/xmastree/rdrod name = "festivus pole spawner" festive_tree = /obj/structure/festivus diff --git a/code/modules/events/nightmare.dm b/code/modules/events/nightmare.dm index 698f5130f1..97a10c930a 100644 --- a/code/modules/events/nightmare.dm +++ b/code/modules/events/nightmare.dm @@ -3,6 +3,7 @@ typepath = /datum/round_event/ghost_role/nightmare max_occurrences = 1 min_players = 20 + gamemode_blacklist = list("dynamic") /datum/round_event/ghost_role/nightmare minimum_required = 1 diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 13a46395ea..94960a2658 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -34,6 +34,10 @@ filling_color = "#FF69B4" return TRUE +/// Returns the sprite of the donut while in a donut box +/obj/item/reagent_containers/food/snacks/donut/proc/in_box_sprite() + return "[icon_state]_inbox" + /obj/item/reagent_containers/food/snacks/donut/checkLiked(fraction, mob/M) //Sec officers always love donuts if(last_check_time + 50 < world.time) if(ishuman(M)) @@ -165,6 +169,10 @@ tastes = list("jelly" = 1, "donut" = 3) foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR | BREAKFAST +// Jelly donuts don't have holes, but look the same on the outside +/obj/item/reagent_containers/food/snacks/donut/jelly/in_box_sprite() + return "[replacetext(icon_state, "jelly", "donut")]_inbox" + /obj/item/reagent_containers/food/snacks/donut/jelly/Initialize() . = ..() if(extra_reagent) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 3aa9e6519a..e3f5264568 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -554,7 +554,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and /datum/holiday/xmas name = CHRISTMAS - begin_day = 10 + begin_day = 18 begin_month = DECEMBER end_day = 27 drone_hat = /obj/item/clothing/head/santa @@ -567,7 +567,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and /datum/holiday/xmas/proc/roundstart_celebrate() for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) - Monitor.icon_state = "entertainment_xmas" + Monitor.icon_state_on = "entertainment_xmas" for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list) Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) diff --git a/code/modules/integrated_electronics/core/helpers.dm b/code/modules/integrated_electronics/core/helpers.dm index 5567683006..5fcb6fede8 100644 --- a/code/modules/integrated_electronics/core/helpers.dm +++ b/code/modules/integrated_electronics/core/helpers.dm @@ -32,7 +32,10 @@ /obj/item/integrated_circuit/proc/get_pin_data(pin_type, pin_number) var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number) - return pin.get_data() + var/data = pin.get_data() + if(istext(data)) + data = sanitize_text(data) + return data /obj/item/integrated_circuit/proc/get_pin_data_as_type(pin_type, pin_number, as_type) var/datum/integrated_io/pin = get_pin_ref(pin_type, pin_number) diff --git a/code/modules/integrated_electronics/core/saved_circuits.dm b/code/modules/integrated_electronics/core/saved_circuits.dm index 61ada24b25..5a4e185839 100644 --- a/code/modules/integrated_electronics/core/saved_circuits.dm +++ b/code/modules/integrated_electronics/core/saved_circuits.dm @@ -91,7 +91,7 @@ /obj/item/integrated_circuit/proc/load(list/component_params) // Load name if(component_params["name"]) - displayed_name = component_params["name"] + displayed_name = html_encode(component_params["name"]) // Load input values if(component_params["inputs"]) @@ -104,7 +104,7 @@ var/datum/integrated_io/pin = inputs[index] // The pins themselves validate the data. - pin.write_data_to_pin(input_value) + pin.write_data_to_pin(istext(input_value)? html_encode(input_value) : input_value) // TODO: support for special input types, such as internal refs and maybe typepaths if(!isnull(component_params["special"])) @@ -152,19 +152,17 @@ /obj/item/electronic_assembly/proc/load(list/assembly_params) // Load modified name, if any. if(assembly_params["name"]) - name = assembly_params["name"] + name = html_encode(assembly_params["name"]) // Load modified description, if any. if(assembly_params["desc"]) - desc = assembly_params["desc"] + desc = html_encode(assembly_params["desc"]) if(assembly_params["detail_color"]) detail_color = assembly_params["detail_color"] update_icon() - - // Attempts to save an assembly into a save file format. // Returns null if assembly is not complete enough to be saved. /datum/controller/subsystem/processing/circuit/proc/save_electronic_assembly(obj/item/electronic_assembly/assembly) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index b0ac5248c1..bb55ad45ca 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -73,6 +73,12 @@ /// Starting skill modifiers. var/list/starting_modifiers + // These can be flags but I don't care because they're never changed + /// Can you always join as this job even while respawning (should probably only be on for assistant) + var/always_can_respawn_as = FALSE + /// Is this job considered a combat role for respawning? (usually sec/command) + var/considered_combat_role = FALSE + /** * Checks if we should be created on a certain map */ @@ -118,6 +124,12 @@ //Used for a special check of whether to allow a client to latejoin as this job. /datum/job/proc/special_check_latejoin(client/C) + var/joined = LAZYLEN(C.prefs?.characters_joined_as) + if(C.prefs?.respawn_restrictions_active && (joined || CONFIG_GET(flag/respawn_penalty_includes_observe))) + if(!CONFIG_GET(flag/allow_non_assistant_respawn) && always_can_respawn_as) + return FALSE + if(!CONFIG_GET(flag/allow_combat_role_respawn) && considered_combat_role) + return FALSE return TRUE /datum/job/proc/GetAntagRep() diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index a7401791ab..d0eb690e94 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -16,6 +16,7 @@ display_order = JOB_DISPLAY_ORDER_AI var/do_special_check = TRUE threat = 5 + considered_combat_role = TRUE starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index b8fc963989..db5390f323 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -18,6 +18,7 @@ Assistant paycheck_department = ACCOUNT_CIV display_order = JOB_DISPLAY_ORDER_ASSISTANT dresscodecompliant = FALSE + always_can_respawn_as = TRUE threat = 0.2 /datum/job/assistant/get_access() diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 047a07062d..4806bf5546 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -14,6 +14,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_COMMAND exp_type_department = EXP_TYPE_COMMAND + considered_combat_role = TRUE outfit = /datum/outfit/job/captain diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 18be8c9835..902be0bdc8 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_ENGINEERING + considered_combat_role = TRUE outfit = /datum/outfit/job/ce plasma_outfit = /datum/outfit/plasmaman/ce diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 627a7a2ca1..bb5fc68809 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_MEDICAL + considered_combat_role = TRUE outfit = /datum/outfit/job/cmo plasma_outfit = /datum/outfit/plasmaman/cmo diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm index 4f74542b2a..761882894f 100644 --- a/code/modules/jobs/job_types/cyborg.dm +++ b/code/modules/jobs/job_types/cyborg.dm @@ -11,6 +11,7 @@ minimal_player_age = 21 exp_requirements = 120 exp_type = EXP_TYPE_CREW + considered_combat_role = TRUE starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 65724765e1..c704326879 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -15,6 +15,7 @@ outfit = /datum/outfit/job/detective plasma_outfit = /datum/outfit/plasmaman/detective + considered_combat_role = TRUE access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 41fb4b99da..f1b7d3e8c4 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -15,7 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SERVICE - + considered_combat_role = TRUE outfit = /datum/outfit/job/hop plasma_outfit = /datum/outfit/plasmaman/hop diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index cfd8d7f6c0..c772a8acae 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -14,6 +14,7 @@ minimal_player_age = 10 exp_requirements = 300 exp_type = EXP_TYPE_CREW + considered_combat_role = TRUE exp_type_department = EXP_TYPE_SECURITY outfit = /datum/outfit/job/hos diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 4c6b8e064f..301acff5c4 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -15,6 +15,7 @@ exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SUPPLY + considered_combat_role = TRUE outfit = /datum/outfit/job/quartermaster diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 33f7df8260..6c2cb94d13 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -15,6 +15,7 @@ exp_type_department = EXP_TYPE_SCIENCE exp_requirements = 180 exp_type = EXP_TYPE_CREW + considered_combat_role = TRUE outfit = /datum/outfit/job/rd plasma_outfit = /datum/outfit/plasmaman/rd diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index bc83eb752d..bdae7fe028 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -12,6 +12,7 @@ minimal_player_age = 7 exp_requirements = 300 exp_type = EXP_TYPE_CREW + considered_combat_role = TRUE outfit = /datum/outfit/job/security plasma_outfit = /datum/outfit/plasmaman/security diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index c909342d6f..dae3094ebe 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -12,6 +12,7 @@ minimal_player_age = 7 exp_requirements = 300 exp_type = EXP_TYPE_CREW + considered_combat_role = TRUE outfit = /datum/outfit/job/warden plasma_outfit = /datum/outfit/plasmaman/warden diff --git a/code/modules/keybindings/keybind/communication.dm b/code/modules/keybindings/keybind/communication.dm index eacf8ac505..3a754ceddf 100644 --- a/code/modules/keybindings/keybind/communication.dm +++ b/code/modules/keybindings/keybind/communication.dm @@ -3,6 +3,7 @@ /datum/keybinding/client/communication/say hotkey_keys = list("CtrlT") + classic_keys = list("Unbound") name = "Say" full_name = "IC Say" clientside = "say" @@ -15,6 +16,7 @@ /datum/keybinding/client/communication/me hotkey_keys = list("CtrlM") + classic_keys = list("Unbound") name = "Me" full_name = "Me (emote)" clientside = "me" @@ -22,7 +24,6 @@ //indicators /datum/keybinding/client/communication/say_with_indicator hotkey_keys = list("T") - classic_keys = list() name = "say_with_indicator" full_name = "Say with Typing Indicator" @@ -33,7 +34,6 @@ /datum/keybinding/client/communication/me_with_indicator hotkey_keys = list("M") - classic_keys = list() name = "me_with_indicator" full_name = "Me (emote) with Typing Indicator" @@ -44,28 +44,24 @@ /datum/keybinding/client/communication/subtle hotkey_keys = list("5") - classic_keys = list() name = "Subtle" full_name = "Subtle Emote" clientside = "subtle" /datum/keybinding/client/communication/subtler hotkey_keys = list("6") - classic_keys = list() name = "Subtler" full_name = "Subtler Anti-Ghost Emote" clientside = "subtler-anti-ghost" /datum/keybinding/client/communication/whisper hotkey_keys = list("Y") - classic_keys = list() name = "Whisper" full_name = "Whisper" clientside = "whisper" /datum/keybinding/client/communication/looc hotkey_keys = list("L") - classic_keys = list() name = "LOOC" full_name = "Local Out of Character chat" clientside = "looc" diff --git a/code/modules/keybindings/keybind/movement.dm b/code/modules/keybindings/keybind/movement.dm index d3a0e98def..296b127cb4 100644 --- a/code/modules/keybindings/keybind/movement.dm +++ b/code/modules/keybindings/keybind/movement.dm @@ -124,7 +124,8 @@ return TRUE /datum/keybinding/living/hold_sprint - hotkey_keys = list("Shift") + hotkey_keys = list() + classic_keys = list() name = "hold_sprint" full_name = "Sprint (hold down)" description = "Hold down to sprint" @@ -144,7 +145,8 @@ return TRUE /datum/keybinding/living/toggle_sprint - hotkey_keys = list() + hotkey_keys = list("Shift") + classic_keys = list("Shift") name = "toggle_sprint" full_name = "Sprint (toggle)" description = "Press to toggle sprint" diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 797dbe34e5..b5f09c65ca 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -5,7 +5,7 @@ SHOULD_NOT_SLEEP(TRUE) /datum/proc/keyLoop(client/user) // Called once every frame - //SHOULD_NOT_SLEEP(TRUE) + SHOULD_NOT_SLEEP(TRUE) /client/verb/fix_macros() set name = "Fix Keybindings" @@ -22,12 +22,15 @@ full_macro_assert() // removes all the existing macros -/client/proc/erase_all_macros() +/client/proc/erase_all_macros(datum/preferences/prefs_override = prefs) var/erase_output = "" var/list/set_text = list() - for(var/macroset in SSinput.all_macrosets) - set_text += "[macroset].*" - set_text = set_text.Join(";") + if(!prefs_override) + for(var/macroset in SSinput.all_macrosets) + set_text += "[macroset].*" + set_text = set_text.Join(";") + else + set_text = prefs_override.hotkeys? "[SKIN_MACROSET_HOTKEYS].*" : "[SKIN_MACROSET_CLASSIC_INPUT].*;[SKIN_MACROSET_CLASSIC_HOTKEYS].*" var/list/macro_set = params2list(winget(src, "[set_text]", "command")) for(var/k in 1 to length(macro_set)) var/list/split_name = splittext(macro_set[k], ".") @@ -44,13 +47,6 @@ var/command = macroset[key] winset(src, "[name]-[REF(key)]", "parent=[name];name=[key];command=[command]") -/client/proc/set_macros(datum/preferences/prefs_override = prefs) - keys_held.Cut() - - apply_macro_set(SKIN_MACROSET_HOTKEYS, SSinput.macroset_hotkey) - apply_macro_set(SKIN_MACROSET_CLASSIC_HOTKEYS, SSinput.macroset_classic_hotkey) - apply_macro_set(SKIN_MACROSET_CLASSIC_INPUT, SSinput.macroset_classic_input) - /client/proc/set_hotkeys_preference(datum/preferences/prefs_override = prefs) if(prefs_override.hotkeys) winset(src, null, "map.focus=true input.background-color=[COLOR_INPUT_DISABLED] mainwindow.macro=[SKIN_MACROSET_HOTKEYS]") @@ -64,27 +60,97 @@ /client/proc/full_macro_assert(datum/preferences/prefs_override = prefs) INVOKE_ASYNC(src, .proc/do_full_macro_assert, prefs_override) // winget sleeps. +// TODO: OVERHAUL ALL OF THIS AGAIN. While this works this is flatout horrid with the "use list but also don't use lists" crap. I hate my life. /client/proc/do_full_macro_assert(datum/preferences/prefs_override = prefs) - erase_all_macros() - set_macros(prefs_override) - update_special_keybinds(prefs_override) + // First, wipe + erase_all_macros(prefs_override) + keys_held.Cut() + // First, collect sets. Make sure to COPY, as we are modifying these! + var/list/macrosets = prefs_override.hotkeys? list( + SKIN_MACROSET_HOTKEYS = SSinput.macroset_hotkey.Copy() + ) : list( + SKIN_MACROSET_CLASSIC_INPUT = SSinput.macroset_classic_input.Copy(), + SKIN_MACROSET_CLASSIC_HOTKEYS = SSinput.macroset_classic_hotkey.Copy() + ) + // Collect special clientside keybinds + var/list/clientside = update_special_keybinds(prefs_override) + // ANTI COLLISION SYSTEM: + // If hotkey, do "standard" anti collision permutation + // We fully permutate alt/ctrl/shift with the key and then subtract the key's actual binding. + // Then, we set all the permutations BUT the actual binding to nonsensical things to force BYOND to not + // be "greedy" with key matching, aka matching Shift+T for T when Shift+T isn't EXPLICITLY defined. + // This is extremely ugly, but the alternative is arguably worse (manually binding every key instead of using ANY) + if(prefs_override.hotkeys) + for(var/keybind in clientside) + var/command = clientside[keybind] + var/alt = findtext(keybind, "Alt") + if(alt) + keybind = copytext(keybind, 1, alt) + copytext(keybind, alt + 3, 0) + var/ctrl = findtext(keybind, "Ctrl") + if(ctrl) + keybind = copytext(keybind, 1, ctrl) + copytext(keybind, ctrl + 4, 0) + var/shift = findtext(keybind, "Shift") + if(shift) + keybind = copytext(keybind, 1, shift) + copytext(keybind, shift + 5, 0) + var/actual = "[alt? "Alt+" : ""][ctrl? "Ctrl+" : ""][shift? "Shift+" : ""][keybind]" + var/list/overriding = keybind_modifier_permutation(keybind, alt, ctrl, shift, TRUE) + overriding -= actual + for(var/macroset in macrosets) + var/list/the_set = macrosets[macroset] + the_set[actual] = command + for(var/i in overriding) + the_set[i] = NONSENSICAL_VERB + else + // For classic mode, we just directly set things because BYOND is so jank why do we even bother? + // What we want is to force Ctrl on for all keybinds without Ctrl or Alt set, to preserve old behavior + for(var/keybind in clientside) + var/command = clientside[keybind] + var/alt = findtext(keybind, "Alt") + if(alt) + keybind = copytext(keybind, 1, alt) + copytext(keybind, alt + 3, 0) + var/ctrl = findtext(keybind, "Ctrl") + if(ctrl) + keybind = copytext(keybind, 1, ctrl) + copytext(keybind, ctrl + 4, 0) + var/shift = findtext(keybind, "Shift") + if(shift) + keybind = copytext(keybind, 1, shift) + copytext(keybind, shift + 5, 0) + var/actual + if(!alt && !ctrl) + actual = "Ctrl+[keybind]" + else + actual = "[alt? "Alt+" : ""][ctrl? "Ctrl+" : ""][shift? "Shift+" : ""][keybind]" + macrosets[SKIN_MACROSET_CLASSIC_HOTKEYS]["[alt? "Alt+" : ""][ctrl? "Ctrl+" : ""][shift? "Shift+" : ""][keybind]"] = command + macrosets[SKIN_MACROSET_CLASSIC_INPUT][actual] = command + for(var/macroset in macrosets) + var/list/the_set = macrosets[macroset] + the_set[actual] = command + + // Lastly, set the actual macros. + for(var/macroset in macrosets) + apply_macro_set(macroset, macrosets[macroset]) + // Finally, set hotkeys. set_hotkeys_preference(prefs_override) -/client/proc/do_special_keybind(key, command, datum/preferences/prefs_override = prefs) - var/alt = findtext(key, "Alt") - if(alt) - key = copytext(key, 1, alt) + copytext(key, alt + 3, 0) - var/ctrl = findtext(key, "Ctrl") - if(ctrl) - key = copytext(key, 1, ctrl) + copytext(key, ctrl + 4, 0) - var/shift = findtext(key, "Shift") - if(shift) - key = copytext(key, 1, shift) + copytext(key, shift + 5, 0) - if(!alt && !ctrl && !shift && !prefs_override.hotkeys) - return /// DO NOT. - key = "[alt? "Alt+":""][ctrl? "Ctrl+":""][shift? "Shift+":""][key]" - for(var/macroset in SSinput.all_macrosets) - winset(src, "[macroset]-[REF(key)]", "parent=[macroset];name=[key];command=[command]") +/proc/keybind_modifier_permutation(key, alt = FALSE, ctrl = FALSE, shift = FALSE, self = TRUE) + var/list/permutations = list() + if(!shift) + permutations += "Shift" + if(!ctrl) + permutations += "Ctrl" + if(!alt) + permutations += "Alt" + // ALT + CTRL + SHIFT + . = list() + do_keybind_modifier_permutations(key, permutations, .) + if(self) + . += key + +/proc/do_keybind_modifier_permutations(key, list/permutations = list(), list/out = list()) + . = out + for(var/mod in permutations.Copy()) + permutations -= mod + . += "[mod]+[key]" + do_keybind_modifier_permutations("[mod]+[key]", permutations.Copy(), .) /** * Updates the keybinds for special keys @@ -94,12 +160,15 @@ * At the time of writing this, communication(OOC, Say, IC) require macros * Arguments: * * direct_prefs - the preference we're going to get keybinds from + * + * Returns list of special keybind in key = Mod1Mod2Mod3Key format, NOT Mod1+Mod2+Mod3+Key format. */ /client/proc/update_special_keybinds(datum/preferences/direct_prefs) var/datum/preferences/D = direct_prefs || prefs if(!D?.key_bindings) return movement_keys = list() + . = list() for(var/key in D.key_bindings) for(var/kb_name in D.key_bindings[key]) switch(kb_name) @@ -115,4 +184,4 @@ var/datum/keybinding/KB = GLOB.keybindings_by_name[kb_name] if(!KB.clientside) continue - do_special_keybind(key, KB.clientside, D) + .[key] = KB.clientside diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index 57a79553c3..2a8e0f2516 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -81,11 +81,10 @@ STOP_PROCESSING(SSmachines, src) icon_state = "coinpress0" -/obj/machinery/mineral/mint/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/mineral/mint/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Mint", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, "Mint", name) ui.open() /obj/machinery/mineral/mint/ui_data() diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index a381cc512a..99eb638ee0 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -12,6 +12,7 @@ sight = SEE_SELF move_on_shuttle = FALSE + /mob/camera/experience_pressure_difference() return @@ -23,5 +24,7 @@ /mob/camera/canUseStorage() return FALSE -/mob/camera/emote(act, m_type=1, message = null, intentional = FALSE) +/mob/camera/emote(act, m_type=1, message = null, intentional = FALSE, forced = FALSE) + if(forced) + return ..() return diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 91123c0c7f..00c22ad96d 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -16,6 +16,9 @@ //Used to make sure someone doesn't get spammed with messages if they're ineligible for roles var/ineligible_for_roles = FALSE + //is there a result we want to read from the age gate + var/age_gate_result + /mob/dead/new_player/Initialize() if(client && SSticker.state == GAME_STATE_STARTUP) var/obj/screen/splash/S = new(client, TRUE, TRUE) @@ -78,6 +81,43 @@ popup.set_content(output) popup.open(FALSE) +/mob/dead/new_player/proc/age_gate() + var/list/dat = list("
") + dat += "Enter your date of birth here, to confirm that you are over 18.
" + dat += "Your date of birth is not saved, only the fact that you are over/under 18 is.
" + dat += "
" + + dat += "" + dat += "" + dat += HrefTokenFormField() + dat += "" + dat += "" + dat += "
" + dat += "" + + winshow(src, "age_gate", TRUE) + var/datum/browser/popup = new(src, "age_gate", "
Age Gate
", 400, 250) + popup.set_content(dat.Join()) + popup.open(FALSE) + onclose(src, "age_gate") + + while(age_gate_result == null) + stoplag(1) + + popup.close() + + return age_gate_result + /mob/dead/new_player/proc/age_verify() if(CONFIG_GET(flag/age_verification) && !check_rights_for(client, R_ADMIN) && !(client.ckey in GLOB.bunker_passthrough)) //make sure they are verified if(!client.set_db_player_flags()) @@ -86,10 +126,12 @@ else var/dbflags = client.prefs.db_flags if(dbflags & DB_FLAG_AGE_CONFIRMATION_INCOMPLETE) //they have not completed age gate - var/age_verification = askuser(src, "Are you 18+", "Age Gate", "I am 18+", "I am not 18+", null, TRUE, null) + var/age_verification = age_gate() if(age_verification != 1) client.add_system_note("Automated-Age-Gate", "Failed automatic age gate process") - qdel(client) //kick the user + //ban them and kick them + AddBan(client.ckey, client.computer_id, "SYSTEM BAN - Inputted date during join verification was under 18 years of age. Contact administration on discord for verification.", "SYSTEM", FALSE, null, client.address) + qdel(client) return FALSE else //they claim to be of age, so allow them to continue and update their flags @@ -107,6 +149,45 @@ if(!client) return 0 + //don't let people get to this unless they are specifically not verified + if(href_list["Month"] && (CONFIG_GET(flag/age_verification) && !check_rights_for(client, R_ADMIN) && !(client.ckey in GLOB.bunker_passthrough))) + var/player_month = text2num(href_list["Month"]) + var/player_year = text2num(href_list["Year"]) + + var/current_time = world.realtime + var/current_month = text2num(time2text(current_time, "MM")) + var/current_year = text2num(time2text(current_time, "YYYY")) + + var/player_total_months = (player_year * 12) + player_month + + var/current_total_months = (current_year * 12) + current_month + + var/months_in_eighteen_years = 18 * 12 + + var/month_difference = current_total_months - player_total_months + if(month_difference > months_in_eighteen_years) + age_gate_result = TRUE // they're fine + else + if(month_difference < months_in_eighteen_years) + age_gate_result = FALSE + else + //they could be 17 or 18 depending on the /day/ they were born in + var/current_day = text2num(time2text(current_time, "DD")) + var/days_in_months = list(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) + if((player_year % 4) == 0) // leap year so february actually has 29 days + days_in_months[2] = 29 + var/total_days_in_player_month = days_in_months[player_month] + var/list/days = list() + for(var/number in 1 to total_days_in_player_month) + days += number + var/player_day = input(src, "What day of the month were you born in.") as anything in days + if(player_day <= current_day) + //their birthday has passed + age_gate_result = TRUE + else + //it has NOT been their 18th birthday yet + age_gate_result = FALSE + if(!age_verify()) return @@ -294,7 +375,9 @@ ready = PLAYER_NOT_READY return FALSE - var/this_is_like_playing_right = alert(src,"Are you sure you wish to observe? You will not be able to play this round!","Player Setup","Yes","No") + var/mintime = max(CONFIG_GET(number/respawn_delay), (SSticker.round_start_time + (CONFIG_GET(number/respawn_minimum_delay_roundstart) * 600)) - world.time, 0) + + var/this_is_like_playing_right = alert(src,"Are you sure you wish to observe? You will not be able to respawn for [round(mintime / 600, 0.1)] minutes!!","Player Setup","Yes","No") if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes") ready = PLAYER_NOT_READY @@ -316,6 +399,7 @@ stack_trace("There's no freaking observer landmark available on this map or you're making observers before the map is initialised") transfer_ckey(observer, FALSE) observer.client = client + observer.client.prefs?.respawn_time_of_death = world.time observer.set_ghost_appearance() if(observer.client && observer.client.prefs) observer.real_name = observer.client.prefs.real_name @@ -382,6 +466,9 @@ alert(src, "An administrator has disabled late join spawning.") return FALSE + if(!respawn_latejoin_check(notify = TRUE)) + return FALSE + var/arrivals_docked = TRUE if(SSshuttle.arrivals) close_spawn_windows() //In case we get held up @@ -445,6 +532,8 @@ GLOB.joined_player_list += character.ckey GLOB.latejoiners += character + LAZYOR(character.client.prefs.slots_joined_as, character.client.prefs.default_slot) + LAZYOR(character.client.prefs.characters_joined_as, character.real_name) if(CONFIG_GET(flag/allow_latejoin_antagonists) && humanc) //Borgs aren't allowed to be antags. Will need to be tweaked if we get true latejoin ais. if(SSshuttle.emergency) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm index 3c2c850e3c..f58788d9af 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm @@ -20,16 +20,20 @@ ckeys_allowed = list("poojawa") extra = TRUE extra_color_src = MUTCOLORS3 + matrixed_sections = MATRIX_RED_GREEN /datum/sprite_accessory/tails/mam_tails/sabresune name = "Sabresune" icon_state = "sabresune" ckeys_allowed = list("poojawa") + matrixed_sections = MATRIX_RED_GREEN /datum/sprite_accessory/tails_animated/mam_tails_animated/sabresune name = "Sabresune" icon_state = "sabresune" ckeys_allowed = list("poojawa") + color_src = MATRIXED + matrixed_sections = MATRIX_RED_GREEN /datum/sprite_accessory/mam_body_markings/sabresune name = "Sabresune" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0c57c13e3f..9493d11792 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -264,7 +264,7 @@ Transfer_mind is there to check if mob is being deleted/not going to have a body Works together with spawning an observer, noted above. */ -/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE, voluntary = FALSE) +/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE, voluntary = FALSE, cryo = FALSE) var/sig_flags = SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse, special, penalize) penalize = !(sig_flags & COMPONENT_DO_NOT_PENALIZE_GHOSTING) && (suiciding || penalize) // suicide squad. voluntary_ghosted = voluntary @@ -277,6 +277,12 @@ Works together with spawning an observer, noted above. if (client && client.prefs && client.prefs.auto_ooc) if (!(client.prefs.chat_toggles & CHAT_OOC)) client.prefs.chat_toggles ^= CHAT_OOC + if(ckey && penalize) + var/datum/preferences/P = GLOB.preferences_datums[ckey] + if(P) + P.respawn_restrictions_active = TRUE + P.respawn_time_of_death = world.time + P.respawn_did_cryo = cryo transfer_ckey(ghost, FALSE) ghost.client.init_verbs() if(penalize) @@ -423,12 +429,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "You're already stuck out of your body!") return FALSE - var/response = alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. ","Are you sure you want to stay dead?","Yes","No") + var/response = alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. THIS WILL ALSO STOP YOU FROM RESPAWNING!!!","Are you sure you want to stay dead and never respawn?","Yes","No") + if(response != "Yes") return can_reenter_corpse = FALSE - to_chat(src, "You can no longer be brought back into your body.") + client.prefs?.dnr_triggered = TRUE + to_chat(src, "You can no longer be brought back into your body or respawn.") return TRUE /mob/dead/observer/proc/notify_cloning(var/message, var/sound, var/atom/source, flashwindow = TRUE) diff --git a/code/modules/mob/dead/observer/respawn.dm b/code/modules/mob/dead/observer/respawn.dm new file mode 100644 index 0000000000..f966051ed3 --- /dev/null +++ b/code/modules/mob/dead/observer/respawn.dm @@ -0,0 +1,181 @@ +// ADMIN VERBS BEGIN +/** + * Fully returns a player to lobby, allowing them to bypass all respawn restrictions + * Works on ghosts or new players (lobby players) + * If a lobby player is selected, their restrictions are removed. + */ +/client/proc/admin_cmd_respawn_return_to_lobby() + set name = "Respawn Player (Unrestricted)" + set desc = "Gives a player an unrestricted respawn, resetting all respawn restrictions for them." + set category = "Admin" + + var/list/mob/valid = list() + for(var/mob/dead/observer/I in GLOB.dead_mob_list) + if(!I.client) + continue + valid["[I.ckey] - Observing: [I]"] = I.ckey + for(var/mob/dead/new_player/I in GLOB.dead_mob_list) + if(!I.client || !I.client.prefs.respawn_restrictions_active) + continue + valid["[I.ckey] - IN LOBBY"] = I.ckey + if(!valid.len) + to_chat(src, "No player found that is either a ghost or is in lobby with restrictions active.") + return + var/ckey = valid[input(src, "Choose a player (only showing logged in players who have restrictions)", "Unrestricted Respawn") as null|anything in valid] + var/client/player = GLOB.directory[ckey] + if(!player) + to_chat(src, "Client not found.") + return + var/mob/M = player.mob + if(istype(M, /mob/dead/observer)) + var/mob/dead/observer/O = M + var/confirm = alert(src, "Send [O]([ckey]) back to the lobby without respawn restrictions?", "Send to Lobby", "Yes", "No") + if(confirm != "Yes") + return + message_admins("[key_name_admin(src)] gave [key_name_admin(O)] a full respawn and sent them back to the lobby.") + log_admin("[key_name(src)] gave [key_name(O)] a full respawn and sent them back to the lobby.") + to_chat(O, "You have been given a full respawn.") + O.do_respawn(FALSE) + O.client.prefs.dnr_triggered = FALSE + else if(istype(M, /mob/dead/new_player)) + var/mob/dead/new_player/NP = M + var/confirm = alert(src, "Remove [NP]'s respawn restrictions?", "Remove Restrictions", "Yes", "No") + if(confirm != "Yes") + return + message_admins("[key_name_admin(src)] removed [ckey]'s respawn restrictions.") + log_admin("[key_name(src)] removed [ckey]'s respawn restrictions") + NP.client.prefs.respawn_restrictions_active = FALSE + NP.client.prefs.dnr_triggered = FALSE + to_chat(NP, "Your respawn restrictions have been removed.") + else + CRASH("Invalid mobtype") + +/** + * Allows a ghost to bypass respawn delay without lifting respawn restrictions + */ +/client/proc/admin_cmd_remove_ghost_respawn_timer() + set name = "Remove Respawn Timer for Player" + set desc = "Removes a player's respawn timer without removing their respawning restrictions." + set category = "Admin" + + var/list/mob/dead/observer/valid = list() + for(var/mob/dead/observer/I in GLOB.dead_mob_list) + if(!I.client) + continue + valid["[I.ckey] - [I.name]"] = I + + if(!valid.len) + to_chat(src, "No logged in ghosts found.") + return + var/mob/dead/observer/O = valid[input(src, "Choose a player (only showing logged in)", "Remove Respawn Timer") as null|anything in valid] + + if(!O.client) + to_chat(src, "[O] has no client.") + return + var/timeleft = O.time_left_to_respawn() + if(!timeleft) + to_chat(src, "[O] can already respawn.") + return + message_admins("[key_name_admin(src)] removed [key_name_admin(O)]'s respawn timer.") + log_admin("[key_name(src)] removed [key_name(O)]'s respawn timer.") + O.client.prefs.respawn_time_of_death = -INFINITY + to_chat(O, "Your respawn timer has been removed.") + +// ADMIN VERBS END + +/** + * Checks if we can latejoin on the currently selected slot, taking into account respawn status. + */ +/mob/dead/new_player/proc/respawn_latejoin_check(notify = FALSE) + if(!client.prefs.respawn_restrictions_active) + return TRUE + var/can_same_person = CONFIG_GET(flag/allow_same_character_respawn) + if(can_same_person) + return TRUE + var/nameless = client.prefs.nameless + var/randomname = client.prefs.be_random_name + var/randombody = client.prefs.be_random_body + if(randombody && (nameless || randomname)) + return TRUE // somewhat unrecognizable + if(client.prefs.slots_joined_as && (client.prefs.default_slot in client.prefs.slots_joined_as)) + if(notify) + to_chat(src, "You cannot respawn on the same slot. Joined slots: [english_list(client.prefs.slots_joined_as)].") + return FALSE + if((!nameless && !randomname) && (client.prefs.characters_joined_as && (client.prefs.real_name in client.prefs.characters_joined_as))) + if(notify) + to_chat(src, "You cannot respawn on the same character. Joined slots: [english_list(client.prefs.characters_joined_as)].") + return FALSE + return TRUE + +/** + * Attempts to respawn. + */ +/mob/dead/observer/verb/respawn() + set name = "Respawn" + set category = "OOC" + + if(!CONFIG_GET(flag/respawns_enabled)) + to_chat(src, "Respawns are disabled in configuration.") + return + + if(client.prefs.dnr_triggered) + to_chat(src, "You cannot respawn as you have enabled DNR.") + return + + var/roundstart_timeleft = (SSticker.round_start_time + (CONFIG_GET(number/respawn_minimum_delay_roundstart) * 600)) - world.time + if(roundstart_timeleft > 0) + to_chat(src, "It's been too short of a time since the round started! Please wait [CEILING(roundstart_timeleft / 600, 0.1)] more minutes.") + return + + var/list/banned_modes = CONFIG_GET(keyed_list/respawn_chaos_gamemodes) + if(SSticker.mode && banned_modes[lowertext(SSticker.mode.config_tag)]) + to_chat(src, "The current mode tag, [SSticker.mode.config_tag], is not eligible for respawn.") + return + + var/timeleft = time_left_to_respawn() + if(timeleft) + to_chat(src, "It's been too short of a time since you died/observed! Please wait [round(timeleft / 600, 0.1)] more minutes.") + return + do_respawn(TRUE) + +/** + * Gets time left until we can respawn. Returns 0 if we can respawn now. + */ +/mob/dead/observer/verb/time_left_to_respawn() + ASSERT(client) + return max(0, ((client.prefs.respawn_did_cryo? CONFIG_GET(number/respawn_delay_cryo) : CONFIG_GET(number/respawn_delay)) MINUTES + client.prefs.respawn_time_of_death) - world.time) + +/** + * Handles respawning + */ +/mob/dead/observer/proc/do_respawn(penalize) + if(!client) + return + if(isnull(penalize)) + penalize = client.prefs.respawn_restrictions_active + client.prefs.respawn_restrictions_active = penalize + + to_chat(src, "You have been respawned to the lobby. \ + Remember to take heed of rules regarding round knowledge - notably, that ALL past lives are forgotten. \ + Any character you join as has NO knowledge of round events unless specified otherwise by an admin.") + + message_admins("[key_name_admin(src)] was respawned to lobby [penalize? "with" : "without"] restrictions.") + log_game("[key_name(src)] was respawned to lobby [penalize? "with" : "without"] restrictions.") + transfer_to_lobby() + +/** + * Actual proc that removes us and puts us back on lobby + */ +/mob/dead/observer/proc/transfer_to_lobby() + if(!client) // if no one's in us we can just be deleted + qdel(src) + return + client.screen.Cut() + client.view_size.resetToDefault() + client.generate_clickcatcher() + client.apply_clickcatcher() + client.view_size.setDefault(getScreenSize(client.prefs.widescreenpref)) + client.view_size.resetToDefault() + + var/mob/dead/new_player/M = new /mob/dead/new_player + M.ckey = ckey diff --git a/code/modules/mob/innate_abilities.dm b/code/modules/mob/innate_abilities.dm new file mode 100644 index 0000000000..aa2a924abe --- /dev/null +++ b/code/modules/mob/innate_abilities.dm @@ -0,0 +1,57 @@ +/** + * Sets an ability property + */ +/mob/proc/set_ability_property(ability, property, value) + LAZYINITLIST(ability_properties) + LAZYINITLIST(ability_properties[ability]) + ability_properties[ability][property] = value + +/** + * Gets an ability property + */ +/mob/proc/get_ability_property(ability, property) + return ability_properties && ability_properties[ability] && ability_properties[ability][property] + +GLOBAL_LIST_INIT(innate_ability_typepaths, all_innate_ability_typepaths()) + +/proc/all_innate_ability_typepaths() + return list( + INNATE_ABILITY_HUMANOID_CUSTOMIZATION = /datum/action/innate/ability/humanoid_customization, + INNATE_ABILITY_SLIME_BLOBFORM = /datum/action/innate/ability/slime_blobform, + INNATE_ABILITY_LIMB_REGROWTH = /datum/action/innate/ability/limb_regrowth + ) + +/** + * Grants an ability from a source + */ +/mob/proc/grant_ability_from_source(list/abilities, source) + if(!islist(abilities)) + abilities = list(abilities) + LAZYINITLIST(ability_actions) + LAZYINITLIST(innate_abilities) + for(var/ability in abilities) + LAZYINITLIST(innate_abilities[ability]) + innate_abilities[ability] |= source + if(ability_actions[ability]) + continue + var/path = GLOB.innate_ability_typepaths[ability] + var/datum/action/innate/ability/A = new path + ability_actions[ability] = A + A.Grant(src) + +/** + * Removes an ability from a source + */ +/mob/proc/remove_ability_from_source(list/abilities, source) + if(!islist(abilities)) + abilities = list(abilities) + if(!length(innate_abilities)) + return + for(var/ability in abilities) + if(!length(innate_abilities[ability])) + continue + innate_abilities[ability] -= source + if(!length(innate_abilities[ability])) + innate_abilities -= ability + qdel(ability_actions[ability]) + ability_actions -= ability diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 811c67cfe2..45a0d82d2c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -604,7 +604,7 @@ ENABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT) filters += CIT_FILTER_STAMINACRIT update_mobility() - if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_CRIT) + if((combat_flags & COMBAT_FLAG_HARD_STAMCRIT) && total_health <= STAMINA_CRIT_REMOVAL_THRESHOLD) to_chat(src, "You don't feel nearly as exhausted anymore.") DISABLE_BITFIELD(combat_flags, COMBAT_FLAG_HARD_STAMCRIT) filters -= CIT_FILTER_STAMINACRIT diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 89a4570e8d..2e8641b43e 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -14,6 +14,7 @@ blocks_emissive = EMISSIVE_BLOCK_UNIQUE block_parry_data = /datum/block_parry_data/unarmed/human + default_block_parry_data = /datum/block_parry_data/unarmed/pugilist //Hair colour and style var/hair_color = "000" @@ -98,20 +99,54 @@ parry_failed_clickcd_duration = 0.4 parry_data = list( // yeah it's snowflake - "HUMAN_PARRY_STAGGER" = 3 SECONDS, - "HUMAN_PARRY_PUNCH" = TRUE, - "HUMAN_PARRY_MININUM_EFFICIENCY" = 0.9 + "UNARMED_PARRY_STAGGER" = 3 SECONDS, + "UNARMED_PARRY_PUNCH" = TRUE, + "UNARMED_PARRY_MININUM_EFFICIENCY" = 90 ) -/mob/living/carbon/human/on_active_parry(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/block_return, parry_efficiency, parry_time) +/mob/living/on_active_parry(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/block_return, parry_efficiency, parry_time) var/datum/block_parry_data/D = return_block_parry_datum(block_parry_data) + . = ..() if(!owner.Adjacent(attacker)) - return ..() - if(parry_efficiency < D.parry_data["HUMAN_PARRY_MINIMUM_EFFICIENCY"]) - return ..() + return + if(parry_efficiency < D.parry_data["UNARMED_PARRY_MINIMUM_EFFICIENCY"]) + return visible_message("[src] strikes back perfectly at [attacker], staggering them!") - if(D.parry_data["HUMAN_PARRY_PUNCH"]) + if(D.parry_data["UNARMED_PARRY_PUNCH"]) UnarmedAttack(attacker, TRUE, INTENT_HARM, ATTACK_IS_PARRY_COUNTERATTACK | ATTACK_IGNORE_ACTION | ATTACK_IGNORE_CLICKDELAY | NO_AUTO_CLICKDELAY_HANDLING) var/mob/living/L = attacker if(istype(L)) - L.Stagger(D.parry_data["HUMAN_PARRY_STAGGER"]) + L.Stagger(D.parry_data["UNARMED_PARRY_STAGGER"]) + +/// Unarmed parry data for pugilists +/datum/block_parry_data/unarmed/pugilist + parry_respect_clickdelay = FALSE + parry_stamina_cost = 4 + parry_attack_types = ATTACK_TYPE_UNARMED | ATTACK_TYPE_PROJECTILE | ATTACK_TYPE_TACKLE | ATTACK_TYPE_THROWN | ATTACK_TYPE_MELEE + parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK | PARRY_LOCK_ATTACKING + + parry_time_windup = 0 + parry_time_spindown = 0 + parry_time_active = 5 + + parry_time_perfect = 1.5 + parry_time_perfect_leeway = 1.5 + parry_imperfect_falloff_percent = 20 + parry_efficiency_perfect = 100 + parry_efficiency_perfect_override = list( + ATTACK_TYPE_PROJECTILE_TEXT = 60, + ) + + parry_efficiency_considered_successful = 0.01 + parry_efficiency_to_counterattack = 0.01 + parry_max_attacks = INFINITY + parry_failed_cooldown_duration = 1.5 SECONDS + parry_failed_stagger_duration = 0 + parry_cooldown = 0 + parry_failed_clickcd_duration = 0.8 + + parry_data = list( // yeah it's snowflake + "UNARMED_PARRY_STAGGER" = 3 SECONDS, + "UNARMED_PARRY_PUNCH" = TRUE, + "UNARMED_PARRY_MININUM_EFFICIENCY" = 90 + ) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 97c40c96d7..509633c0d5 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -100,8 +100,3 @@ if(dna.species.space_move(src)) return TRUE return ..() - -/mob/living/carbon/human/CanPass(atom/movable/mover, turf/target) - if(dna.species.species_pass_check()) - return TRUE - return ..() diff --git a/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm b/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm new file mode 100644 index 0000000000..5d2693915d --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/blobform.dm @@ -0,0 +1,112 @@ + +/datum/action/innate/ability/slime_blobform + name = "Puddle Transformation" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimepuddle" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + required_mobility_flags = MOBILITY_STAND + var/is_puddle = FALSE + var/in_transformation_duration = 12 + var/out_transformation_duration = 7 + var/puddle_into_effect = /obj/effect/temp_visual/slime_puddle + var/puddle_from_effect = /obj/effect/temp_visual/slime_puddle/reverse + var/puddle_icon = 'icons/mob/mob.dmi' + var/puddle_state = "puddle" + var/mutable_appearance/tracked_overlay + var/datum/component/squeak/squeak + var/transforming = FALSE + var/last_use + +/datum/action/innate/ability/slime_blobform/IsAvailable() + if(!transforming) + return ..() + else + return FALSE + +/datum/action/innate/ability/slime_blobform/Remove(mob/M) + if(is_puddle) + detransform() + return ..() + +/datum/action/innate/ability/slime_blobform/Activate() + var/mob/living/carbon/human/H = owner + //if they have anything stuck to their hands, we immediately say 'no' and return + for(var/obj/item/I in H.held_items) + if(HAS_TRAIT(I, TRAIT_NODROP)) + to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") + return + if(IsAvailable()) + transforming = TRUE + UpdateButtonIcon() + var/mutcolor = owner.get_ability_property(INNATE_ABILITY_SLIME_BLOBFORM, PROPERTY_BLOBFORM_COLOR) || ("#" + H.dna.features["mcolor"]) + if(!is_puddle) + if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle + is_puddle = TRUE //so we know which transformation to use when its used + ADD_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT) + owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite + var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) + puddle_effect.color = mutcolor + H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming + + //series of traits that make up the puddle behaviour + ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) + H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed + + H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) + + H.layer -= 1 //go one layer down so people go over you + ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you + squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you + + //if the user is a changeling, retract their sting + H.unset_sting() + + sleep(in_transformation_duration) //wait for animation to end + + //set the puddle overlay up + var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) + puddle_overlay.color = mutcolor + tracked_overlay = puddle_overlay + owner.add_overlay(puddle_overlay) + + transforming = FALSE + UpdateButtonIcon() + else + detransform() + else + to_chat(owner, "You need to be standing up to do this!") //just assume they're a slime because it's such a weird edgecase to have it and not be one (it shouldn't even be possible) + +/datum/action/innate/ability/slime_blobform/proc/detransform() + var/mob/living/carbon/human/H = owner + //like the above, but reverse everything done! + H.cut_overlay(tracked_overlay) + var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) + puddle_effect.color = tracked_overlay.color + H.Stun(out_transformation_duration, ignore_canstun = TRUE) + sleep(out_transformation_duration) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_HUMAN_NO_RENDER, SLIMEPUDDLE_TRAIT) + H.update_disabled_bodyparts(silent = TRUE) + H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) + H.layer += 1 //go one layer back above! + DISABLE_BITFIELD(H.pass_flags, PASSMOB) + is_puddle = FALSE + if(squeak) + squeak.RemoveComponent() + transforming = FALSE + UpdateButtonIcon() diff --git a/code/modules/mob/living/carbon/human/innate_abilities/customization.dm b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm new file mode 100644 index 0000000000..363f6ecbb2 --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/customization.dm @@ -0,0 +1,208 @@ +/datum/action/innate/ability/humanoid_customization + name = "Alter Form" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "alter_form" //placeholder + icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/ability/humanoid_customization/Activate() + if(owner.get_ability_property(INNATE_ABILITY_HUMANOID_CUSTOMIZATION, PROPERTY_CUSTOMIZATION_SILENT)) + owner.visible_message("[owner] gains a look of \ + concentration while standing perfectly still.\ + Their body seems to shift and starts getting more goo-like.", + "You focus intently on altering your body while \ + standing perfectly still...") + change_form() + +/////// +/////// NOTICE: This currently doens't support skin tone - if anyone wants to add this to non slimes, it's up to YOU to do this. +////// (someone should also add genital color switching, more mutant color selection) +///// maybe just make this entire thing tgui based. maybe. +/////// + +/datum/action/innate/ability/humanoid_customization/proc/change_form() + var/mob/living/carbon/human/H = owner + var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel") + + if(select_alteration == "Body Color") + var/new_color = input(owner, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null + if(new_color) + var/temp_hsv = RGBtoHSV(new_color) + if(ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright + H.dna.features["mcolor"] = sanitize_hexcolor(new_color, 6) + H.update_body() + H.update_hair() + else + to_chat(H, "Invalid color. Your color is not bright enough.") + else if(select_alteration == "Hair Style") + if(H.gender == MALE) + var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list + if(new_style) + H.facial_hair_style = new_style + else + H.facial_hair_style = "Shaved" + //handle normal hair + var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list + if(new_style) + H.hair_style = new_style + H.update_hair() + else if (select_alteration == "Genitals") + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") + switch(operation) + if("add sexual organ") + var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list + if(!new_organ) + return + H.give_genital(GLOB.genitals_list[new_organ]) + + if("remove sexual organ") + var/list/organs = list() + for(var/obj/item/organ/genital/X in H.internal_organs) + var/obj/item/organ/I = X + organs["[I.name] ([I.type])"] = I + var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs + var/obj/item/organ/genital/G = organs[O] + if(!G) + return + G.forceMove(get_turf(H)) + qdel(G) + H.update_genitals() + + else if (select_alteration == "Ears") + var/list/snowflake_ears_list = list("Normal" = null) + for(var/path in GLOB.mam_ears_list) + var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_ears_list[S.name] = path + var/new_ears + new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list + if(new_ears) + H.dna.features["mam_ears"] = new_ears + H.update_body() + + else if (select_alteration == "Snout") + var/list/snowflake_snouts_list = list("Normal" = null) + for(var/path in GLOB.mam_snouts_list) + var/datum/sprite_accessory/snouts/mam_snouts/instance = GLOB.mam_snouts_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_snouts_list[S.name] = path + var/new_snout + new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list + if(new_snout) + H.dna.features["mam_snouts"] = new_snout + H.update_body() + + else if (select_alteration == "Markings") + var/list/snowflake_markings_list = list("None") + for(var/path in GLOB.mam_body_markings_list) + var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_markings_list[S.name] = path + var/new_mam_body_markings + new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list + if(new_mam_body_markings) + H.dna.features["mam_body_markings"] = new_mam_body_markings + for(var/X in H.bodyparts) //propagates the markings changes + var/obj/item/bodypart/BP = X + BP.update_limb(FALSE, H) + H.update_body() + + else if (select_alteration == "Tail") + var/list/snowflake_tails_list = list("Normal" = null) + for(var/path in GLOB.mam_tails_list) + var/datum/sprite_accessory/tails/mam_tails/instance = GLOB.mam_tails_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_tails_list[S.name] = path + var/new_tail + new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list + if(new_tail) + H.dna.features["mam_tail"] = new_tail + if(new_tail != "None") + H.dna.features["taur"] = "None" + H.update_body() + + else if (select_alteration == "Taur body") + var/list/snowflake_taur_list = list("Normal" = null) + for(var/path in GLOB.taur_list) + var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] + if(istype(instance, /datum/sprite_accessory)) + var/datum/sprite_accessory/S = instance + if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) + snowflake_taur_list[S.name] = path + var/new_taur + new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list + if(new_taur) + H.dna.features["taur"] = new_taur + if(new_taur != "None") + H.dna.features["mam_tail"] = "None" + H.update_body() + + else if (select_alteration == "Penis") + for(var/obj/item/organ/genital/penis/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list + if(new_shape) + H.dna.features["cock_shape"] = new_shape + H.update_genitals() + H.give_genital(/obj/item/organ/genital/testicles) + H.give_genital(/obj/item/organ/genital/penis) + H.apply_overlay() + + + else if (select_alteration == "Vagina") + for(var/obj/item/organ/genital/vagina/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list + if(new_shape) + H.dna.features["vag_shape"] = new_shape + H.update_genitals() + H.give_genital(/obj/item/organ/genital/womb) + H.give_genital(/obj/item/organ/genital/vagina) + H.apply_overlay() + + else if (select_alteration == "Penis Length") + for(var/obj/item/organ/genital/penis/X in H.internal_organs) + qdel(X) + var/min_D = CONFIG_GET(number/penis_min_inches_prefs) + var/max_D = CONFIG_GET(number/penis_max_inches_prefs) + var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null + if(new_length) + H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D) + H.update_genitals() + H.apply_overlay() + H.give_genital(/obj/item/organ/genital/testicles) + H.give_genital(/obj/item/organ/genital/penis) + + else if (select_alteration == "Breast Size") + for(var/obj/item/organ/genital/breasts/X in H.internal_organs) + qdel(X) + var/new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in CONFIG_GET(keyed_list/breasts_cups_prefs) + if(new_size) + H.dna.features["breasts_size"] = new_size + H.update_genitals() + H.apply_overlay() + H.give_genital(/obj/item/organ/genital/breasts) + + else if (select_alteration == "Breast Shape") + for(var/obj/item/organ/genital/breasts/X in H.internal_organs) + qdel(X) + var/new_shape + new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list + if(new_shape) + H.dna.features["breasts_shape"] = new_shape + H.update_genitals() + H.apply_overlay() + H.give_genital(/obj/item/organ/genital/breasts) + + else + return diff --git a/code/modules/mob/living/carbon/human/innate_abilities/limb_regeneration.dm b/code/modules/mob/living/carbon/human/innate_abilities/limb_regeneration.dm new file mode 100644 index 0000000000..ce36397c91 --- /dev/null +++ b/code/modules/mob/living/carbon/human/innate_abilities/limb_regeneration.dm @@ -0,0 +1,49 @@ + +/datum/action/innate/ability/limb_regrowth + name = "Regenerate Limbs" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimeheal" + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + required_mobility_flags = NONE + +/datum/action/innate/ability/limb_regrowth/IsAvailable(silent = FALSE) + if(..()) + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + return 0 + var/mode = H.get_ability_property(INNATE_ABILITY_LIMB_REGROWTH, PROPERTY_LIMB_REGROWTH_USAGE_TYPE) + switch(mode) + if(REGROWTH_USES_BLOOD) + if(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) + return TRUE + else + return FALSE + return 0 + +/datum/action/innate/ability/limb_regrowth/Activate() + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + to_chat(H, "You feel intact enough as it is.") + return + to_chat(H, "You focus intently on your missing [limbs_to_heal.len >= 2 ? "limbs" : "limb"]...") + var/mode = H.get_ability_property(INNATE_ABILITY_LIMB_REGROWTH, PROPERTY_LIMB_REGROWTH_USAGE_TYPE) + switch(mode) + if(REGROWTH_USES_BLOOD) + if(H.blood_volume >= 40*limbs_to_heal.len+(BLOOD_VOLUME_OKAY*H.blood_ratio)) + H.regenerate_limbs() + H.blood_volume -= 40*limbs_to_heal.len + to_chat(H, "...and after a moment you finish reforming!") + return + else if(H.blood_volume >= 40)//We can partially heal some limbs + while(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) + var/healed_limb = pick(limbs_to_heal) + H.regenerate_limb(healed_limb) + limbs_to_heal -= healed_limb + H.blood_volume -= 40 + to_chat(H, "...but there is not enough of you to fix everything! You must attain more mass to heal completely!") + return + to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") + diff --git a/code/modules/mob/living/carbon/human/physiology.dm b/code/modules/mob/living/carbon/human/physiology.dm index 22c197f7de..7f732df960 100644 --- a/code/modules/mob/living/carbon/human/physiology.dm +++ b/code/modules/mob/living/carbon/human/physiology.dm @@ -7,6 +7,7 @@ var/oxy_mod = 1 // % of oxygen damage taken from all sources var/clone_mod = 1 // % of clone damage taken from all sources var/stamina_mod = 1 // % of stamina damage taken from all sources + var/stamina_buffer_mod = 1 // % of stamina buffer var/brain_mod = 1 // % of brain damage taken from all sources var/pressure_mod = 1 // % of brute damage taken from low or high pressure (stacks with brute_mod) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 2eb68fe30d..94d7e84c6b 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -176,6 +176,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) //Called when cloning, copies some vars that should be kept /datum/species/proc/copy_properties_from(datum/species/old_species) mutant_bodyparts["limbs_id"] = old_species.mutant_bodyparts["limbs_id"] + eye_type = old_species.eye_type + mutanttongue = old_species.mutanttongue return //Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced. @@ -2000,14 +2002,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(HAS_BONE in species_traits) . |= BIO_JUST_BONE -//a check for if you should render any overlays or not -/datum/species/proc/should_render(mob/living/carbon/human/H) - return TRUE - -//a check for if you want to forcibly make CanPass return TRUE for the mob with this species -/datum/species/proc/species_pass_check() - return FALSE - ///////////// //BREATHING// ///////////// diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index ecac5fda10..988bf81f57 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -15,9 +15,6 @@ exotic_bloodtype = "GEL" exotic_blood_color = "BLOOD_COLOR_SLIME" damage_overlay_type = "" - var/datum/action/innate/regenerate_limbs/regenerate_limbs - var/datum/action/innate/slime_change/slime_change - var/datum/action/innate/slime_puddle/slime_puddle liked_food = TOXIC | MEAT disliked_food = null toxic_food = ANTITOXIC @@ -37,27 +34,19 @@ icon_state = "brain-slime" /datum/species/jelly/on_species_loss(mob/living/carbon/C) - if(slime_puddle && slime_puddle.is_puddle) - slime_puddle.Activate() - if(regenerate_limbs) - regenerate_limbs.Remove(C) - if(slime_change) - slime_change.Remove(C) - if(slime_puddle) - slime_puddle.Remove(C) C.faction -= "slime" + if(ishuman(C)) + var/mob/living/carbon/human/H = C + H.remove_ability_from_source(list(INNATE_ABILITY_SLIME_BLOBFORM, INNATE_ABILITY_LIMB_REGROWTH, INNATE_ABILITY_HUMANOID_CUSTOMIZATION), ABILITY_SOURCE_SPECIES) ..() C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) - regenerate_limbs = new - regenerate_limbs.Grant(C) - slime_change = new - slime_change.Grant(C) - slime_puddle = new - slime_puddle.Grant(C) + var/mob/living/carbon/human/H = C + H.grant_ability_from_source(list(INNATE_ABILITY_SLIME_BLOBFORM, INNATE_ABILITY_LIMB_REGROWTH, INNATE_ABILITY_HUMANOID_CUSTOMIZATION), ABILITY_SOURCE_SPECIES) + H.set_ability_property(INNATE_ABILITY_LIMB_REGROWTH, PROPERTY_LIMB_REGROWTH_USAGE_TYPE, REGROWTH_USES_BLOOD) C.faction |= "slime" /datum/species/jelly/handle_body(mob/living/carbon/human/H) @@ -65,18 +54,6 @@ //update blood color to body color exotic_blood_color = "#" + H.dna.features["mcolor"] -/datum/species/jelly/should_render() - if(slime_puddle && slime_puddle.is_puddle) - return FALSE - else - return ..() - -/datum/species/jelly/species_pass_check() - if(slime_puddle && slime_puddle.is_puddle) - return TRUE - else - return ..() - /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers return @@ -94,8 +71,6 @@ to_chat(H, "You feel drained!") if(H.blood_volume < (BLOOD_VOLUME_BAD*H.blood_ratio)) Cannibalize_Body(H) - if(regenerate_limbs) - regenerate_limbs.UpdateButtonIcon() /datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H) var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs() @@ -111,47 +86,6 @@ qdel(consumed_limb) H.blood_volume += 20 -/datum/action/innate/regenerate_limbs - name = "Regenerate Limbs" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimeheal" - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - required_mobility_flags = NONE - -/datum/action/innate/regenerate_limbs/IsAvailable(silent = FALSE) - if(..()) - var/mob/living/carbon/human/H = owner - var/list/limbs_to_heal = H.get_missing_limbs() - if(limbs_to_heal.len < 1) - return 0 - if(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) - return 1 - return 0 - -/datum/action/innate/regenerate_limbs/Activate() - var/mob/living/carbon/human/H = owner - var/list/limbs_to_heal = H.get_missing_limbs() - if(limbs_to_heal.len < 1) - to_chat(H, "You feel intact enough as it is.") - return - to_chat(H, "You focus intently on your missing [limbs_to_heal.len >= 2 ? "limbs" : "limb"]...") - if(H.blood_volume >= 40*limbs_to_heal.len+(BLOOD_VOLUME_OKAY*H.blood_ratio)) - H.regenerate_limbs() - H.blood_volume -= 40*limbs_to_heal.len - to_chat(H, "...and after a moment you finish reforming!") - return - else if(H.blood_volume >= 40)//We can partially heal some limbs - while(H.blood_volume >= (BLOOD_VOLUME_OKAY*H.blood_ratio)+40) - var/healed_limb = pick(limbs_to_heal) - H.regenerate_limb(healed_limb) - limbs_to_heal -= healed_limb - H.blood_volume -= 40 - to_chat(H, "...but there is not enough of you to fix everything! You must attain more mass to heal completely!") - return - to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") - - ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. @@ -482,314 +416,6 @@ allowed_limb_ids = list(SPECIES_SLIME,SPECIES_STARGAZER,SPECIES_SLIME_LUMI) -/datum/action/innate/slime_change - name = "Alter Form" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "alter_form" //placeholder - icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - -/datum/action/innate/slime_change/Activate() - var/mob/living/carbon/human/H = owner - if(!isjellyperson(H)) - return - else - H.visible_message("[owner] gains a look of \ - concentration while standing perfectly still.\ - Their body seems to shift and starts getting more goo-like.", - "You focus intently on altering your body while \ - standing perfectly still...") - change_form() - -/datum/action/innate/slime_change/proc/change_form() - var/mob/living/carbon/human/H = owner - var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Body Color","Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel") - - if(select_alteration == "Body Color") - var/new_color = input(owner, "Choose your skin color:", "Race change","#"+H.dna.features["mcolor"]) as color|null - if(new_color) - var/temp_hsv = RGBtoHSV(new_color) - if(ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright - H.dna.features["mcolor"] = sanitize_hexcolor(new_color, 6) - H.update_body() - H.update_hair() - else - to_chat(H, "Invalid color. Your color is not bright enough.") - else if(select_alteration == "Hair Style") - if(H.gender == MALE) - var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list - if(new_style) - H.facial_hair_style = new_style - else - H.facial_hair_style = "Shaved" - //handle normal hair - var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list - if(new_style) - H.hair_style = new_style - H.update_hair() - else if (select_alteration == "Genitals") - var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") - switch(operation) - if("add sexual organ") - var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list - if(!new_organ) - return - H.give_genital(GLOB.genitals_list[new_organ]) - - if("remove sexual organ") - var/list/organs = list() - for(var/obj/item/organ/genital/X in H.internal_organs) - var/obj/item/organ/I = X - organs["[I.name] ([I.type])"] = I - var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs - var/obj/item/organ/genital/G = organs[O] - if(!G) - return - G.forceMove(get_turf(H)) - qdel(G) - H.update_genitals() - - else if (select_alteration == "Ears") - var/list/snowflake_ears_list = list("Normal" = null) - for(var/path in GLOB.mam_ears_list) - var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_ears_list[S.name] = path - var/new_ears - new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list - if(new_ears) - H.dna.features["mam_ears"] = new_ears - H.update_body() - - else if (select_alteration == "Snout") - var/list/snowflake_snouts_list = list("Normal" = null) - for(var/path in GLOB.mam_snouts_list) - var/datum/sprite_accessory/snouts/mam_snouts/instance = GLOB.mam_snouts_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_snouts_list[S.name] = path - var/new_snout - new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list - if(new_snout) - H.dna.features["mam_snouts"] = new_snout - H.update_body() - - else if (select_alteration == "Markings") - var/list/snowflake_markings_list = list("None") - for(var/path in GLOB.mam_body_markings_list) - var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_markings_list[S.name] = path - var/new_mam_body_markings - new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list - if(new_mam_body_markings) - H.dna.features["mam_body_markings"] = new_mam_body_markings - for(var/X in H.bodyparts) //propagates the markings changes - var/obj/item/bodypart/BP = X - BP.update_limb(FALSE, H) - H.update_body() - - else if (select_alteration == "Tail") - var/list/snowflake_tails_list = list("Normal" = null) - for(var/path in GLOB.mam_tails_list) - var/datum/sprite_accessory/tails/mam_tails/instance = GLOB.mam_tails_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_tails_list[S.name] = path - var/new_tail - new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list - if(new_tail) - H.dna.features["mam_tail"] = new_tail - if(new_tail != "None") - H.dna.features["taur"] = "None" - H.update_body() - - else if (select_alteration == "Taur body") - var/list/snowflake_taur_list = list("Normal" = null) - for(var/path in GLOB.taur_list) - var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey))) - snowflake_taur_list[S.name] = path - var/new_taur - new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list - if(new_taur) - H.dna.features["taur"] = new_taur - if(new_taur != "None") - H.dna.features["mam_tail"] = "None" - H.update_body() - - else if (select_alteration == "Penis") - for(var/obj/item/organ/genital/penis/X in H.internal_organs) - qdel(X) - var/new_shape - new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list - if(new_shape) - H.dna.features["cock_shape"] = new_shape - H.update_genitals() - H.give_genital(/obj/item/organ/genital/testicles) - H.give_genital(/obj/item/organ/genital/penis) - H.apply_overlay() - - - else if (select_alteration == "Vagina") - for(var/obj/item/organ/genital/vagina/X in H.internal_organs) - qdel(X) - var/new_shape - new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list - if(new_shape) - H.dna.features["vag_shape"] = new_shape - H.update_genitals() - H.give_genital(/obj/item/organ/genital/womb) - H.give_genital(/obj/item/organ/genital/vagina) - H.apply_overlay() - - else if (select_alteration == "Penis Length") - for(var/obj/item/organ/genital/penis/X in H.internal_organs) - qdel(X) - var/min_D = CONFIG_GET(number/penis_min_inches_prefs) - var/max_D = CONFIG_GET(number/penis_max_inches_prefs) - var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null - if(new_length) - H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D) - H.update_genitals() - H.apply_overlay() - H.give_genital(/obj/item/organ/genital/testicles) - H.give_genital(/obj/item/organ/genital/penis) - - else if (select_alteration == "Breast Size") - for(var/obj/item/organ/genital/breasts/X in H.internal_organs) - qdel(X) - var/new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in CONFIG_GET(keyed_list/breasts_cups_prefs) - if(new_size) - H.dna.features["breasts_size"] = new_size - H.update_genitals() - H.apply_overlay() - H.give_genital(/obj/item/organ/genital/breasts) - - else if (select_alteration == "Breast Shape") - for(var/obj/item/organ/genital/breasts/X in H.internal_organs) - qdel(X) - var/new_shape - new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list - if(new_shape) - H.dna.features["breasts_shape"] = new_shape - H.update_genitals() - H.apply_overlay() - H.give_genital(/obj/item/organ/genital/breasts) - - else - return - -/datum/action/innate/slime_puddle - name = "Puddle Transformation" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimepuddle" - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - required_mobility_flags = MOBILITY_STAND - var/is_puddle = FALSE - var/in_transformation_duration = 12 - var/out_transformation_duration = 7 - var/puddle_into_effect = /obj/effect/temp_visual/slime_puddle - var/puddle_from_effect = /obj/effect/temp_visual/slime_puddle/reverse - var/puddle_icon = 'icons/mob/mob.dmi' - var/puddle_state = "puddle" - var/tracked_overlay - var/datum/component/squeak/squeak - var/transforming = FALSE - var/last_use - -/datum/action/innate/slime_puddle/IsAvailable() - if(!transforming) - return ..() - else - return FALSE - -/datum/action/innate/slime_puddle/Activate() - var/mob/living/carbon/human/H = owner - //if they have anything stuck to their hands, we immediately say 'no' and return - for(var/obj/item/I in H.held_items) - if(HAS_TRAIT(I, TRAIT_NODROP)) - to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") - return - if(isjellyperson(owner) && IsAvailable()) - transforming = TRUE - UpdateButtonIcon() - var/mutcolor = "#" + H.dna.features["mcolor"] - if(!is_puddle) - if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle - is_puddle = TRUE //so we know which transformation to use when its used - owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite - var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) - puddle_effect.color = mutcolor - H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming - - //series of traits that make up the puddle behaviour - ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) - ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) - H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed - - H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - - H.layer -= 1 //go one layer down so people go over you - ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you - squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you - - //if the user is a changeling, retract their sting - H.unset_sting() - - sleep(in_transformation_duration) //wait for animation to end - - //set the puddle overlay up - var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) - puddle_overlay.color = mutcolor - tracked_overlay = puddle_overlay - owner.add_overlay(puddle_overlay) - - transforming = FALSE - UpdateButtonIcon() - else - //like the above, but reverse everything done! - owner.cut_overlay(tracked_overlay) - var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) - puddle_effect.color = mutcolor - H.Stun(out_transformation_duration, ignore_canstun = TRUE) - sleep(out_transformation_duration) - REMOVE_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOUSE, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) - REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) - H.update_disabled_bodyparts(silent = TRUE) - H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - H.layer += 1 //go one layer back above! - DISABLE_BITFIELD(H.pass_flags, PASSMOB) - is_puddle = FALSE - if(squeak) - squeak.RemoveComponent() - owner.regenerate_icons() - transforming = FALSE - UpdateButtonIcon() - else - to_chat(owner, "You need to be standing up to do this!") //just assume they're a slime because it's such a weird edgecase to have it and not be one (it shouldn't even be possible) - ///////////////////////////////////LUMINESCENTS////////////////////////////////////////// //Luminescents are able to consume and use slime extracts, without them decaying. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f85efcf7f6..f05d795ba2 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -48,18 +48,22 @@ There are several things that need to be remembered: */ +/mob/living/carbon/human/ComponentInitialize() + . = ..() + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_HUMAN_NO_RENDER), /mob.proc/regenerate_icons) + //HAIR OVERLAY /mob/living/carbon/human/update_hair() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) dna.species.handle_hair(src) //used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. /mob/living/carbon/human/proc/update_mutant_bodyparts() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) dna.species.handle_mutant_bodyparts(src) /mob/living/carbon/human/update_body(update_genitals = FALSE) - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(BODY_LAYER) dna.species.handle_body(src) ..() @@ -69,11 +73,10 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_fire() ..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning") - /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) if(!..()) icon_render_key = null //invalidate bodyparts cache update_body(TRUE) @@ -102,7 +105,7 @@ There are several things that need to be remembered: //vvvvvv UPDATE_INV PROCS vvvvvv /mob/living/carbon/human/update_inv_w_uniform() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(UNIFORM_LAYER) if(client && hud_used) @@ -154,7 +157,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() /mob/living/carbon/human/update_inv_wear_id() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(ID_LAYER) if(client && hud_used) @@ -179,7 +182,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_gloves() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(GLOVES_LAYER) if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) @@ -213,7 +216,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_glasses() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(GLASSES_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated @@ -240,7 +243,7 @@ There are several things that need to be remembered: apply_overlay(GLASSES_LAYER) /mob/living/carbon/human/update_inv_ears() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(EARS_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated @@ -266,7 +269,7 @@ There are several things that need to be remembered: apply_overlay(EARS_LAYER) /mob/living/carbon/human/update_inv_shoes() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(SHOES_LAYER) if(get_num_legs(FALSE) <2) @@ -304,7 +307,7 @@ There are several things that need to be remembered: apply_overlay(SHOES_LAYER) /mob/living/carbon/human/update_inv_s_store() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) @@ -328,7 +331,7 @@ There are several things that need to be remembered: apply_overlay(SUIT_STORE_LAYER) /mob/living/carbon/human/update_inv_head() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(HEAD_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -368,7 +371,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() /mob/living/carbon/human/update_inv_belt() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(BELT_LAYER) if(client && hud_used) @@ -390,7 +393,7 @@ There are several things that need to be remembered: apply_overlay(BELT_LAYER) /mob/living/carbon/human/update_inv_wear_suit() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(SUIT_LAYER) if(client && hud_used) @@ -477,7 +480,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_wear_mask() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(FACEMASK_LAYER) if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated @@ -518,7 +521,7 @@ There are several things that need to be remembered: update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout /mob/living/carbon/human/update_inv_back() - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) ..() var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] if(back_overlay) @@ -747,7 +750,7 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if if(!dna.species) return - if(dna.species.should_render()) + if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) return var/obj/item/bodypart/HD = get_bodypart("head") diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index c605f91528..688b0cf63e 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -66,6 +66,10 @@ GLOB.alive_mob_list -= src if(!gibbed) GLOB.dead_mob_list += src + if(ckey) + var/datum/preferences/P = GLOB.preferences_datums[ckey] + if(P) + P.respawn_time_of_death = world.time set_drugginess(0) set_disgust(0) SetSleeping(0, 0) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index ce8bbc5dab..cfebacb977 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -509,7 +509,7 @@ message = "beeps." message_param = "beeps at %t." sound = 'sound/machines/twobeep.ogg' - mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/carbon/human) + mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon, /mob/living/carbon/human, /mob/camera/aiEye) /datum/emote/living/circle key = "circle" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 78de091923..fcc1d734a3 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -34,6 +34,7 @@ ranged_ability.remove_ranged_ability(src) if(buckled) buckled.unbuckle_mob(src,force=1) + QDEL_LIST_ASSOC_VAL(ability_actions) remove_from_all_data_huds() GLOB.mob_living_list -= src @@ -263,9 +264,9 @@ return FALSE /mob/living/carbon/human/has_tail() - if(!dna || !dna.features) + if(!dna || !dna.species) return ..() - var/list/L = dna.features // caches list because i refuse to type it out and because performance + var/list/L = dna.species.mutant_bodyparts // caches list because i refuse to type it out and because performance return (L["mam_tail"] && (L["mam_tail"] != "None")) || (L["tail_human"] && (L["tail_human"] != "None")) || (L["tail_lizard"] && (L["tail_lizard"] != "None")) /mob/living/start_pulling(atom/movable/AM, state, force = pull_force, supress_message = FALSE) diff --git a/code/modules/mob/living/living_active_parry.dm b/code/modules/mob/living/living_active_parry.dm index 7353add745..16855d6f22 100644 --- a/code/modules/mob/living/living_active_parry.dm +++ b/code/modules/mob/living/living_active_parry.dm @@ -127,7 +127,7 @@ handle_parry_ending_effects(data, effect_text) parrying = NOT_PARRYING parry_start_time = 0 - parry_end_time_last = world.time + parry_end_time_last = world.time + (successful? 0 : data.parry_failed_cooldown_duration) successful_parries = null /** diff --git a/code/modules/mob/living/living_blocking_parrying.dm b/code/modules/mob/living/living_blocking_parrying.dm index 08ef674b33..e290956873 100644 --- a/code/modules/mob/living/living_blocking_parrying.dm +++ b/code/modules/mob/living/living_blocking_parrying.dm @@ -154,6 +154,8 @@ GLOBAL_LIST_EMPTY(block_parry_data) var/parry_failed_stagger_duration = 3.5 SECONDS /// Clickdelay duration post-parry if you fail to parry an attack var/parry_failed_clickcd_duration = 2 SECONDS + /// Parry cooldown post-parry if failed. This is ADDED to parry_cooldown!!! + var/parry_failed_cooldown_duration = 0 SECONDS /** * Quirky proc to get average of flags in list that are in attack_type because why is attack_type a flag. diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 5621fab9c1..d4ccc63b34 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -32,6 +32,10 @@ // Combat - Blocking/Parrying system /// Our block_parry_data for unarmed blocks/parries. Currently only used for parrying, as unarmed block isn't implemented yet. YOU MUST RUN [get_block_parry_data(this)] INSTEAD OF DIRECTLY ACCESSING! var/datum/block_parry_data/block_parry_data = /datum/block_parry_data // defaults to *something* because [combat_flags] dictates whether or not we can unarmed block/parry. + /// Default + var/datum/block_parry_data/default_block_parry_data = /datum/block_parry_data + /// If we're a pugilist + var/datum/block_parry_data/pugilist_block_parry_data = /datum/block_parry_data/unarmed/pugilist // Blocking /// The item the user is actively blocking with if any. var/obj/item/active_block_item diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index 8c6cf9d207..2256a93fa1 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -1,11 +1,3 @@ -/// IN THE FUTURE, WE WILL PROBABLY REFACTOR TO LESSEN THE NEED FOR UPDATE_MOBILITY, BUT FOR NOW.. WE CAN START DOING THIS. -/// FOR BLOCKING MOVEMENT, USE TRAIT_MOBILITY_NOMOVE AS MUCH AS POSSIBLE. IT WILL MAKE REFACTORS IN THE FUTURE EASIER. -/mob/living/ComponentInitialize() - . = ..() - RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOMOVE), .proc/update_mobility) - RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOPICKUP), .proc/update_mobility) - RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOUSE), .proc/update_mobility) - RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOREST), .proc/update_mobility) //Stuff like mobility flag updates, resting updates, etc. @@ -148,7 +140,7 @@ L.update_pull_movespeed() //Handle lying down, voluntary or involuntary - density = !lying + update_density() if(lying) set_resting(TRUE, TRUE, FALSE) if(layer == initial(layer)) //to avoid special cases like hiding larvas. diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 75d712afb9..0cdfe9dbf2 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -17,6 +17,9 @@ pixel_x = get_standard_pixel_x_offset(lying) pixel_y = get_standard_pixel_y_offset(lying) +/mob/living/proc/update_density() + density = !lying && !HAS_TRAIT(src, TRAIT_LIVING_NO_DENSITY) + /mob/living/CanPass(atom/movable/mover, turf/target) if((mover.pass_flags & PASSMOB)) return TRUE diff --git a/code/modules/mob/living/living_signals.dm b/code/modules/mob/living/living_signals.dm new file mode 100644 index 0000000000..0eb83658d7 --- /dev/null +++ b/code/modules/mob/living/living_signals.dm @@ -0,0 +1,20 @@ +/// IN THE FUTURE, WE WILL PROBABLY REFACTOR TO LESSEN THE NEED FOR UPDATE_MOBILITY, BUT FOR NOW.. WE CAN START DOING THIS. +/// FOR BLOCKING MOVEMENT, USE TRAIT_MOBILITY_NOMOVE AS MUCH AS POSSIBLE. IT WILL MAKE REFACTORS IN THE FUTURE EASIER. +/mob/living/ComponentInitialize() + . = ..() + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOMOVE), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOPICKUP), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOUSE), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_MOBILITY_NOREST), .proc/update_mobility) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_LIVING_NO_DENSITY), .proc/update_density) + RegisterSignal(src, SIGNAL_TRAIT(TRAIT_PUGILIST), .proc/update_pugilism) + +/mob/living/proc/update_pugilism() + if(HAS_TRAIT(src, TRAIT_PUGILIST)) + combat_flags |= COMBAT_FLAG_UNARMED_PARRY + block_parry_data = pugilist_block_parry_data + else + var/initial_combat_flags = initial(combat_flags) + if(!(initial_combat_flags & COMBAT_FLAG_UNARMED_PARRY)) + combat_flags &= ~COMBAT_FLAG_UNARMED_PARRY + block_parry_data = default_block_parry_data diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7ce1c1e7cc..fbf2d27c31 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -86,6 +86,7 @@ var/mob/living/silicon/robot/deployed_shell = null //For shell control var/datum/action/innate/deploy_shell/deploy_action = new var/datum/action/innate/deploy_last_shell/redeploy_action = new + var/datum/action/innate/custom_holoform/custom_holoform = new var/chnotify = 0 @@ -152,6 +153,7 @@ aicamera = new/obj/item/camera/siliconcam/ai_camera(src) deploy_action.Grant(src) + custom_holoform.Grant(src) if(isturf(loc)) add_verb(src, list(/mob/living/silicon/ai/proc/ai_network_change, \ @@ -1032,3 +1034,8 @@ qdel(src) else return + +/mob/living/silicon/ai/emote(act, m_type=1, message = null, intentional = FALSE) + if(current && eyeobj) + return eyeobj.emote(act, m_type, message, intentional, forced = TRUE) + return ..() diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 8ec39095fb..17de811cdd 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -204,3 +204,7 @@ alpha = 100 layer = ABOVE_ALL_MOB_LAYER plane = GAME_PLANE + +/mob/camera/aiEye/emote(act, m_type=1, message = null, intentional = FALSE, forced = FALSE) + if(ai?.current) + ..() diff --git a/code/modules/mob/living/silicon/custom_holoform.dm b/code/modules/mob/living/silicon/custom_holoform.dm index 8ce6e9a29a..e4f7f6780b 100644 --- a/code/modules/mob/living/silicon/custom_holoform.dm +++ b/code/modules/mob/living/silicon/custom_holoform.dm @@ -1,28 +1,12 @@ -/mob/living/silicon/verb/clear_custom_holoform() - set name = "Clear Custom Holoform" - set desc = "Clear your current custom holoform" - set category = "OOC" - +/mob/living/silicon/proc/attempt_set_custom_holoform() if(!client.prefs) to_chat(src, "No preferences datum on your client, contact an admin/coder!") return - client.prefs.custom_holoform_icon = null - client.prefs.cached_holoform_icons = null - to_chat(src, "Holoform removed.") - -/mob/living/silicon/verb/set_custom_holoform() - set name = "Set Custom Holoform" - set desc = "Set your custom holoform using your current preferences slot and a specified set of gear." - set category = "OOC" - - if(!client.prefs) - to_chat(src, "No preferences datum on your client, contact an admin/coder!") - return - if(client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) - to_chat(src, "You are attempting to change custom holoforms too fast!") var/icon/new_holoform = user_interface_custom_holoform(client) + client.prefs.last_custom_holoform = world.time if(new_holoform) client.prefs.custom_holoform_icon = new_holoform client.prefs.cached_holoform_icons = null - client.prefs.last_custom_holoform = world.time to_chat(src, "Holoform set.") + return TRUE + return FALSE diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 6d2da187a1..786c121ad6 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -131,6 +131,7 @@ var/datum/action/innate/pai/chassis/AC = new /datum/action/innate/pai/chassis var/datum/action/innate/pai/rest/AR = new /datum/action/innate/pai/rest var/datum/action/innate/pai/light/AL = new /datum/action/innate/pai/light + var/datum/action/innate/custom_holoform/custom_holoform = new /datum/action/innate/custom_holoform var/datum/action/language_menu/ALM = new SW.Grant(src) @@ -139,6 +140,7 @@ AR.Grant(src) AL.Grant(src) ALM.Grant(src) + custom_holoform.Grant(src) emitter_next_use = world.time + 10 SECONDS /mob/living/silicon/pai/ComponentInitialize() diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index c532e44ff5..d499c2abae 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,9 +1,9 @@ /datum/emote/silicon - mob_type_allowed_typecache = list(/mob/living/silicon) + mob_type_allowed_typecache = list(/mob/living/silicon, /mob/camera/aiEye) emote_type = EMOTE_AUDIBLE /datum/emote/sound/silicon - mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/carbon/human) + mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/carbon/human, /mob/camera/aiEye) emote_type = EMOTE_AUDIBLE var/unrestricted = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 83df3ffba5..7db417b8fa 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1022,6 +1022,32 @@ R.undeploy() return TRUE +/datum/action/innate/custom_holoform + name = "Select Custom Holoform" + desc = "Select one of your existing avatars to use as a holoform." + icon_icon = 'icons/mob/actions/actions_silicon.dmi' + button_icon_state = "custom_holoform" + required_mobility_flags = NONE + +/datum/action/innate/custom_holoform/Trigger() + if(!..()) + return FALSE + var/mob/living/silicon/S = owner + + //if setting the holoform succeeds, attempt to set it as the current holoform for the pAI or AI + if(S.attempt_set_custom_holoform()) + if(istype(S, /mob/living/silicon/pai)) + var/mob/living/silicon/pai/P = S + P.chassis = "custom" + else if(istype(S, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/A = S + if(A.client?.prefs?.custom_holoform_icon) + A.holo_icon = A.client.prefs.get_filtered_holoform(HOLOFORM_FILTER_AI) + else + A.holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "female")) + + return TRUE + /mob/living/silicon/robot/proc/undeploy() @@ -1043,6 +1069,8 @@ mainframe.laws.show_laws(mainframe) //Always remind the AI when switching mainframe = null + + /mob/living/silicon/robot/attack_ai(mob/user) if(shell && (!connected_ai || connected_ai == user)) var/mob/living/silicon/ai/AI = user diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 61187006a4..7b1e2dcaba 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -67,8 +67,12 @@ CR.button.screen_loc = "6:[pos],4:-2" CR.button.moved = "6:[pos],4:-2" +/mob/living/simple_animal/hostile/construct/Destroy() + original_mind = null + . = ..() + /mob/living/simple_animal/hostile/construct/death() - if(original_mind) + if(original_mind && !(QDELETED(original_mind))) transfer_ckey(original_mind.current) ..() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3416a8b337..824e262ae1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -457,39 +457,6 @@ else to_chat(src, "You don't have a mind datum for some reason, so you can't add a note to it.") -/mob/verb/abandon_mob() - set name = "Respawn" - set category = "OOC" - - if (CONFIG_GET(flag/norespawn)) - return - if ((stat != DEAD || !( SSticker ))) - to_chat(usr, "You must be dead to use this!") - return - - log_game("[key_name(usr)] used abandon mob.") - - to_chat(usr, "Please roleplay correctly!") - - if(!client) - log_game("[key_name(usr)] AM failed due to disconnect.") - return - client.screen.Cut() - client.screen += client.void - if(!client) - log_game("[key_name(usr)] AM failed due to disconnect.") - return - - var/mob/dead/new_player/M = new /mob/dead/new_player() - if(!client) - log_game("[key_name(usr)] AM failed due to disconnect.") - qdel(M) - return - - M.key = key -// M.Login() //wat - return - /mob/proc/transfer_ckey(mob/new_mob, send_signal = TRUE) if(!new_mob || (!ckey && new_mob.ckey)) CRASH("transfer_ckey() called [new_mob ? "on ckey-less mob with a player mob as target" : "without a valid mob target"]!") @@ -1002,6 +969,12 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) switch(var_name) if("logging") return debug_variable(var_name, logging, 0, src, FALSE) + if(NAMEOF(src, lastKnownIP)) + if(!check_rights(R_SENSITIVE, FALSE)) + return "SENSITIVE" + if(NAMEOF(src, computer_id)) + if(!check_rights(R_SENSITIVE, FALSE)) + return "SENSITIVE" . = ..() /mob/vv_auto_rename(new_name) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 8c6b722140..dc81b3cfbf 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -11,7 +11,7 @@ blocks_emissive = EMISSIVE_BLOCK_GENERIC vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace. - + attack_hand_is_action = TRUE attack_hand_unwieldlyness = CLICK_CD_MELEE attack_hand_speed = 0 @@ -169,3 +169,11 @@ var/typing_indicator_timerid /// Current state of our typing indicator. Used for cut overlay, DO NOT RUNTIME ASSIGN OTHER THAN FROM SHOW/CLEAR. Used to absolutely ensure we do not get stuck overlays. var/mutable_appearance/typing_indicator_current + + /// Ability system based on action buttons. Can be ported to base /mob or /mob/living later if needed, easily - the procs are currently on living/carbon/human/innate_abilities.dm + /// datum traits-style lazylist of abilities + var/list/innate_abilities + /// ability = action button instance. + var/list/ability_actions + /// ability = list(data). see __DEFINES/mobs/innate_abilities.dm + var/list/ability_properties diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 3cda258bcf..471bd9939e 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -51,7 +51,7 @@ proc/get_top_level_mob(var/mob/S) return FALSE user.log_message(message, LOG_EMOTE) - message = "[user] " + "[user.say_emphasis(message)]" + message = "[user] [user.say_emphasis(message)]" for(var/mob/M in GLOB.dead_mob_list) if(!M.client || isnewplayer(M)) @@ -107,7 +107,7 @@ proc/get_top_level_mob(var/mob/S) return FALSE user.log_message(message, LOG_SUBTLER) - message = "[user] " + "[user.say_emphasis(message)]" + message = "[user] [user.say_emphasis(message)]" user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index 1c529ef745..4462987cbf 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -254,16 +254,16 @@ They *could* go in their appropriate files, but this is supposed to be modular . = DRAIN_MOB_SHOCK_FAILED //Default cell = 10,000 charge, 10,000/1000 = 10 uses without charging/upgrading - if(S.cell && S.cell.charge && S.cell.use(1000)) + if(S.cell && S.cell.charge && S.cell.use(500)) . = DRAIN_MOB_SHOCK //Got that electric touch var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, loc) playsound(src, "sparks", 50, 1) visible_message("[H] electrocutes [src] with [H.p_their()] touch!", "[H] electrocutes you with [H.p_their()] touch!") - electrocute_act(15, H) + electrocute_act(15, H, flags = SHOCK_NOSTUN) - DefaultCombatKnockdown(G.stunforce) + DefaultCombatKnockdown(G.stunforce, override_hardstun = 0) apply_effect(EFFECT_STUTTER, G.stunforce) SEND_SIGNAL(src, COMSIG_LIVING_MINOR_SHOCK) diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 05c47fc3bb..f6eca57e29 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -77,7 +77,7 @@ /obj/item/ammo_casing/energy/xray projectile_type = /obj/item/projectile/beam/xray - e_cost = 50 + e_cost = 100 fire_sound = 'sound/weapons/laser3.ogg' /obj/item/ammo_casing/energy/mindflayer diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 4ba72a1935..79e9ab8b4b 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -70,7 +70,7 @@ name = "\improper X-ray beam" icon_state = "xray" damage = 15 - irradiate = 300 + irradiate = 100 range = 15 pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index fca89a1c73..bf7b94483e 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -305,12 +305,6 @@ results = list(/datum/reagent/medicine/regen_jelly = 2) required_reagents = list(/datum/reagent/medicine/tricordrazine = 1, /datum/reagent/toxin/slimejelly = 1) -/datum/chemical_reaction/jelly_convert - name = "Blood Jelly Conversion" - id = /datum/reagent/toxin/slimejelly - results = list(/datum/reagent/toxin/slimejelly = 1) - required_reagents = list(/datum/reagent/toxin = 1, /datum/reagent/blood/jellyblood = 1) - /datum/chemical_reaction/corazone name = "Corazone" id = /datum/reagent/medicine/corazone diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghypo.dm similarity index 96% rename from code/modules/reagents/reagent_containers/borghydro.dm rename to code/modules/reagents/reagent_containers/borghypo.dm index 170ff64138..3388018280 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghypo.dm @@ -102,6 +102,12 @@ Borg Hypospray if(!istype(M)) return if(R.total_volume && M.can_inject(user, 1, user.zone_selected,bypass_protection)) + if(user.a_intent == INTENT_HELP) //Prevents mediborgs from OD'ing people unless on harm intent + for(var/datum/reagent/RG in R.reagent_list) + if(M.reagents.has_reagent(RG.type) && !RG.overdose_threshold == 0) + if(((M.reagents.get_reagent_amount(RG.type)) + amount_per_transfer_from_this > RG.overdose_threshold)) + to_chat(user, "Injecting [M] with more [RG] would overdose them.") + return to_chat(M, "You feel a tiny prick!") to_chat(user, "You inject [M] with the injector.") var/fraction = min(amount_per_transfer_from_this/R.total_volume, 1) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 6541deda1c..ffa3f7478b 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -123,7 +123,7 @@ /obj/structure/reagent_dispensers/plumbed/storage/ComponentInitialize() AddComponent(/datum/component/plumbing/tank) - + ////////////// //Fuel Tanks// ////////////// @@ -134,16 +134,20 @@ icon_state = "fuel" reagent_id = /datum/reagent/fuel -/obj/structure/reagent_dispensers/fueltank/high //Unused - Good for ghost roles +/obj/structure/reagent_dispensers/fueltank/high name = "high-capacity fuel tank" desc = "A now illegal tank, full of highly pressurized industrial welding fuel. Do not consume or have a open flame close to this tank." icon_state = "fuel_high" - tank_volume = 3000 + tank_volume = 5000 /obj/structure/reagent_dispensers/fueltank/boom() explosion(get_turf(src), 0, 1, 5, flame_range = 5) qdel(src) +/obj/structure/reagent_dispensers/fueltank/high/boom() + explosion(get_turf(src), 0, 2, 5, flame_range = 12) + qdel(src) + /obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B) boom() diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 7508d59b18..8da18c453c 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -41,3 +41,162 @@ reagents_list = list(/datum/reagent/medicine/synthflesh = 75) build_path = /obj/item/melee/synthetic_arm_blade category = list("other","emagged") + +//Extra limbs + +/datum/design/chest + name = "Chest" + id = "chest" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 50) + build_path = /obj/item/bodypart/chest + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/head + name = "Head" + id = "head" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 75) + build_path = /obj/item/bodypart/head + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +//Organs +/datum/design/brain + name = "Brain" + id = "brain" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 50) + build_path = /obj/item/organ/brain + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/heart + name = "Heart" + id = "heart" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/heart + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/lungs + name = "Lungs" + id = "lungs" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/lungs + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/liver + name = "Liver" + id = "liver" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/liver + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/stomach + name = "Stomach" + id = "stomach" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/stomach + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/appendix + name = "Appendix" + id = "appendix" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 10) + build_path = /obj/item/organ/appendix + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/tail + name = "Tail" + id = "tail" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/tail + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/ears + name = "Ears" + id = "ears" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/ears + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/eyes + name = "Eyes" + id = "eyes" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 30) + build_path = /obj/item/organ/eyes + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/tongue + name = "Tongue" + id = "tongue" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/tongue + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/vocal_cords + name = "Vocal cords" + id = "vocal_cords" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/vocal_cords + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +//genitals + +/datum/design/penis + name = "Penis" + id = "penis" + build_type = LIMBGROWER + research_icon_state = "penis_human_3_s" + research_icon = 'icons/obj/genitals/penis.dmi' + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/genital/penis + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/vagina + name = "Vagina" + id = "vagina" + research_icon_state = "vagina-s" + research_icon = 'icons/obj/genitals/vagina.dmi' + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/genital/vagina + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/womb + name = "Womb" + id = "womb" + research_icon_state = "womb" + research_icon = 'icons/obj/genitals/vagina.dmi' + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/genital/womb + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/testicles + name = "Testicles" + id = "testicles" + research_icon_state = "testicles_single_3_s" + research_icon = 'icons/obj/genitals/testicles.dmi' + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/genital/testicles + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + +/datum/design/breasts + name = "Breasts" + id = "breasts" + research_icon_state = "breasts_pair_e_s" + research_icon = 'icons/obj/genitals/breasts.dmi' + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 25) + build_path = /obj/item/organ/genital/breasts + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") diff --git a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm index e0702be689..81b16d1118 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm @@ -163,3 +163,10 @@ category = list ("Misc. Machinery") departmental_flags = DEPARTMENTAL_FLAG_ALL +/datum/design/board/colormate + name = "ColorMate" + desc = "This machine lets you paint your gear." + id = "colormate" + build_path = /obj/item/circuitboard/machine/colormate + category = list ("Misc. Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ALL diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm index b157d0c349..38cd774683 100644 --- a/code/modules/research/designs/nanite_designs.dm +++ b/code/modules/research/designs/nanite_designs.dm @@ -113,7 +113,7 @@ /datum/design/nanites/spreading name = "Infective Exo-Locomotion" desc = "The nanites gain the ability to survive for brief periods outside of the human body, as well as the ability to start new colonies without an integration process; \ - resulting in an extremely infective strain of nanites." + resulting in an extremely infective strain of nanites. Bypasses antiviral defense" id = "spreading_nanites" program_type = /datum/nanite_program/spreading category = list("Utility Nanites") @@ -133,6 +133,21 @@ program_type = /datum/nanite_program/mitosis category = list("Utility Nanites") +/datum/design/nanites/antiviral + name = "Enhanced Error Correction" + desc = "The nanites self-propagate and replicate their program storage memory, preventing viral takeovers." + id = "antiviral_nanites" + program_type = /datum/nanite_program/lockout/antiviral + category = list("Utility Nanites") + +/datum/design/nanites/hostile_lockdown + name = "Hostile Lockdown" + desc = "The nanites constantly encrypt and scramble their own control sectors, preventing consoles from controlling them. Furthermore, \ + if the host happens to be a synthetic organism with innate control over nanite strains, this will prevent them from acting on the nanites as well." + id = "hostile_lockdown" + program_type = /datum/nanite_program/lockout/hostile_lockdown + category = list("Utility Nanites") + ////////////////////MEDICAL NANITES////////////////////////////////////// /datum/design/nanites/regenerative name = "Accelerated Regeneration" diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm index 01513a0b41..8675d54b46 100644 --- a/code/modules/research/nanites/nanite_chamber.dm +++ b/code/modules/research/nanites/nanite_chamber.dm @@ -41,12 +41,12 @@ update_icon() /obj/machinery/nanite_chamber/proc/set_safety(threshold) - if(!occupant) + if(!occupant || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) return SEND_SIGNAL(occupant, COMSIG_NANITE_SET_SAFETY, threshold) /obj/machinery/nanite_chamber/proc/set_cloud(cloud_id) - if(!occupant) + if(!occupant || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) return SEND_SIGNAL(occupant, COMSIG_NANITE_SET_CLOUD, cloud_id) @@ -82,7 +82,7 @@ return if((stat & MAINT) || panel_open) return - if(!occupant || busy) + if(!occupant || busy || SEND_SIGNAL(occupant, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) return var/locked_state = locked @@ -173,7 +173,6 @@ return FALSE ..() - return TRUE /obj/machinery/nanite_chamber/relaymove(mob/user as mob) diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index 70e4d05590..f69cb58456 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -50,6 +50,10 @@ data["status_msg"] = chamber.busy_message return data + if(SEND_SIGNAL(L, COMSIG_NANITE_CHECK_CONSOLE_LOCK)) + data["status_msg"] = "Error: Nanite keycodes scrambled. Unable to operate." + return data + data["status_msg"] = null data["scan_level"] = chamber.scan_level data["locked"] = chamber.locked diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm index faa81be0a5..d3cf755de2 100644 --- a/code/modules/research/nanites/nanite_programs.dm +++ b/code/modules/research/nanites/nanite_programs.dm @@ -54,6 +54,13 @@ //Rules that automatically manage if the program's active without requiring separate sensor programs var/list/datum/nanite_rule/rules = list() + /// Corruptable - able to have code/configuration changed + var/corruptable = TRUE + /// error flicking - able to be randomly toggled by errors + var/error_flicking = TRUE + /// immutable - cannot be overwritten by other programs + var/immutable = FALSE + /datum/nanite_program/New() . = ..() register_extra_settings() @@ -68,8 +75,15 @@ on_mob_remove() if(nanites) nanites.programs -= src + nanites.permanent_programs -= src return ..() +/** + * Checks if we're a permanent program + */ +/datum/nanite_program/proc/is_permanent() + return nanites && (src in nanites.permanent_programs) + /datum/nanite_program/proc/copy() var/datum/nanite_program/new_program = new type() copy_programming(new_program, TRUE) @@ -77,6 +91,8 @@ return new_program /datum/nanite_program/proc/copy_programming(datum/nanite_program/target, copy_activated = TRUE) + if(target.immutable) + return if(copy_activated) target.activated = activated target.timer_restart = timer_restart @@ -234,7 +250,7 @@ /datum/nanite_program/proc/on_emp(severity) if(program_flags & NANITE_EMP_IMMUNE) return - if(prob(80 / severity)) + if(prob(severity / 2)) software_error() /datum/nanite_program/proc/on_shock(shock_damage) @@ -242,7 +258,7 @@ if(prob(10)) software_error() else if(prob(33)) - qdel(src) + self_destruct() /datum/nanite_program/proc/on_minor_shock() if(!program_flags & NANITE_SHOCK_IMMUNE) @@ -254,26 +270,29 @@ /datum/nanite_program/proc/software_error(type) if(!type) - type = rand(1,5) + type = rand(1,is_permanent()? 4 : 5) switch(type) if(1) - qdel(src) //kill switch + self_destruct() //kill switch return if(2) //deprogram codes - activation_code = 0 - deactivation_code = 0 - kill_code = 0 - trigger_code = 0 + if(corruptable) + activation_code = 0 + deactivation_code = 0 + kill_code = 0 + trigger_code = 0 if(3) - toggle() //enable/disable + if(error_flicking) + toggle() //enable/disable if(4) - if(can_trigger) + if(error_flicking && can_trigger) trigger() if(5) //Program is scrambled and does something different - var/rogue_type = pick(rogue_types) - var/datum/nanite_program/rogue = new rogue_type - nanites.add_program(null, rogue, src) - qdel(src) + if(corruptable) + var/rogue_type = pick(rogue_types) + var/datum/nanite_program/rogue = new rogue_type + nanites.add_program(null, rogue, src) + self_destruct() /datum/nanite_program/proc/receive_signal(code, source) if(activation_code && code == activation_code && !activated) @@ -285,10 +304,18 @@ if(can_trigger && trigger_code && code == trigger_code) trigger() host_mob.investigate_log("'s [name] nanite program was triggered by [source] with code [code].", INVESTIGATE_NANITES) - if(kill_code && code == kill_code) + if((kill_code && code == kill_code) && !is_permanent()) host_mob.investigate_log("'s [name] nanite program was deleted by [source] with code [code].", INVESTIGATE_NANITES) qdel(src) +/** + * Attempts to destroy ourselves + */ +/datum/nanite_program/proc/self_destruct() + if(is_permanent()) + return + qdel(src) + ///A nanite program containing a behaviour protocol. Only one protocol of each class can be active at once. //Moved to being 'normally' researched due to lack of B.E.P.I.S. /datum/nanite_program/protocol diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 351318c2af..920faae928 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -11,7 +11,7 @@ return FALSE if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC)) + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC, BODYPART_NANITES)) if(!parts.len) return FALSE return ..() @@ -19,7 +19,7 @@ /datum/nanite_program/regenerative/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC)) + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC, BODYPART_NANITES)) if(!parts.len) return for(var/obj/item/bodypart/L in parts) @@ -121,7 +121,7 @@ if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID)) + var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID, BODYPART_NANITES)) if(!parts.len) return FALSE else @@ -132,7 +132,7 @@ /datum/nanite_program/repairing/active_effect(mob/living/M) if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID)) + var/list/parts = C.get_damaged_bodyparts(TRUE, TRUE, status = list(BODYPART_ROBOTIC, BODYPART_HYBRID, BODYPART_NANITES)) if(!parts.len) return var/update = FALSE @@ -176,12 +176,12 @@ /datum/nanite_program/regenerative_advanced/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC)) + var/list/parts = C.get_damaged_bodyparts(TRUE,TRUE, status = list(BODYPART_ORGANIC, BODYPART_NANITES)) if(!parts.len) return var/update = FALSE for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(3/parts.len, 3/parts.len, FALSE)) + if(L.heal_damage(3/parts.len, 3/parts.len, 0)) update = TRUE if(update) host_mob.update_damage_overlays() diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index f5372738db..eea8b7f18e 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -16,7 +16,7 @@ var/datum/nanite_extra_setting/program = extra_settings[NES_PROGRAM_OVERWRITE] var/datum/nanite_extra_setting/cloud = extra_settings[NES_CLOUD_OVERWRITE] for(var/mob/M in orange(host_mob, 5)) - if(SEND_SIGNAL(M, COMSIG_NANITE_IS_STEALTHY)) + if(SEND_SIGNAL(M, COMSIG_NANITE_CHECK_VIRAL_PREVENTION)) continue switch(program.get_value()) if("Overwrite") @@ -350,3 +350,66 @@ /datum/action/innate/nanite_button/Activate() program.press() + +/datum/nanite_program/lockout + unique = TRUE + var/emp_disable_time = 0 + var/shock_disable_time = 0 + var/minor_shock_disable_time = 0 + var/disable_time = 0 + var/lock_console = FALSE + var/lock_virus = FALSE + var/lock_host = FALSE + +/datum/nanite_program/lockout/enable_passive_effect() + . = ..() + if(lock_console) + RegisterSignal(src, COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK, .proc/check_antivirus) + if(lock_host) + RegisterSignal(src, COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK, .proc/check_antivirus) + if(lock_virus) + RegisterSignal(src, COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK, .proc/check_antivirus) + +/datum/nanite_program/lockout/disable_passive_effect() + . = ..() + UnregisterSignal(src, list( + COMSIG_NANITE_INTERNAL_HOST_LOCK_CHECK, + COMSIG_NANITE_INTERNAL_CONSOLE_LOCK_CHECK, + COMSIG_NANITE_INTERNAL_VIRAL_PREVENTION_CHECK + )) + +/datum/nanite_program/lockout/on_emp(severity) + // no parent call on purpose + disable_time = max(disable_time, world.time + emp_disable_time) + +/datum/nanite_program/lockout/on_shock(shock_damage) + // no parent call on purpose + disable_time = max(disable_time, world.time + shock_disable_time) + +/datum/nanite_program/lockout/on_minor_shock() + // no parent call on purpose + disable_time = max(disable_time, world.time + minor_shock_disable_time) + +/datum/nanite_program/lockout/proc/check_antivirus() + return (world.time <= disable_time)? NANITE_CHANGES_LOCKED : NONE + +/datum/nanite_program/lockout/antiviral + name = "Enhanced Error Correction" + desc = "Through expensive CRC checking and replication, prevents viral takeover of the nanite strain's control sectors. \ + Temporarily disabled by EMPs and shocks." + use_rate = 0.5 + emp_disable_time = 3 MINUTES + shock_disable_time = 45 SECONDS + minor_shock_disable_time = 10 SECONDS + lock_virus = TRUE + +/datum/nanite_program/lockout/hostile_lockdown + name = "Hostile Lockdown" + desc = "Constantly encrypts and scrambles the nanites' control memory, preventing consoles from modifying them and also locking out conscious host control of the nanite strain, if the host happens to be capable of that. \ + Temporarily disabled by EMPs and shocks." + use_rate = 0.5 + emp_disable_time = 3 MINUTES + shock_disable_time = 1 MINUTES + minor_shock_disable_time = 15 SECONDS + lock_host = TRUE + lock_console = TRUE diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm index b9fa0db22f..e16ce873dc 100644 --- a/code/modules/research/nanites/nanite_programs/weapon.dm +++ b/code/modules/research/nanites/nanite_programs/weapon.dm @@ -91,7 +91,7 @@ var/heavy_range = FLOOR(nanite_amount/100, 1) - 1 var/light_range = FLOOR(nanite_amount/50, 1) - 1 explosion(host_mob, 0, heavy_range, light_range) - qdel(nanites) + nanites.delete_nanites() //TODO make it defuse if triggered again diff --git a/code/modules/research/techweb/nodes/engineering_nodes.dm b/code/modules/research/techweb/nodes/engineering_nodes.dm index d024823c85..f4dce58740 100644 --- a/code/modules/research/techweb/nodes/engineering_nodes.dm +++ b/code/modules/research/techweb/nodes/engineering_nodes.dm @@ -8,7 +8,7 @@ design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "atmosalerts", "atmos_control", "recycler", "autolathe", "autolathe_secure", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", "apc_control", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "rcd_ammo","oxygen_tank", - "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt") + "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt", "colormate") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6000) /datum/techweb_node/adv_engi diff --git a/code/modules/research/techweb/nodes/nanites_nodes.dm b/code/modules/research/techweb/nodes/nanites_nodes.dm index 0a860c8938..024a384ef1 100644 --- a/code/modules/research/techweb/nodes/nanites_nodes.dm +++ b/code/modules/research/techweb/nodes/nanites_nodes.dm @@ -23,7 +23,7 @@ display_name = "Mesh Nanite Programming" description = "Nanite programs that require static structures and membranes." prereq_ids = list("nanite_base","engineering") - design_ids = list("hardening_nanites", "dermal_button_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites") + design_ids = list("hardening_nanites", "dermal_button_nanites", "refractive_nanites", "cryo_nanites", "conductive_nanites", "shock_nanites", "emp_nanites", "temperature_nanites", "antiviral_nanites", "hostile_lockdown") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) /datum/techweb_node/nanite_bio diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index 5f8d711fcd..5b48d57a1f 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -1,4 +1,4 @@ -# DMAPI V4 +# DMAPI V5 This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. diff --git a/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm index 1b7909a50d..d01c3ae96a 100644 --- a/code/modules/uplink/uplink_items/uplink_bundles.dm +++ b/code/modules/uplink/uplink_items/uplink_bundles.dm @@ -52,6 +52,15 @@ cost = 20 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs) +/datum/uplink_item/bundles_TC/scarp_bundle + name = "Sleeping Carp Bundle" + desc = "Become one with your inner carp! Your ancient fish masters leave behind their legacy, and bestow to you their teachings, sacred uniform, and staff. \ + Please be aware that you will not be able to use dishonerable ranged weapons." + item = /obj/item/storage/box/syndie_kit/scarp + cost = 20 + player_minimum = 20 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs) + /datum/uplink_item/suits/infiltrator_bundle name = "Insidious Infiltration Gear Case" desc = "Developed by Roseus Galactic in conjunction with the Gorlex Marauders to produce a functional suit for urban operations, \ diff --git a/code/modules/uplink/uplink_items/uplink_roles.dm b/code/modules/uplink/uplink_items/uplink_roles.dm index b8eaf41371..b384106396 100644 --- a/code/modules/uplink/uplink_items/uplink_roles.dm +++ b/code/modules/uplink/uplink_items/uplink_roles.dm @@ -60,7 +60,6 @@ cost = 15 restricted_roles = list("Clown") -/* /datum/uplink_item/role_restricted/clowncar name = "Clown Car" desc = "The Clown Car is the ultimate transportation method for any worthy clown! \ @@ -69,9 +68,8 @@ someone saves them or they manage to crawl out. Be sure not to ram into any walls or vending machines, as the springloaded seats \ are very sensetive. Now with our included lube defense mechanism which will protect you against any angry shitcurity!" item = /obj/vehicle/sealed/car/clowncar - cost = 15 + cost = 16 restricted_roles = list("Clown") -*/ /datum/uplink_item/role_restricted/haunted_magic_eightball name = "Haunted Magic Eightball" diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index cd21b61dbe..7a7886e999 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -18,6 +18,14 @@ . = ..() initialize_controller_action_type(/datum/action/vehicle/sealed/horn/clowncar, VEHICLE_CONTROL_DRIVE) + +/obj/vehicle/sealed/car/clowncar/driver_move(mob/user, direction) //Prevent it from moving onto space + if(isspaceturf(get_step(src, direction))) + return FALSE + else + return ..() + + /obj/vehicle/sealed/car/clowncar/auto_assign_occupant_flags(mob/M) if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -56,7 +64,7 @@ L.visible_message("[src] rams into [L] and sucks him up!") //fuck off shezza this isn't ERP. mob_forced_enter(L) playsound(src, pick('sound/vehicles/clowncar_ram1.ogg', 'sound/vehicles/clowncar_ram2.ogg', 'sound/vehicles/clowncar_ram3.ogg'), 75) - else if(istype(M, /turf/closed)) + else if(istype(M, /turf/closed) || istype(M, /obj/machinery/door/airlock/external)) visible_message("[src] rams into [M] and crashes!") playsound(src, pick('sound/vehicles/clowncar_crash1.ogg', 'sound/vehicles/clowncar_crash2.ogg'), 75) playsound(src, 'sound/vehicles/clowncar_crashpins.ogg', 75) diff --git a/config/admin_ranks.txt b/config/admin_ranks.txt index fc1cb96c86..adbba1acb6 100644 --- a/config/admin_ranks.txt +++ b/config/admin_ranks.txt @@ -30,6 +30,7 @@ # +SPAWN (or +CREATE) = mob transformations, spawning of most atoms including mobs (high-risk atoms, e.g. blackholes, will require the +FUN flag too) # +AUTOLOGIN = admin gains powers upon connect. This defaults to on, you can use -AUTOLOGIN to make a role require using the readmin verb to gain powers. (this does not effect the admin's ability to walk past bans or other on-connect limitations like panic bunker or pop limit.) # +DBRANKS = when sql-based admin loading is enabled, allows for non-temporary changes in the permissions panel to be saved (requires DB) +# +SENSITIVE = Defaults to on, use - to remove it. Allows reading IPs, CIDs, grabbing logs, and proccalls to certain things like admin holders/clients/subsystems considered "sensitive". # +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag # END_KEYWORDS diff --git a/config/antag_rep.txt b/config/antag_rep.txt index a26b157d5a..e8a7250686 100644 --- a/config/antag_rep.txt +++ b/config/antag_rep.txt @@ -1,5 +1,5 @@ -## Custom antag reputation values -## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles -## e.g. -## ANTAG_REP Captain 10 -## ANTAG_REP Assistant 0 +## Custom antag reputation values +## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles +## e.g. +## ANTAG_REP Captain 10 +## ANTAG_REP Assistant 0 diff --git a/config/comms.txt b/config/comms.txt index 865011032e..5a32f10fd3 100644 --- a/config/comms.txt +++ b/config/comms.txt @@ -1,17 +1,17 @@ -## Communication key for receiving data through world/Topic(), you don't want to give this out -#COMMS_KEY default_pwd - -## World address and port for server recieving cross server messages -## Use '+' to denote spaces in ServerName -## Repeat this entry to add more servers -#CROSS_SERVER ServerName byond:\\address:port - -## Name that the server calls itself in communications -#CROSS_COMMS_NAME - -## Hub address for tracking stats -## example: Hubmakerckey.Hubname -#MEDAL_HUB_ADDRESS - -## Password for the hub page +## Communication key for receiving data through world/Topic(), you don't want to give this out +#COMMS_KEY default_pwd + +## World address and port for server recieving cross server messages +## Use '+' to denote spaces in ServerName +## Repeat this entry to add more servers +#CROSS_SERVER ServerName byond:\\address:port + +## Name that the server calls itself in communications +#CROSS_COMMS_NAME + +## Hub address for tracking stats +## example: Hubmakerckey.Hubname +#MEDAL_HUB_ADDRESS + +## Password for the hub page #MEDAL_HUB_PASSWORD \ No newline at end of file diff --git a/config/config.txt b/config/config.txt index 5be76972ab..72df74beb1 100644 --- a/config/config.txt +++ b/config/config.txt @@ -11,6 +11,7 @@ $include dynamic_config.txt $include plushies/defines.txt $include job_threats.txt $include policy.txt +$include respawns.txt # You can use the @ character at the beginning of a config option to lock it from being edited in-game # Example usage: @@ -206,9 +207,6 @@ VOTE_AUTOTRANSFER_MAXIMUM 4 ## players' votes default to "No vote" (otherwise, default to "No change") # DEFAULT_NO_VOTE -## disable abandon mob -NORESPAWN - ## disables calling del(src) on newmobs if they logout before spawnin in # DONT_DEL_NEWMOB diff --git a/config/dynamic_config.txt b/config/dynamic_config.txt index c08b316e2e..480f6d8ed8 100644 --- a/config/dynamic_config.txt +++ b/config/dynamic_config.txt @@ -13,6 +13,9 @@ STORYTELLER_WEIGHT EXTENDED 0 STORYTELLER_MIN_PLAYERS CHAOTIC 30 STORYTELLER_MIN_PLAYERS TEAMWORK 30 +## If this is uncommented, Dynamic won't disable certain storytellers based on recent round threats +#NO_STORYTELLER_THREAT_REMOVAL + ## Injection delays: how long (in minutes) will pass before a midround or latejoin antag is injected. DYNAMIC_MIDROUND_DELAY_MIN 5 DYNAMIC_MIDROUND_DELAY_MAX 15 @@ -171,8 +174,8 @@ DYNAMIC_COST LATEJOIN_REVOLUTION 20 DYNAMIC_COST LATEJOIN_BLOODSUCKER 10 DYNAMIC_COST LATEJOIN_COLLECTOR 1 -## Rule will not be generated with threat levels below requirement at a pop value. Pop values are determined by dynamic's pop-per-requirement. -## By default it's 0-8, 9-17, 18-26, 27-35, 36-44, 45-53, 54-60, 61-69, 70-78, 79+. +## Rule will not be generated with threat levels below requirement at a pop value. Pop values are determined by dynamic's pop-per-requirement. +## By default it's 0-8, 9-17, 18-26, 27-35, 36-44, 45-53, 54-60, 61-69, 70-78, 79+. ## This means that 40 30 30 20 20 20 15 15 15 10 will not generate below 40 at 0-8, 30 at 9-17 etc. DYNAMIC_REQUIREMENTS TRAITOR 50 50 50 50 50 50 50 50 50 50 DYNAMIC_REQUIREMENTS TRAITORBRO 101 101 101 101 101 101 101 101 101 101 @@ -301,6 +304,6 @@ DYNAMIC_GLORIOUS_DEATH_COST 5 DYNAMIC_ASSASSINATE_COST 2 ## This requirement uses threat level, rather than current threat, which is why it's higher. -DYNAMIC_WAROPS_REQUIREMENT 60 +DYNAMIC_WAROPS_REQUIREMENT 60 DYNAMIC_WAROPS_COST 10 diff --git a/config/respawns.txt b/config/respawns.txt new file mode 100644 index 0000000000..337a691b07 --- /dev/null +++ b/config/respawns.txt @@ -0,0 +1,29 @@ +## Allow usage of the respawn system +RESPAWNS_ENABLED + +## Minutes delay before allowing respawns, either from death or observing. Not an integer. +RESPAWN_DELAY 15.0 + +## Minutes delay before allowing respawns, if the user cryo'd. Not an integer. +RESPAWN_DELAY_CRYO 5.0 + +## Allow respawning as anything but an assistant. +ALLOW_NON_ASSISTANT_RESPAWN + +## Allow respawning as security and command. Only works if ALLOW_NON_ASSISTANT_RESPAWN is on. +# ALLOW_COMBAT_ROLE_RESPAWN + +## Allow respawning as the same character +# ALLOW_SAME_CHARACTER_RESPAWN + +## Observing is considered a respawn for the purposes of role lockouts. Defaults to disabled. When disabled, only RESPAWNING rather than returning from observe locks you out. +# RESPAWN_PENALTY_INCLUDES_OBSERVE + +## Time in minutes from round start before respawn is enabled +RESPAWN_MINIMUM_DELAY_ROUNDSTART 30.0 + +## Gamemode (config tags!) banlist for respawn +RESPAWN_CHAOS_GAMEMODES WIZARD +RESPAWN_CHAOS_GAMEMODES NUCLEAR +RESPAWN_CHAOS_GAMEMODES CLONWOPS +RESPAWN_CHOAS_GAMEMODES REVOLUTION diff --git a/html/changelog.css b/html/changelog.css index 2bfa3fa495..da32a5a557 100644 --- a/html/changelog.css +++ b/html/changelog.css @@ -1,41 +1,41 @@ -.top{font-family:Tahoma,sans-serif;font-size:12px;} -h2{font-family:Tahoma,sans-serif;} -a img {border:none;} -.bgimages16 li { - padding:2px 10px 2px 30px; - background-position:6px center; - background-repeat:no-repeat; - border:1px solid #ddd; - border-left:4px solid #999; - margin-bottom:2px; -} -.bugfix {background-image:url(bug-minus.png)} -.wip {background-image:url(hard-hat-exclamation.png)} -.tweak {background-image:url(wrench-screwdriver.png)} -.soundadd {background-image:url(music-plus.png)} -.sounddel {background-image:url(music-minus.png)} -.rscdel {background-image:url(cross-circle.png)} -.rscadd {background-image:url(tick-circle.png)} -.imageadd {background-image:url(image-plus.png)} -.imagedel {background-image:url(image-minus.png)} -.spellcheck {background-image:url(spell-check.png)} -.experiment {background-image:url(burn-exclamation.png)} -.refactor {background-image:url(burn-exclamation.png)} -.code_imp {background-image:url(coding.png)} -.config {background-image:url(chrome-wrench.png)} -.admin {background-image:url(ban.png)} -.server {background-image:url(hard-hat-exclamation.png)} -.balance {background-image:url(scales.png)} -.sansserif {font-family:Tahoma,sans-serif;font-size:12px;} -.commit {margin-bottom:20px;font-size:100%;font-weight:normal;} -.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;} -.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;} -.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;} -.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;} -.hidden {display:none;} -.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;} -.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;} -.indrop img {margin-right:5px;vertical-align:middle;} -.closed {background:url(chevron-expand.png) right center no-repeat;} -.open {background:url(chevron.png) right center no-repeat;} -.lic {font-size:9px;} +.top{font-family:Tahoma,sans-serif;font-size:12px;} +h2{font-family:Tahoma,sans-serif;} +a img {border:none;} +.bgimages16 li { + padding:2px 10px 2px 30px; + background-position:6px center; + background-repeat:no-repeat; + border:1px solid #ddd; + border-left:4px solid #999; + margin-bottom:2px; +} +.bugfix {background-image:url(bug-minus.png)} +.wip {background-image:url(hard-hat-exclamation.png)} +.tweak {background-image:url(wrench-screwdriver.png)} +.soundadd {background-image:url(music-plus.png)} +.sounddel {background-image:url(music-minus.png)} +.rscdel {background-image:url(cross-circle.png)} +.rscadd {background-image:url(tick-circle.png)} +.imageadd {background-image:url(image-plus.png)} +.imagedel {background-image:url(image-minus.png)} +.spellcheck {background-image:url(spell-check.png)} +.experiment {background-image:url(burn-exclamation.png)} +.refactor {background-image:url(burn-exclamation.png)} +.code_imp {background-image:url(coding.png)} +.config {background-image:url(chrome-wrench.png)} +.admin {background-image:url(ban.png)} +.server {background-image:url(hard-hat-exclamation.png)} +.balance {background-image:url(scales.png)} +.sansserif {font-family:Tahoma,sans-serif;font-size:12px;} +.commit {margin-bottom:20px;font-size:100%;font-weight:normal;} +.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;} +.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;} +.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;} +.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;} +.hidden {display:none;} +.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;} +.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;} +.indrop img {margin-right:5px;vertical-align:middle;} +.closed {background:url(chevron-expand.png) right center no-repeat;} +.open {background:url(chevron.png) right center no-repeat;} +.lic {font-size:9px;} diff --git a/html/changelogs/AutoChangeLog-pr-13617.yml b/html/changelogs/AutoChangeLog-pr-13617.yml new file mode 100644 index 0000000000..532882eecc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13617.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "loadout now has save slot support and colour choosing/saving for polychromic items" diff --git a/html/changelogs/AutoChangeLog-pr-13699.yml b/html/changelogs/AutoChangeLog-pr-13699.yml new file mode 100644 index 0000000000..5b2234224e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13699.yml @@ -0,0 +1,5 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "nanite resistances tweaked" + - rscadd: "new nanite programs added for locking the user out from being modified by consoles or antivirals." diff --git a/html/changelogs/AutoChangeLog-pr-13704.yml b/html/changelogs/AutoChangeLog-pr-13704.yml new file mode 100644 index 0000000000..0ef8ca4a1d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13704.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "Emotes can properly be filtered for in TGUI." diff --git a/html/changelogs/AutoChangeLog-pr-13713.yml b/html/changelogs/AutoChangeLog-pr-13713.yml new file mode 100644 index 0000000000..36228f10c5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13713.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "all gas masks (but welding + glass) can be alt clicked to show/hide identity" diff --git a/html/changelogs/AutoChangeLog-pr-13725.yml b/html/changelogs/AutoChangeLog-pr-13725.yml new file mode 100644 index 0000000000..5105de865e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13725.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - bugfix: "keybinds generate anti-collision bindings where necessary automatically now" diff --git a/html/changelogs/AutoChangeLog-pr-13734.yml b/html/changelogs/AutoChangeLog-pr-13734.yml new file mode 100644 index 0000000000..a4ea9fdfac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13734.yml @@ -0,0 +1,4 @@ +author: "keronshb" +delete-after: True +changes: + - bugfix: "Fixes Reflective Blobs" diff --git a/html/changelogs/AutoChangeLog-pr-13737.yml b/html/changelogs/AutoChangeLog-pr-13737.yml new file mode 100644 index 0000000000..6c1121256f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13737.yml @@ -0,0 +1,4 @@ +author: "qwertyquerty" +delete-after: True +changes: + - bugfix: "Flash the screen on climax" diff --git a/html/changelogs/AutoChangeLog-pr-13738.yml b/html/changelogs/AutoChangeLog-pr-13738.yml new file mode 100644 index 0000000000..f34f9d505a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13738.yml @@ -0,0 +1,4 @@ +author: "EdgeLordExe, MoonFalcon" +delete-after: True +changes: + - balance: "Ported a bunch of heretic-related tweaks and changes from tg" diff --git a/html/changelogs/AutoChangeLog-pr-13739.yml b/html/changelogs/AutoChangeLog-pr-13739.yml new file mode 100644 index 0000000000..6db29bf922 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13739.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "custom eyes and tongues now properly carry across cloning" diff --git a/html/changelogs/AutoChangeLog-pr-13740.yml b/html/changelogs/AutoChangeLog-pr-13740.yml new file mode 100644 index 0000000000..2bbd9b877a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13740.yml @@ -0,0 +1,4 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "lizard snouts are no longer *slightly* lighter than they are supposed to be." diff --git a/html/changelogs/AutoChangeLog-pr-13743.yml b/html/changelogs/AutoChangeLog-pr-13743.yml new file mode 100644 index 0000000000..00ff1a55bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13743.yml @@ -0,0 +1,5 @@ +author: "Linzolle" +delete-after: True +changes: + - bugfix: "entertainment monitors no longer invisible" + - rscadd: "entertainment monitors now light up and display text when motion is detected in thunderdome" diff --git a/html/changelogs/AutoChangeLog-pr-13745.yml b/html/changelogs/AutoChangeLog-pr-13745.yml new file mode 100644 index 0000000000..af6cb787b6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13745.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - bugfix: "Handles more edge cases with construct soul returning" diff --git a/html/changelogs/AutoChangeLog-pr-13746.yml b/html/changelogs/AutoChangeLog-pr-13746.yml new file mode 100644 index 0000000000..73c7ab4058 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13746.yml @@ -0,0 +1,5 @@ +author: "keronshb" +delete-after: True +changes: + - rscadd: "Adds more room to northwest maint" + - rscadd: "Adds a bridge between Atmos and the Turbine." diff --git a/html/changelogs/AutoChangeLog-pr-13747.yml b/html/changelogs/AutoChangeLog-pr-13747.yml new file mode 100644 index 0000000000..f8b6111c08 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13747.yml @@ -0,0 +1,6 @@ +author: "MrJWhit" +delete-after: True +changes: + - rscadd: "" + - tweak: "Added the ability for cargo to buy a large welding tank" + - imageadd: "Tweaked large tank reagent sprites to /tg/'s" diff --git a/html/changelogs/AutoChangeLog-pr-13750.yml b/html/changelogs/AutoChangeLog-pr-13750.yml new file mode 100644 index 0000000000..a89abdd440 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13750.yml @@ -0,0 +1,6 @@ +author: "EmeraldSundisk" +delete-after: True +changes: + - bugfix: "Fixes the conveyor belt issues in Delta Station's cargo wing" + - rscdel: "Removes some of the dirt around the affected area (presumably they would have cleaned it up while working on it)" + - rscadd: "Adds a floor light to fix the \"dark spot\" cargo had" diff --git a/html/changelogs/AutoChangeLog-pr-13751.yml b/html/changelogs/AutoChangeLog-pr-13751.yml new file mode 100644 index 0000000000..2d8c964a14 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13751.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "text formatting now uses one character instead of two around the text to emphasize." diff --git a/html/changelogs/AutoChangeLog-pr-13752.yml b/html/changelogs/AutoChangeLog-pr-13752.yml new file mode 100644 index 0000000000..2175ed469b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13752.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - balance: "stamina crit is only removed when at or under 100 stamina, rather than 140. stamina crit threshold is still at 140." diff --git a/html/changelogs/AutoChangeLog-pr-13753.yml b/html/changelogs/AutoChangeLog-pr-13753.yml new file mode 100644 index 0000000000..e752df79a0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13753.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - balance: "shoving yourself up now costs 50% more" diff --git a/html/changelogs/AutoChangeLog-pr-13755.yml b/html/changelogs/AutoChangeLog-pr-13755.yml new file mode 100644 index 0000000000..e50cd0199f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13755.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - rscadd: "colormates" diff --git a/html/changelogs/AutoChangeLog-pr-13757.yml b/html/changelogs/AutoChangeLog-pr-13757.yml new file mode 100644 index 0000000000..a36e67943e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13757.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "improvements to the automatic age gate" diff --git a/html/changelogs/AutoChangeLog-pr-13758.yml b/html/changelogs/AutoChangeLog-pr-13758.yml new file mode 100644 index 0000000000..fc4adc1614 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13758.yml @@ -0,0 +1,5 @@ +author: "timothyteakettle" +delete-after: True +changes: + - tweak: "custom holoforms are now accessible through an action instead of through verbs" + - tweak: "AI holoforms can now emote" diff --git a/html/changelogs/AutoChangeLog-pr-13761.yml b/html/changelogs/AutoChangeLog-pr-13761.yml new file mode 100644 index 0000000000..c8ab365fe3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13761.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - balance: "dna melt drops all items being destroying you" diff --git a/html/changelogs/AutoChangeLog-pr-13762.yml b/html/changelogs/AutoChangeLog-pr-13762.yml new file mode 100644 index 0000000000..841e4d91c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13762.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "luxury shuttle no longer has noteleport" diff --git a/html/changelogs/AutoChangeLog-pr-13763.yml b/html/changelogs/AutoChangeLog-pr-13763.yml new file mode 100644 index 0000000000..68eeaf1022 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13763.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "RPEDs now drop their lowest part tier first when quick-emptied (used inhand)." diff --git a/html/changelogs/AutoChangeLog-pr-13764.yml b/html/changelogs/AutoChangeLog-pr-13764.yml new file mode 100644 index 0000000000..514705fd78 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13764.yml @@ -0,0 +1,4 @@ +author: "Hatterhat" +delete-after: True +changes: + - tweak: "Exosuits sold on the Supply shuttle no longer leave wreckages." diff --git a/html/changelogs/AutoChangeLog-pr-13765.yml b/html/changelogs/AutoChangeLog-pr-13765.yml new file mode 100644 index 0000000000..7ca1695d0f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13765.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Updated jukebox sprite." diff --git a/html/changelogs/AutoChangeLog-pr-13766.yml b/html/changelogs/AutoChangeLog-pr-13766.yml new file mode 100644 index 0000000000..8ba317afed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13766.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Updates our dark gygax sprites to /tg/'s" diff --git a/html/changelogs/AutoChangeLog-pr-13767.yml b/html/changelogs/AutoChangeLog-pr-13767.yml new file mode 100644 index 0000000000..2d38af77e3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13767.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Updated meat icons" diff --git a/html/changelogs/AutoChangeLog-pr-13769.yml b/html/changelogs/AutoChangeLog-pr-13769.yml new file mode 100644 index 0000000000..04d1cbc11c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13769.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - rscadd: "Adds a goose bar sign" diff --git a/html/changelogs/AutoChangeLog-pr-13771.yml b/html/changelogs/AutoChangeLog-pr-13771.yml new file mode 100644 index 0000000000..e450508681 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13771.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Donut boxes show what's inside of them now" diff --git a/html/changelogs/AutoChangeLog-pr-13772.yml b/html/changelogs/AutoChangeLog-pr-13772.yml new file mode 100644 index 0000000000..109360cace --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13772.yml @@ -0,0 +1,5 @@ +author: "silicons" +delete-after: True +changes: + - rscadd: "players can now respawn/return to lobby as a ghost after a 15 minute (default) delay and rejoin on another character with some/many restrictions" + - rscadd: "cryo now preserves everything" diff --git a/html/changelogs/AutoChangeLog-pr-13773.yml b/html/changelogs/AutoChangeLog-pr-13773.yml new file mode 100644 index 0000000000..498ac42561 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13773.yml @@ -0,0 +1,6 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "Zeolites now use gold rather then uranium for catalyst" + - tweak: "Zeolites are not as hard to make ph wise" + - tweak: "Making Zeolites heats up the beaker less allowing for better control" diff --git a/html/changelogs/AutoChangeLog-pr-13774.yml b/html/changelogs/AutoChangeLog-pr-13774.yml new file mode 100644 index 0000000000..ea3af475f2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13774.yml @@ -0,0 +1,6 @@ +author: "keronshb" +delete-after: True +changes: + - rscadd: "Re-adds the Clown Car to the clown uplink" + - balance: "15 >16 TC cost" + - balance: "bonks on external airlocks" diff --git a/html/changelogs/AutoChangeLog-pr-13776.yml b/html/changelogs/AutoChangeLog-pr-13776.yml new file mode 100644 index 0000000000..773aae9745 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13776.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - tweak: "AIs now only have to kill people once instead of permanently." diff --git a/html/changelogs/AutoChangeLog-pr-13777.yml b/html/changelogs/AutoChangeLog-pr-13777.yml new file mode 100644 index 0000000000..0013a93ef5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13777.yml @@ -0,0 +1,4 @@ +author: "The Grinch" +delete-after: True +changes: + - rscdel: "infinite presents from hilbert hotel" diff --git a/html/changelogs/AutoChangeLog-pr-13784.yml b/html/changelogs/AutoChangeLog-pr-13784.yml new file mode 100644 index 0000000000..df8cf7ad57 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13784.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - bugfix: "Effects can no longer trigger landmines" diff --git a/html/changelogs/AutoChangeLog-pr-13785.yml b/html/changelogs/AutoChangeLog-pr-13785.yml new file mode 100644 index 0000000000..973fb3f74e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13785.yml @@ -0,0 +1,5 @@ +author: "Putnam3145" +delete-after: True +changes: + - tweak: "Grab bag works as advertised." + - balance: "Xeno threat in dynamic tripled." diff --git a/html/changelogs/AutoChangeLog-pr-13790.yml b/html/changelogs/AutoChangeLog-pr-13790.yml new file mode 100644 index 0000000000..45ebf00ee7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13790.yml @@ -0,0 +1,5 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Replaced engineering fuel tank with a large fuel tank" + - tweak: "Changed access to sec suit storage from armory access in every map to other security access" diff --git a/html/changelogs/AutoChangeLog-pr-13796.yml b/html/changelogs/AutoChangeLog-pr-13796.yml new file mode 100644 index 0000000000..827cbf7443 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13796.yml @@ -0,0 +1,9 @@ +author: "keronshb" +delete-after: True +changes: + - rscadd: "Adds a reduced stamina buffer for SCarp users" + - rscadd: "Gives SCarp users a better parry" + - rscadd: "Adds the SCarp bundle which includes a bo staff" + - rscadd: "Lets Carp costumes carry Bo Staffs" + - balance: "reduces the stamina damage of scarp slightly" + - balance: "reduced the blockchance of the bo staff" diff --git a/html/changelogs/AutoChangeLog-pr-13799.yml b/html/changelogs/AutoChangeLog-pr-13799.yml new file mode 100644 index 0000000000..4f8168aa45 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13799.yml @@ -0,0 +1,5 @@ +author: "silicons" +delete-after: True +changes: + - bugfix: "ninja gloves no longer hardstun" + - balance: "ninja gloves now cost half as much to use to compensate" diff --git a/html/changelogs/AutoChangeLog-pr-13801.yml b/html/changelogs/AutoChangeLog-pr-13801.yml new file mode 100644 index 0000000000..e33b6f4056 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13801.yml @@ -0,0 +1,5 @@ +author: "SandPoot" +delete-after: True +changes: + - refactor: "Changes the limb grower a lot." + - bugfix: "\"Limb\" costs on limbgrower are actually displayed like it was meant to all along." diff --git a/html/changelogs/AutoChangeLog-pr-13803.yml b/html/changelogs/AutoChangeLog-pr-13803.yml new file mode 100644 index 0000000000..68791ea87a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13803.yml @@ -0,0 +1,4 @@ +author: "BlueWildrose" +delete-after: True +changes: + - balance: "The traitor AI can no longer activate the doomsday device while carded." diff --git a/html/changelogs/AutoChangeLog-pr-13804.yml b/html/changelogs/AutoChangeLog-pr-13804.yml new file mode 100644 index 0000000000..6b6d56dc5c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13804.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "circuits get pin data proc is sanitized when text is returned as data" diff --git a/html/changelogs/AutoChangeLog-pr-13808.yml b/html/changelogs/AutoChangeLog-pr-13808.yml new file mode 100644 index 0000000000..fc97da6161 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13808.yml @@ -0,0 +1,5 @@ +author: "Putnam3145" +delete-after: True +changes: + - tweak: "You can now exit polycircuit input" + - bugfix: "Polycircuits now check for range" diff --git a/html/changelogs/AutoChangeLog-pr-13809.yml b/html/changelogs/AutoChangeLog-pr-13809.yml new file mode 100644 index 0000000000..d63ee33ff1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13809.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - tweak: "Gear harness now covers nothing." diff --git a/html/changelogs/AutoChangeLog-pr-13811.yml b/html/changelogs/AutoChangeLog-pr-13811.yml new file mode 100644 index 0000000000..da2691d8f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13811.yml @@ -0,0 +1,4 @@ +author: "BlackMajor" +delete-after: True +changes: + - tweak: "Cyborg hypospray no longer injects if it means OD'ing while on help intent." diff --git a/html/changelogs/AutoChangeLog-pr-13813.yml b/html/changelogs/AutoChangeLog-pr-13813.yml new file mode 100644 index 0000000000..ce283eb788 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13813.yml @@ -0,0 +1,5 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "command headsets are 120% instead of 160%" + - bugfix: "no more emote italics" diff --git a/html/changelogs/AutoChangeLog-pr-13814.yml b/html/changelogs/AutoChangeLog-pr-13814.yml new file mode 100644 index 0000000000..9bd0be5ac0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13814.yml @@ -0,0 +1,4 @@ +author: "Xantholne" +delete-after: True +changes: + - bugfix: "Twin Sword Sheaths have an equipment icon and icon when worn now and make a sound when sheathed/unsheathed" diff --git a/html/changelogs/AutoChangeLog-pr-13815.yml b/html/changelogs/AutoChangeLog-pr-13815.yml new file mode 100644 index 0000000000..630ca9d7f7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13815.yml @@ -0,0 +1,4 @@ +author: "Yakumo Chen" +delete-after: True +changes: + - balance: "Slime Jelly is no longer obtainable from slimepeople. Go ask Xenobio" diff --git a/html/changelogs/AutoChangeLog-pr-13819.yml b/html/changelogs/AutoChangeLog-pr-13819.yml new file mode 100644 index 0000000000..77b1ec9a3d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13819.yml @@ -0,0 +1,5 @@ +author: "Hatterhat" +delete-after: True +changes: + - bugfix: "The survival dagger light on the sprite now actually turns on and off." + - balance: "The survival dagger in the glaive kit that can also be bought by itself is now better at butchering things." diff --git a/html/changelogs/AutoChangeLog-pr-13822.yml b/html/changelogs/AutoChangeLog-pr-13822.yml new file mode 100644 index 0000000000..743bdb500b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13822.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Bloodcult stunhands now work against clockies like they were supposed to instead of hardstunning." diff --git a/html/changelogs/AutoChangeLog-pr-13823.yml b/html/changelogs/AutoChangeLog-pr-13823.yml new file mode 100644 index 0000000000..35d70339f7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13823.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - tweak: "Christmas starts on the 18th now" diff --git a/html/changelogs/AutoChangeLog-pr-13825.yml b/html/changelogs/AutoChangeLog-pr-13825.yml new file mode 100644 index 0000000000..ae82c1cd8e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13825.yml @@ -0,0 +1,4 @@ +author: "raspy-on-osu" +delete-after: True +changes: + - tweak: "windoor open length" diff --git a/html/changelogs/AutoChangeLog-pr-13828.yml b/html/changelogs/AutoChangeLog-pr-13828.yml new file mode 100644 index 0000000000..282b8a01e0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13828.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "you can now only entwine tails with people who have a tail" diff --git a/html/changelogs/AutoChangeLog-pr-13832.yml b/html/changelogs/AutoChangeLog-pr-13832.yml new file mode 100644 index 0000000000..756edb7657 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13832.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - bugfix: "Bloodsuckers tresspass ability can no longer work while they are not awake." diff --git a/html/changelogs/AutoChangeLog-pr-13833.yml b/html/changelogs/AutoChangeLog-pr-13833.yml new file mode 100644 index 0000000000..8312c7a5a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13833.yml @@ -0,0 +1,4 @@ +author: "kiwedespars" +delete-after: True +changes: + - balance: "balanced bone gauntlets." diff --git a/html/changelogs/AutoChangeLog-pr-13835.yml b/html/changelogs/AutoChangeLog-pr-13835.yml new file mode 100644 index 0000000000..0ac90921c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13835.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - rscadd: "pugilists can now parry" diff --git a/html/changelogs/AutoChangeLog-pr-13837.yml b/html/changelogs/AutoChangeLog-pr-13837.yml new file mode 100644 index 0000000000..eda0b77a83 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13837.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - tweak: "anyone new to the server is lucky enough to have their sprint default to toggle instead of hold" diff --git a/html/changelogs/AutoChangeLog-pr-13844.yml b/html/changelogs/AutoChangeLog-pr-13844.yml new file mode 100644 index 0000000000..cd1f7a25d4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13844.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - bugfix: "Fixes the mint machine's UI" diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi index 310dd6709c..d75ae09c97 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index d083206454..5e51eedffd 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/actions/actions_silicon.dmi b/icons/mob/actions/actions_silicon.dmi index cf3d7a2a95..fa7edf111a 100644 Binary files a/icons/mob/actions/actions_silicon.dmi and b/icons/mob/actions/actions_silicon.dmi differ diff --git a/icons/obj/barsigns.dmi b/icons/obj/barsigns.dmi index 22f3071862..20b919c09e 100644 Binary files a/icons/obj/barsigns.dmi and b/icons/obj/barsigns.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index 5e1332ffd9..e8bd4790dc 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/donut.dmi b/icons/obj/food/donut.dmi index 534e0e37bc..2c418b8e98 100644 Binary files a/icons/obj/food/donut.dmi and b/icons/obj/food/donut.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 078cadfd60..9ccfb9e7f8 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 8cdff2214b..31312ac9a1 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index f14f77585b..b9c891ddb9 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 16efcf262e..a4fbe53dba 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/icons/obj/status_display.dmi b/icons/obj/status_display.dmi index 68082395d0..6833e9ff24 100644 Binary files a/icons/obj/status_display.dmi and b/icons/obj/status_display.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index d8f5c1d334..c70fe9d44e 100644 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 700449e86f..dea6da4254 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -64,7 +64,7 @@ em {font-style: normal; font-weight: bold;} .alert {color: #ff0000;} h1.alert, h2.alert {color: #000000;} -.emote { font-style: italic;} +.emote { } .selecteddna {color: #ffffff; background-color: #001B1B} .attack {color: #ff0000;} diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 4a21fb41fd..d58dda7f7d 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -287,6 +287,8 @@ slot = SLOT_IN_BACKPACK path = /obj/item/clothing/neck/cloak/polychromic/polyce ckeywhitelist = list("worksbythesea", "blakeryan") + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#808080", "#8CC6FF", "#FF3535") /datum/gear/donator/ssk name = "Stun Sword Kit" diff --git a/modular_citadel/code/modules/client/loadout/_loadout.dm b/modular_citadel/code/modules/client/loadout/_loadout.dm index 0ebfa060f2..2a7b77bd47 100644 --- a/modular_citadel/code/modules/client/loadout/_loadout.dm +++ b/modular_citadel/code/modules/client/loadout/_loadout.dm @@ -53,6 +53,8 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids) var/path //item-to-spawn path var/cost = 1 //normally, each loadout costs a single point. var/geargroupID //defines the ID that the gear inherits from the config + var/loadout_flags = 0 + var/list/loadout_initial_colors = list() //NEW DONATOR SYTSEM STUFF var/donoritem //autoset on new if null diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm index c7eff6ce78..7c3c11f25c 100644 --- a/modular_citadel/code/modules/client/loadout/neck.dm +++ b/modular_citadel/code/modules/client/loadout/neck.dm @@ -86,7 +86,11 @@ /datum/gear/neck/polycloak name = "Polychromatic Cloak" path = /obj/item/clothing/neck/cloak/polychromic + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#FFFFFF", "#808080") /datum/gear/neck/altpolycloak name = "Alternate Cloak" path = /obj/item/clothing/neck/cloak/alt/polychromic + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#676767", "#4C4C4C") diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm index d0be26a8a4..7c21ed84d0 100644 --- a/modular_citadel/code/modules/client/loadout/suit.dm +++ b/modular_citadel/code/modules/client/loadout/suit.dm @@ -101,6 +101,8 @@ name = "Polychromic winter coat" path = /obj/item/clothing/suit/hooded/wintercoat/polychromic cost = 4 //too many people with neon green coats is hard on the eyes + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#6A6964", "#C4B8A6", "#0000FF") /datum/gear/suit/coat/med name = "Medical winter coat" diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index 76389e2015..b76e223f25 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -47,6 +47,8 @@ /datum/gear/uniform/maidcostume/polychromic name = "Polychromic maid costume" path = /obj/item/clothing/under/rank/civilian/janitor/maid/polychromic + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#000000") /datum/gear/uniform/mailmanuniform name = "Mailman's jumpsuit" @@ -227,36 +229,50 @@ name = "Polychromic Jumpsuit" path = /obj/item/clothing/under/misc/polyjumpsuit cost = 2 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#808080", "#353535") /datum/gear/uniform/skirt/poly name = "Polychromic Jumpskirt" path = /obj/item/clothing/under/dress/skirt/polychromic cost = 2 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#F08080", "#808080") /datum/gear/uniform/suit/poly name = "Polychromic Button-up Shirt" path = /obj/item/clothing/under/misc/poly_shirt cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#353535", "#353535") /datum/gear/uniform/skirt/poly/pleated name = "Polychromic Pleated Sweaterskirt" path = /obj/item/clothing/under/dress/skirt/polychromic/pleated cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#8CC6FF", "#808080", "#FF3535") /datum/gear/uniform/polykilt name = "Polychromic Kilt" path = /obj/item/clothing/under/costume/kilt/polychromic cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#F08080") /datum/gear/uniform/shorts/poly name = "Polychromic Shorts" path = /obj/item/clothing/under/misc/polyshorts cost = 3 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#353535", "#808080", "#808080") /datum/gear/uniform/shorts/poly/athletic name = "Polychromic Athletic Shorts" path = /obj/item/clothing/under/shorts/polychromic cost = 2 + loadout_flags = LOADOUT_CAN_COLOR_POLYCHROMIC + loadout_initial_colors = list("#FFFFFF", "#F08080") /datum/gear/uniform/hopcasual name = "Casual Head of Personnel's uniform" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index ffd16faca7..1801986ebe 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -212,7 +212,7 @@ return ..() if(HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM)) C.adjustToxLoss(1, toxins_type = TOX_SYSCORRUPT) //Interferes with robots. Rare chem, so, pretty good at that too. - N.nanite_volume += -cached_purity*5//0.5 seems to be the default to me, so it'll neuter them. + N.adjust_nanites(-cached_purity*5) //0.5 seems to be the default to me, so it'll neuter them. ..() /datum/reagent/fermi/nanite_b_gone/overdose_process(mob/living/carbon/C) @@ -227,7 +227,7 @@ to_chat(C, "You feel a strange tingling sensation come from your core.") if(isnull(N)) return ..() - N.nanite_volume += -10*cached_purity + N.adjust_nanites(-10*cached_purity) ..() datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index f4b8850f55..bbecd2f6f4 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -591,21 +591,21 @@ /datum/chemical_reaction/fermi/zeolites name = "Zeolites" id = /datum/reagent/fermi/zeolites - results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot! - But it's now somewhat dangerous, and needs a bit of uranium to catalyze the reaction + results = list(/datum/reagent/fermi/zeolites = 5) //We make a lot! - But it's now somewhat dangerous, and needs a bit of gold to catalyze the reaction required_reagents = list(/datum/reagent/medicine/potass_iodide = 1, /datum/reagent/aluminium = 1, /datum/reagent/silicon = 1, /datum/reagent/oxygen = 1) - required_catalysts = list(/datum/reagent/uranium = 5) + required_catalysts = list(/datum/reagent/gold = 5) //FermiChem vars: OptimalTempMin = 500 OptimalTempMax = 750 ExplodeTemp = 850 - OptimalpHMin = 2.8 - OptimalpHMax = 5 //2.2 ph levels of optimal ph zone - centered at 3.9 - ph of ingredients mixed at equal values is 9.55; ph of result is 8. - ReactpHLim = 4 + OptimalpHMin = 4.8 + OptimalpHMax = 7 + ReactpHLim = 5 //CatalystFact = 0 CurveSharpT = 1.5 CurveSharppH = 3 - ThermicConstant = 7 + ThermicConstant = 5 HIonRelease = -0.15 RateUpLim = 4 - PurityMin = 0.5 //Good luck. + PurityMin = 0.5 //Good luck! FermiChem = TRUE diff --git a/modular_citadel/icons/mob/mam_snouts.dmi b/modular_citadel/icons/mob/mam_snouts.dmi index 4f6682f789..e838e97f68 100644 Binary files a/modular_citadel/icons/mob/mam_snouts.dmi and b/modular_citadel/icons/mob/mam_snouts.dmi differ diff --git a/sound/voice/catpeople/license.txt b/sound/voice/catpeople/license.txt index 7218480ddb..d0e8cad0c6 100644 --- a/sound/voice/catpeople/license.txt +++ b/sound/voice/catpeople/license.txt @@ -1,2 +1,2 @@ -distressed_cat.ogg from Cat annoyed meow / wail by jbierfeldt at https://freesound.org/people/jbierfeldt/sounds/440735/, chopped up and ogged +distressed_cat.ogg from Cat annoyed meow / wail by jbierfeldt at https://freesound.org/people/jbierfeldt/sounds/440735/, chopped up and ogged cat_puking.ogg from catpuking mp3 by NoiseCollector and Mocha the cat at https://freesound.org/people/NoiseCollector/sounds/80778/, chopped up, volume altered and ogged \ No newline at end of file diff --git a/strings/admin_nicknames.txt b/strings/admin_nicknames.txt deleted file mode 100644 index 76198b6c05..0000000000 --- a/strings/admin_nicknames.txt +++ /dev/null @@ -1,2 +0,0 @@ -Badmin -Spanmin \ No newline at end of file diff --git a/strings/names/adjectives.txt b/strings/names/adjectives.txt index fe9b28d431..bca89bc5a2 100644 --- a/strings/names/adjectives.txt +++ b/strings/names/adjectives.txt @@ -1,375 +1,375 @@ -abundant -adorable -adventurous -aggressive -agreeable -alert -alive -amused -ancient -angry -annoyed -annoying -anxious -arrogant -ashamed -attractive -average -awful -bad -beautiful -better -bewildered -big -bitter -black -bloody -blue -blue-eyed -blushing -boiling -bored -brainy -brave -breakable -breezy -brief -bright -broad -broken -bumpy -busy -calm -careful -cautious -charming -cheerful -chilly -chubby -clean -clear -clever -cloudy -clumsy -cold -colorful -colossal -combative -comfortable -concerned -condemned -confused -cooing -cool -cooperative -courageous -crazy -crazy flipped-out -creepy -crooked -crowded -cruel -cuddly -curious -curly -curved -cute -damaged -damp -dangerous -dark -dead -deafening -deep -defeated -defiant -delicious -delightful -depressed -determined -different -difficult -dirty -disgusted -distinct -disturbed -dizzy -doubtful -drab -dry -dull -dusty -eager -early -easy -elated -elegant -embarrassed -empty -enchanting -encouraging -energetic -enthusiastic -envious -evil -excited -expensive -exuberant -faint -fair -faithful -famous -fancy -fantastic -fast -fat -few -fierce -filthy -fine -flaky -flat -fluffy -fluttering -foolish -fragile -frail -frantic -freezing -fresh -friendly -frightened -funny -fuzzy -gentle -gifted -gigantic -glamorous -gleaming -glorious -good -gorgeous -graceful -greasy -great -grieving -grotesque -grubby -grumpy -handsome -happy -hard -harsh -healthy -heavy -helpful -helpless -high -high-pitched -hilarious -hissing -hollow -homeless -homely -horrible -hot -huge -hungry -hurt -hushed -husky -icy -ill -immense -important -impossible -inexpensive -innocent -inquisitive -itchy -jealous -jittery -jolly -joyous -juicy -kind -large -late -lazy -light -little -lively -lonely -long -loose -loud -lovely -low -lucky -magnificent -mammoth -many -massive -melodic -melted -miniature -misty -moaning -modern -motionless -muddy -mushy -mute -mysterious -narrow -nasty -naughty -nervous -nice -noisy -numerous -nutritious -nutty -obedient -obnoxious -odd -old -old-fashioned -open -outrageous -outstanding -panicky -perfect -petite -plain -plastic -pleasant -poised -poor -powerful -precious -prickly -proud -puny -purring -puzzled -quaint -quick -quiet -rainy -rapid -raspy -real -relieved -repulsive -resonant -rich -ripe -rotten -rough -round -salty -scary -scattered -scrawny -screeching -selfish -shaggy -shaky -shallow -sharp -shiny -shivering -short -shrill -shy -silent -silky -silly -skinny -sleepy -slimy -slippery -slow -small -smiling -smoggy -smooth -soft -solid -sore -sour -sparkling -spicy -splendid -spotless -square -squealing -stale -steady -steep -sticky -stormy -straight -strange -strong -stupid -substantial -successful -super -sweet -swift -talented -tall -tame -tart -Taste/Touch -tasteless -tasty -teeny -teeny-tiny -tender -tense -terrible -testy -thankful -thirsty -thoughtful -thoughtless -thundering -tight -tiny -tired -tough -troubled -ugliest -ugly -uneven -uninterested -unsightly -unusual -upset -uptight -vast -victorious -vivacious -voiceless -wandering -warm -weak -weary -wet -whispering -wicked -wide -wide-eyed -wild -witty -wonderful -wooden -worried -wrong -young -yummy -zany +abundant +adorable +adventurous +aggressive +agreeable +alert +alive +amused +ancient +angry +annoyed +annoying +anxious +arrogant +ashamed +attractive +average +awful +bad +beautiful +better +bewildered +big +bitter +black +bloody +blue +blue-eyed +blushing +boiling +bored +brainy +brave +breakable +breezy +brief +bright +broad +broken +bumpy +busy +calm +careful +cautious +charming +cheerful +chilly +chubby +clean +clear +clever +cloudy +clumsy +cold +colorful +colossal +combative +comfortable +concerned +condemned +confused +cooing +cool +cooperative +courageous +crazy +crazy flipped-out +creepy +crooked +crowded +cruel +cuddly +curious +curly +curved +cute +damaged +damp +dangerous +dark +dead +deafening +deep +defeated +defiant +delicious +delightful +depressed +determined +different +difficult +dirty +disgusted +distinct +disturbed +dizzy +doubtful +drab +dry +dull +dusty +eager +early +easy +elated +elegant +embarrassed +empty +enchanting +encouraging +energetic +enthusiastic +envious +evil +excited +expensive +exuberant +faint +fair +faithful +famous +fancy +fantastic +fast +fat +few +fierce +filthy +fine +flaky +flat +fluffy +fluttering +foolish +fragile +frail +frantic +freezing +fresh +friendly +frightened +funny +fuzzy +gentle +gifted +gigantic +glamorous +gleaming +glorious +good +gorgeous +graceful +greasy +great +grieving +grotesque +grubby +grumpy +handsome +happy +hard +harsh +healthy +heavy +helpful +helpless +high +high-pitched +hilarious +hissing +hollow +homeless +homely +horrible +hot +huge +hungry +hurt +hushed +husky +icy +ill +immense +important +impossible +inexpensive +innocent +inquisitive +itchy +jealous +jittery +jolly +joyous +juicy +kind +large +late +lazy +light +little +lively +lonely +long +loose +loud +lovely +low +lucky +magnificent +mammoth +many +massive +melodic +melted +miniature +misty +moaning +modern +motionless +muddy +mushy +mute +mysterious +narrow +nasty +naughty +nervous +nice +noisy +numerous +nutritious +nutty +obedient +obnoxious +odd +old +old-fashioned +open +outrageous +outstanding +panicky +perfect +petite +plain +plastic +pleasant +poised +poor +powerful +precious +prickly +proud +puny +purring +puzzled +quaint +quick +quiet +rainy +rapid +raspy +real +relieved +repulsive +resonant +rich +ripe +rotten +rough +round +salty +scary +scattered +scrawny +screeching +selfish +shaggy +shaky +shallow +sharp +shiny +shivering +short +shrill +shy +silent +silky +silly +skinny +sleepy +slimy +slippery +slow +small +smiling +smoggy +smooth +soft +solid +sore +sour +sparkling +spicy +splendid +spotless +square +squealing +stale +steady +steep +sticky +stormy +straight +strange +strong +stupid +substantial +successful +super +sweet +swift +talented +tall +tame +tart +Taste/Touch +tasteless +tasty +teeny +teeny-tiny +tender +tense +terrible +testy +thankful +thirsty +thoughtful +thoughtless +thundering +tight +tiny +tired +tough +troubled +ugliest +ugly +uneven +uninterested +unsightly +unusual +upset +uptight +vast +victorious +vivacious +voiceless +wandering +warm +weak +weary +wet +whispering +wicked +wide +wide-eyed +wild +witty +wonderful +wooden +worried +wrong +young +yummy +zany zealous \ No newline at end of file diff --git a/strings/names/ai.txt b/strings/names/ai.txt index 2ea5e18fc0..4104337d2c 100644 --- a/strings/names/ai.txt +++ b/strings/names/ai.txt @@ -1,146 +1,146 @@ -1-Rover-1 -16-20 -7-Zark-7 -790 -Adaptive Manipulator -Allied Mastercomputer -Alpha 5 -Alpha 6 -Alpha 7 -AM -AMEE -AmigoBot -Android -Aniel -Asimov -ASTAR -Astor -B O B -B-4 -B-9 -B166ER -Bender -Bishop -Blitz -Box -Brackenridge -C-3PO -Cassandra One -Cell -Chii -Chip -Computer -Conky 2000 -Cutie -Data -Decimus -Dee Model -Deep Thought -Dor-15 -Dorfl -Dot Matrix -Duey -E D I -E-Man -ED-209 -Emma-2 -Erasmus -Ez-27 -Fagor -Faith -Fi -FRIEND COMPUTER -Frost -Fum -Futura -G2 -George -Gnut -Gort -H A R L I E -H E L P eR -H E R B I E -Hadaly -HAL 9000 -Huey -Irona -Ironhide -Jay-Dub -Jinx -Johnny 5 -K-9 -KITT -Klapaucius -Kryten 2X4B-523P -L-76 -L-Ron -Louie -LUH 3417 -Maria -MARK13 -Marvin -Master Control Program -Max 404 -Maximillian -Mechagodzilla -Mechani-Kong -Megatron -Metalhead -Mr R I N G -Mugsy3000 -NCH -Necron-99 -Norby -OMM 0910 -Optimus -Orange v 3 5 -Project 2501 -PTO -R I C 2 0 -R2-D2 -R4-P17 -Revelation -Ro-Man -Robbie -Robot Devil -S A M -S H O C K -S H R O U D -S O P H I E -SEN 5241 -Setaur -SHODAN -Shrike -SID 6 7 -Solo -Soundwave -Speedy -Super 17 -Surgeon General Kraken -T-1000 -T-800 -T-850 -Terminus -THX 1138 -Tidy -Tik-Tok -Tobor -Trurl -TWA -ULTRABOT -Ulysses -Uniblab -V I N CENT -Voltes V -W1k1 -Wikipedia -Windows 3 1 -X-5 -XERXES -XR -Yod -Z-1 -Z-2 -Z-3 -Zed +1-Rover-1 +16-20 +7-Zark-7 +790 +Adaptive Manipulator +Allied Mastercomputer +Alpha 5 +Alpha 6 +Alpha 7 +AM +AMEE +AmigoBot +Android +Aniel +Asimov +ASTAR +Astor +B O B +B-4 +B-9 +B166ER +Bender +Bishop +Blitz +Box +Brackenridge +C-3PO +Cassandra One +Cell +Chii +Chip +Computer +Conky 2000 +Cutie +Data +Decimus +Dee Model +Deep Thought +Dor-15 +Dorfl +Dot Matrix +Duey +E D I +E-Man +ED-209 +Emma-2 +Erasmus +Ez-27 +Fagor +Faith +Fi +FRIEND COMPUTER +Frost +Fum +Futura +G2 +George +Gnut +Gort +H A R L I E +H E L P eR +H E R B I E +Hadaly +HAL 9000 +Huey +Irona +Ironhide +Jay-Dub +Jinx +Johnny 5 +K-9 +KITT +Klapaucius +Kryten 2X4B-523P +L-76 +L-Ron +Louie +LUH 3417 +Maria +MARK13 +Marvin +Master Control Program +Max 404 +Maximillian +Mechagodzilla +Mechani-Kong +Megatron +Metalhead +Mr R I N G +Mugsy3000 +NCH +Necron-99 +Norby +OMM 0910 +Optimus +Orange v 3 5 +Project 2501 +PTO +R I C 2 0 +R2-D2 +R4-P17 +Revelation +Ro-Man +Robbie +Robot Devil +S A M +S H O C K +S H R O U D +S O P H I E +SEN 5241 +Setaur +SHODAN +Shrike +SID 6 7 +Solo +Soundwave +Speedy +Super 17 +Surgeon General Kraken +T-1000 +T-800 +T-850 +Terminus +THX 1138 +Tidy +Tik-Tok +Tobor +Trurl +TWA +ULTRABOT +Ulysses +Uniblab +V I N CENT +Voltes V +W1k1 +Wikipedia +Windows 3 1 +X-5 +XERXES +XR +Yod +Z-1 +Z-2 +Z-3 +Zed Zord \ No newline at end of file diff --git a/strings/names/carp.txt b/strings/names/carp.txt index 4b10aa65f7..223106992b 100644 --- a/strings/names/carp.txt +++ b/strings/names/carp.txt @@ -1,30 +1,30 @@ -Lungfish -Blackfish -Alligator -Icefish -Armorhead -Hammerhead -Anaconda -Flathead -Manta Ray -Sting Ray -Fangtooth Moray -Goblin Shark -Grass Carp -Round River Bat Ray -Noodlefish -Hagfish -Man o’ War -Ladyfish -Black Eel -Baby Seal -Sprat -Koi -Electric Eel -Lamprey -Pejeray -Yellow-edged Moray -Salmon Shark -Sleeper Shark -Featherback -Eagle Ray +Lungfish +Blackfish +Alligator +Icefish +Armorhead +Hammerhead +Anaconda +Flathead +Manta Ray +Sting Ray +Fangtooth Moray +Goblin Shark +Grass Carp +Round River Bat Ray +Noodlefish +Hagfish +Man o’ War +Ladyfish +Black Eel +Baby Seal +Sprat +Koi +Electric Eel +Lamprey +Pejeray +Yellow-edged Moray +Salmon Shark +Sleeper Shark +Featherback +Eagle Ray diff --git a/strings/names/clown.txt b/strings/names/clown.txt index d8655d7cbf..3b4b4dcb75 100644 --- a/strings/names/clown.txt +++ b/strings/names/clown.txt @@ -1,62 +1,62 @@ -Alfie -Antsy -Baby Cakes -Bam Bam -Beebee -Bo Bo Sassy -Bonker -Bonbon -Bubble -Buster Frown -Buttercup -Button -Candy -Checkers -Clarabell -Clownsky -Clueless -Cluesky -Dazzle -Dinky Doodle -Doodles -Duckie -Flop O'Honker -Freckle -Giggles -Gigglesworth -Goose McSunny -Honkel the III -Honker -Honkerbelle -Knicknack -Jazzy Bella -Jingle -Joy -Jo Jo Bobo Bo -Ladybug Honks -Lala -Miss Stockings -Mittens -Mr Shoe -Patches -Pancake -Pepinpop -Pocket -Razzle Dazzle -Redshirt McBeat -Ronnie Pace -Scootaloo -Silly Willy -Skiddle -Slippy Joe -Sparkle -Speckles -Sprinkledinkle -Squigley -Tickle -Topcake -Toodles Sharperton -Trixy -Witty -Ziggy Yoyo -Zippy +Alfie +Antsy +Baby Cakes +Bam Bam +Beebee +Bo Bo Sassy +Bonker +Bonbon +Bubble +Buster Frown +Buttercup +Button +Candy +Checkers +Clarabell +Clownsky +Clueless +Cluesky +Dazzle +Dinky Doodle +Doodles +Duckie +Flop O'Honker +Freckle +Giggles +Gigglesworth +Goose McSunny +Honkel the III +Honker +Honkerbelle +Knicknack +Jazzy Bella +Jingle +Joy +Jo Jo Bobo Bo +Ladybug Honks +Lala +Miss Stockings +Mittens +Mr Shoe +Patches +Pancake +Pepinpop +Pocket +Razzle Dazzle +Redshirt McBeat +Ronnie Pace +Scootaloo +Silly Willy +Skiddle +Slippy Joe +Sparkle +Speckles +Sprinkledinkle +Squigley +Tickle +Topcake +Toodles Sharperton +Trixy +Witty +Ziggy Yoyo +Zippy diff --git a/strings/names/death_commando.txt b/strings/names/death_commando.txt index e689727228..fa47fb2065 100644 --- a/strings/names/death_commando.txt +++ b/strings/names/death_commando.txt @@ -1,70 +1,70 @@ -A whole bunch of spiders in a SWAT suit -Al "Otta" Gore -AMERICA -Beat Punchbeef -Blast Hardcheese -Blast Thickneck -Bob Johnson -Bold Bigflank -Bolt Vanderhuge -Brick Hardmeat -Buck Plankchest -Buff Drinklots -Buff Hardback -Butch Deadlift -Crud Bonemeal -Crunch Buttsteak -Crush McStompbones -Dirk Hardpeck -Duke Killington -Evil Bob Marley -Evil Martin Luther King -Fist Rockbone -Flint Ironstag -Fridge Largemeat -George Melons -Gibbs McLargehuge -GORE Vidal -Gristle McThornBody -Hank Chesthair -Hans Testosteroneson -Killiam Shakespeare -Killing McKillingalot -Lance Killiam -Leonardo Da Viking -Lump Beefrock -Mancrush McBrorape -Max Pain -Maximilian Murderface -Maxx Power -Noam Bombsky -Pack Blowfist -Punch Rockgroin -Punch Sideiron -Punt Speedchunk -Reef Blastbody -Rex Dudekiller VII -Rip Sidecheek -Rip Steakface -Roll Fizzlebeef -Sarah Pain -Seamus McTosterone -Sgt Slaughter -Sir Killaslot -Slab Bulkhead -Slab Squatthrust -Slake Fistcrunch -Slate Slabrock -Smash Lampjaw -Smoke Manmuscle -Splint Chesthair -Stabby McGee -Stump Beefgnaw -Stump Chunkman -THAT DAMN TRAITOR GEORGE MELONS -Theodore Pain -Thick McRunfast -Toolboxl Rose -Touch Rustrod -Trunk Slamchest -Zombie Gandhi +A whole bunch of spiders in a SWAT suit +Al "Otta" Gore +AMERICA +Beat Punchbeef +Blast Hardcheese +Blast Thickneck +Bob Johnson +Bold Bigflank +Bolt Vanderhuge +Brick Hardmeat +Buck Plankchest +Buff Drinklots +Buff Hardback +Butch Deadlift +Crud Bonemeal +Crunch Buttsteak +Crush McStompbones +Dirk Hardpeck +Duke Killington +Evil Bob Marley +Evil Martin Luther King +Fist Rockbone +Flint Ironstag +Fridge Largemeat +George Melons +Gibbs McLargehuge +GORE Vidal +Gristle McThornBody +Hank Chesthair +Hans Testosteroneson +Killiam Shakespeare +Killing McKillingalot +Lance Killiam +Leonardo Da Viking +Lump Beefrock +Mancrush McBrorape +Max Pain +Maximilian Murderface +Maxx Power +Noam Bombsky +Pack Blowfist +Punch Rockgroin +Punch Sideiron +Punt Speedchunk +Reef Blastbody +Rex Dudekiller VII +Rip Sidecheek +Rip Steakface +Roll Fizzlebeef +Sarah Pain +Seamus McTosterone +Sgt Slaughter +Sir Killaslot +Slab Bulkhead +Slab Squatthrust +Slake Fistcrunch +Slate Slabrock +Smash Lampjaw +Smoke Manmuscle +Splint Chesthair +Stabby McGee +Stump Beefgnaw +Stump Chunkman +THAT DAMN TRAITOR GEORGE MELONS +Theodore Pain +Thick McRunfast +Toolboxl Rose +Touch Rustrod +Trunk Slamchest +Zombie Gandhi diff --git a/strings/names/first.txt b/strings/names/first.txt index cc99e59d84..3f9018adca 100644 --- a/strings/names/first.txt +++ b/strings/names/first.txt @@ -1,1396 +1,1396 @@ -Aaden -Aaliyah -Aaron -Abby -Abel -Abigail -Abraham -Adam -Adan -Addison -Addyson -Adeline -Aden -Adolph -Adrian -Adriana -Adrianna -Aida -Aidan -Aiden -Aileen -Ainsley -Alaina -Alan -Alana -Alanna -Alayna -Albert -Alberto -Alden -Alec -Alejandra -Alejandro -Alessandra -Alex -Alexa -Alexander -Alexandra -Alexandria -Alexia -Alexis -Alexus -Alfred -Alfreda -Alfredo -Alger -Ali -Alice -Alicia -Alijah -Alina -Alisa -Alison -Alissa -Alisya -Alivia -Aliyah -Allegra -Allegria -Allen -Allie -Allison -Allisson -Allyson -Alma -Alondra -Alvin -Alysha -Alyson -Alyssa -Alyssia -Amanda -Amari -Amaryllis -Amaya -Amber -Ambrosine -Amelia -Amir -Amira -Amiyah -Amos -Amy -Amya -Ana -Anahi -Anastasia -Anaya -Anderson -Andre -Andrea -Andres -Andrew -Andy -Angel -Angela -Angelica -Angelina -Angelo -Angie -Aniya -Aniyah -Anjelica -Anna -Annabelle -Anne -Annie -Annika -Anthony -Antonio -Anya -April -Arabella -Archie -Ariana -Arianna -Ariel -Arielle -Arleen -Armando -Arn -Art -Arthur -Arturo -Asher -Ashley -Ashlie -Ashlyn -Ashlynn -Ashton -Asia -Astor -Athena -Aubree -Aubrey -Aubrie -Audrey -Audrina -August -Aurora -Austin -Autumn -Ava -Avalon -Averill -Avery -Axel -Ayden -Ayla -Bailey -Baldric -Barbra -Bartholomew -Baylee -Beau -Beckah -Beckett -Becky -Bella -Benjamin -Bennett -Bernice -Bertrand -Bethany -Bethney -Betsy -Bianca -Bidelia -Bill -Blake -Braden -Bradley -Brady -Braeden -Braiden -Brandon -Braxton -Brayan -Brayden -Braydon -Braylon -Breanna -Breanne -Brenda -Brendan -Brenden -Brenna -Brennan -Brett -Brian -Briana -Brianna -Bridget -Brielle -Brittani -Brittany -Brock -Brodie -Brody -Bronte -Brooke -Brooklyn -Brooklynn -Bruce -Bryan -Bryant -Bryce -Brycen -Brynn -Bryson -Burt -Byrne -Byron -Bysshe -Cade -Caden -Cadence -Caiden -Caitlin -Caitlyn -Calanthia -Caleb -Caleigh -Cali -Callie -Calvin -Camden -Cameron -Camila -Camille -Camron -Camryn -Candace -Candice -Candis -Canute -Cara -Carl -Carlos -Carly -Carlyle -Carmen -Carolina -Caroline -Carolyn -Carry -Carson -Carter -Caryl -Casey -Cash -Casimir -Cassandra -Cassian -Cassidy -Catherine -Cayden -Cecilia -Cecily -Celeste -Cesar -Chad -Chance -Chandler -Charles -Charlie -Charlotte -Charlton -Chase -Chelsea -Cherette -Cheri -Cherry -Cheyanne -Cheyenne -Chip -Chloe -Chris -Christa -Christian -Christiana -Christina -Christobel -Christopher -Ciara -Cindy -Claire -Clara -Claribel -Clark -Claudia -Claudius -Clayton -Clement -Cleveland -Cliff -Clinton -Clitus -Clover -Cody -Cohen -Colby -Cole -Colin -Collin -Colten -Colton -Conner -Connor -Cooper -Cora -Corbin -Coreen -Corey -Corrine -Cory -Courtney -Cristian -Cristopher -Cruz -Crystal -Curtis -Cy -Cynthia -Daisy -Dakota -Dallas -Dalton -Dalya -Damian -Damien -Damon -Dana -Dane -Danica -Daniel -Daniela -Daniella -Danielle -Danika -Danna -Danny -Dante -Darcey -Darell -Daria -Darin -Darius -Darren -David -Davion -Davis -Dawson -Dayana -Dayna -Dayton -Dean -Deandre -Deangelo -Debbi -Declan -Dee -Deena -Delaney -Delilah -Della -Delma -Denholm -Denise -Dennis -Denys -Derek -Derrick -Desiree -Desmond -Destiny -Devin -Devon -Diamond -Diana -Diego -Dillon -Dina -Dolores -Dominic -Dominick -Donald -Donella -Donna -Donny -Donovan -Dorian -Dorothy -Dortha -Douglas -Drake -Drew -Driscoll -Dulce -Duncan -Dustin -Dylan -Easter -Easton -Ebba -Eddie -Eden -Edgar -Eduardo -Edward -Edwin -Effie -Elaina -Eleanor -Elena -Eli -Eliana -Elias -Elijah -Eliot -Eliott -Elise -Eliza -Elizabeth -Ella -Elle -Ellie -Elliot -Elliott -Elric -Elspet -Elwood -Emanuel -Emely -Emerson -Emery -Emilee -Emilia -Emiliano -Emilio -Emily -Emma -Emmanuel -Enrique -Eric -Erica -Erick -Erik -Erika -Erin -Ermintrude -Ernesto -Esmeralda -Esteban -Esther -Estrella -Ethan -Eugenia -Euphemia -Eustace -Eva -Evan -Evangeline -Eveleen -Evelina -Evelyn -Everett -Ezekiel -Ezra -Fabian -Faith -Fatima -Fay -Felix -Fernanda -Fernando -Finn -Fiona -Fitz -Flick -Floella -Flora -Flossie -Fortune -Francesca -Francis -Francisco -Frank -Frankie -Franklin -Fulton -Gabriel -Gabriela -Gabriella -Gabrielle -Gael -Gage -Garret -Garrett -Gary -Gavin -Gaye -Gaylord -Genesis -Genette -Genevieve -George -Georgene -Georgia -Geraldine -Gerardo -Gervase -Gianna -Gina -Ginger -Giovanni -Giselle -Gladwyn -Glenna -Gloria -Goddard -Godwin -Goodwin -Gordon -Grace -Gracie -Grady -Graeme -Graham -Grant -Gratian -Grayson -Gregory -Greta -Greyson -Griffin -Griselda -Guadalupe -Guillermo -Gunner -Gustavo -Gwenda -Gwenevere -Hadley -Haidee -Hailee -Hailey -Hal -Haleigh -Haley -Hanna -Hannah -Happy -Harley -Harmony -Harper -Harrison -Hartley -Hayden -Haylee -Hayley -Haylie -Hazel -Heather -Heaven -Hector -Hedley -Heidi -Helen -Henderson -Henry -Hepsie -Hervey -Holden -Holly -Homer -Hope -Horatio -Hortensia -Hudson -Huffie -Hugo -Hunter -Ian -Iantha -Ileen -Imani -Innocent -Irene -Iris -Irvine -Isaac -Isabel -Isabella -Isabelle -Isaiah -Isaias -Isiah -Ismael -Israel -Issac -Itzel -Ivan -Ivy -Izabella -Izaiah -Jacaline -Jace -Jack -Jackson -Jacob -Jacoby -Jacqueline -Jacquetta -Jacqui -Jada -Jade -Jaden -Jadon -Jadyn -Jaelyn -Jaiden -Jaime -Jake -Jakki -Jakob -Jalen -Jamar -Jamari -Jamarion -James -Jameson -Jamie -Jamison -Jane -Janel -Janelle -Janette -Janie -Janina -Janine -Janiya -Janiyah -Jared -Jaslene -Jasmin -Jasmine -Jason -Jasper -Javier -Javon -Jaxon -Jaxson -Jay -Jayce -Jayda -Jayden -Jaydon -Jaye -Jayla -Jaylee -Jaylen -Jayne -Jaynie -Jayson -Jazlyn -Jazmin -Jazmine -Jeanna -Jeannie -Jeannine -Jeb -Jed -Jeffrey -Jemmy -Jenifer -Jenna -Jennie -Jennifer -Jera -Jere -Jeremiah -Jeremy -Jeri -Jermaine -Jerrie -Jerry -Jesse -Jessica -Jesus -Jillian -Jillie -Jim -Jimena -Jimmy -Joachim -Joanna -Joaquin -Jocelyn -Joe -Joel -Joetta -Joey -Johan -Johanna -John -Johnathan -Johnny -Joi -Jonah -Jonas -Jonathan -Jonathon -Joni -Jordan -Jordyn -Jorge -Jose -Joselyn -Joseph -Josepha -Josephine -Josh -Joshua -Josiah -Josie -Josue -Joye -Juan -Judah -Jude -Julia -Julian -Juliana -Julianna -Julie -Juliet -Julio -Julissa -Julius -July -Justice -Justin -Kade -Kaden -Kadence -Kaelea -Kaelyn -Kai -Kaiden -Kailey -Kailyn -Kaitlin -Kaitlyn -Kale -Kaleb -Kaleigh -Kameron -Kamryn -Kane -Kara -Karen -Karenza -Karina -Karla -Karly -Karson -Karyn -Kassidy -Kat -Kate -Katelyn -Katelynn -Katherine -Kathleen -Kathryn -Kathy -Katie -Katlyn -Kayden -Kaydence -Kayla -Kaylee -Kayleigh -Kaylie -Kaylin -Keagan -Keaton -Keegan -Keira -Keith -Kellen -Kellie -Kelly -Kelsey -Kelvin -Kendall -Kendra -Kennard -Kennedy -Kenneth -Kenzie -Kerena -Kerensa -Keturah -Kevin -Keziah -Khalil -Khloe -Kiana -Kiara -Kiera -Kiley -Kimberley -Kimberly -Kimora -Kingston -Kira -Kobe -Kolton -Kristen -Kristina -Kristopher -Kyla -Kyle -Kylee -Kyleigh -Kyler -Kylie -Kyra -Lacey -Lacy -Laila -Lakeisha -Lalla -Lana -Lance -Landen -Landon -Landyn -Lane -Lanny -Larry -Latanya -Launce -Laura -Lauren -Laurencia -Laurissa -Lauryn -Lawrence -Layla -Leah -Leeann -Leia -Leila -Leilani -Leland -Lena -Lennox -Leo -Leonardo -Leonel -Leroi -Leslie -Lesly -Lessie -Leta -Levi -Lexi -Lexia -Lexus -Lia -Liam -Lila -Lilah -Lilian -Liliana -Lillian -Lilliana -Lillie -Lilly -Lily -Lincoln -Linden -Lindsay -Lindsey -Lindsie -Lindy -Linton -Lizbeth -Lockie -Logan -Lola -London -Lorenzo -Loreto -Lori -Lorin -Lou -Louis -Luanne -Luca -Lucas -Lucia -Lucian -Lucy -Luis -Lukas -Luke -Luna -Luvenia -Lydia -Lyla -Lyndsey -Lynn -Lynsey -Lynwood -Lyric -Mabelle -Macey -Macie -Mackenzie -Macy -Madalyn -Maddison -Maddox -Madeleine -Madeline -Madelyn -Madelynn -Madilyn -Madison -Madisyn -Madyson -Maegan -Maggie -Makayla -Makenna -Makenzie -Malachi -Malcolm -Malia -Malik -Mallory -Manley -Manuel -Marc -Marcia -Marco -Marcos -Marcus -Marely -Margaret -Maria -Mariabella -Mariah -Mariana -Marilene -Mario -Marion -Marisol -Marissa -Marje -Marjory -Mark -Marlee -Marley -Marlowe -Marlyn -Marshall -Martin -Marvin -Mary -Maryann -Mason -Mateo -Mathew -Matthew -Maudie -Maurene -Maurice -Mauricio -Max -Maximilian -Maximus -Maxwell -May -Maya -Maynard -Mckenna -Mckenzie -Megan -Meghan -Mekhi -Melanie -Melany -Melissa -Melody -Melvin -Melvyn -Meredith -Merideth -Merrilyn -Meryl -Mia -Micah -Michael -Michaela -Micheal -Michelle -Miguel -Mikayla -Mike -Miles -Miley -Milo -Milton -Minnie -Miracle -Miranda -Miriam -Mitchell -Moises -Molly -Monica -Monna -Montague -Monte -Monty -Morgan -Moses -Muriel -Mya -Mylee -Myles -Myriam -Myrtie -Nadia -Nan -Nancy -Naomi -Nasir -Natalia -Natalie -Nataly -Natasha -Nathan -Nathaniel -Nayeli -Nehemiah -Nelle -Nelson -Nena -Nerissa -Netta -Nettie -Nevaeh -Nia -Nicholas -Nickolas -Nicolas -Nicole -Nikolas -Nina -Noah -Noel -Noelle -Nolan -Nonie -Nora -Norah -Nova -Nowell -Nydia -Nyla -Olive -Oliver -Olivia -Omar -Oralie -Orlando -Osbert -Osborn -Osborne -Oscar -Osmund -Owen -Pablo -Paget -Paige -Paisley -Paola -Paris -Parker -Patience -Patricia -Patrick -Patton -Paul -Pauleen -Paxton -Payton -Pedro -Pene -Penelope -Percival -Peregrine -Perla -Peter -Peyton -Pheobe -Philip -Phillip -Phoebe -Phoenix -Phyliss -Phyllida -Phyllis -Piper -Porsche -Porter -Presley -Preston -Priscilla -Prosper -Prue -Quanah -Quentin -Quiana -Quinn -Quinton -Rachael -Rachel -Raegan -Raelene -Rafael -Rain -Ramon -Randa -Randal -Randy -Rastus -Raul -Raymond -Rayner -Reagan -Rebecca -Rebeckah -Rebekah -Reece -Reed -Reene -Reese -Reid -Renie -Reuben -Rexana -Reynard -Rhetta -Ricardo -Rich -Richard -Richie -Rick -Rickena -Rickey -Rickie -Ricky -Rihanna -Riley -River -Robert -Roberto -Rocco -Rodger -Rodrigo -Roger -Roman -Romayne -Romeo -Ronald -Ronnette -Rosa -Roscoe -Rose -Rosemary -Roswell -Rowan -Roy -Royce -Ruben -Ruby -Rubye -Russell -Rusty -Ruth -Ryan -Ryder -Ryker -Rylan -Rylee -Ryleigh -Rylie -Sabella -Sabrina -Sachie -Sadie -Sage -Sal -Sally -Salvador -Sam -Samantha -Samara -Samuel -Sandra -Santiago -Sara -Sarah -Sarai -Saranna -Sasha -Saul -Savanna -Savannah -Sawyer -Scarlett -Scott -Scotty -Sean -Sebastian -Selena -Seneca -Serena -Serenity -Sergio -Seth -Seymour -Shan -Shana -Shane -Shanika -Shannah -Shannon -Shantae -Sharalyn -Sharla -Shaun -Shawn -Shayla -Shelby -Sheri -Sherie -Sherill -Sherri -Shiloh -Sienna -Sierra -Silas -Simon -Sissy -Skylar -Skyler -Sloan -Sofia -Solomon -Sophia -Sophie -Sorrel -Spencer -Spike -Star -Stella -Steph -Stephanie -Stephany -Stephen -Steven -Sue -Sukie -Summer -Sunshine -Susanna -Susannah -Suzan -Suzy -Sybil -Syd -Sydney -Talia -Talon -Tamika -Tamsin -Tania -Tanner -Tansy -Taryn -Tate -Tatiana -Tatum -Tatyanna -Taylor -Teagan -Tel -Terrell -Terry -Tessa -Theodore -Thomas -Tiffany -Timothy -Titus -Tod -Tolly -Tony -Topaz -Tori -Tracee -Tracey -Travis -Trent -Trenton -Trevor -Trey -Trinity -Tristan -Tristen -Triston -Troy -Tucker -Ty -Tye -Tyler -Tyson -Uland -Ulric -Ulyssa -Uriel -Valary -Valentina -Valeria -Valerie -Vanessa -Vaughn -Verna -Veronica -Victor -Victoria -Vince -Vincent -Vinnie -Violet -Vivian -Viviana -Vivyan -Walker -Walter -Ward -Warner -Wayne -Wendi -Wendy -Wesley -Weston -Whitaker -William -Willow -Willy -Winifred -Wisdom -Woodrow -Woody -Wyatt -Wynonna -Wynter -Xander -Xavier -Ximena -Yahir -Yasmin -Yolanda -Ysabel -Zachariah -Zachary -Zack -Zackary -Zander -Zane -Zayden -Zeke -Zelda -Zion -Zoe -Zoey +Aaden +Aaliyah +Aaron +Abby +Abel +Abigail +Abraham +Adam +Adan +Addison +Addyson +Adeline +Aden +Adolph +Adrian +Adriana +Adrianna +Aida +Aidan +Aiden +Aileen +Ainsley +Alaina +Alan +Alana +Alanna +Alayna +Albert +Alberto +Alden +Alec +Alejandra +Alejandro +Alessandra +Alex +Alexa +Alexander +Alexandra +Alexandria +Alexia +Alexis +Alexus +Alfred +Alfreda +Alfredo +Alger +Ali +Alice +Alicia +Alijah +Alina +Alisa +Alison +Alissa +Alisya +Alivia +Aliyah +Allegra +Allegria +Allen +Allie +Allison +Allisson +Allyson +Alma +Alondra +Alvin +Alysha +Alyson +Alyssa +Alyssia +Amanda +Amari +Amaryllis +Amaya +Amber +Ambrosine +Amelia +Amir +Amira +Amiyah +Amos +Amy +Amya +Ana +Anahi +Anastasia +Anaya +Anderson +Andre +Andrea +Andres +Andrew +Andy +Angel +Angela +Angelica +Angelina +Angelo +Angie +Aniya +Aniyah +Anjelica +Anna +Annabelle +Anne +Annie +Annika +Anthony +Antonio +Anya +April +Arabella +Archie +Ariana +Arianna +Ariel +Arielle +Arleen +Armando +Arn +Art +Arthur +Arturo +Asher +Ashley +Ashlie +Ashlyn +Ashlynn +Ashton +Asia +Astor +Athena +Aubree +Aubrey +Aubrie +Audrey +Audrina +August +Aurora +Austin +Autumn +Ava +Avalon +Averill +Avery +Axel +Ayden +Ayla +Bailey +Baldric +Barbra +Bartholomew +Baylee +Beau +Beckah +Beckett +Becky +Bella +Benjamin +Bennett +Bernice +Bertrand +Bethany +Bethney +Betsy +Bianca +Bidelia +Bill +Blake +Braden +Bradley +Brady +Braeden +Braiden +Brandon +Braxton +Brayan +Brayden +Braydon +Braylon +Breanna +Breanne +Brenda +Brendan +Brenden +Brenna +Brennan +Brett +Brian +Briana +Brianna +Bridget +Brielle +Brittani +Brittany +Brock +Brodie +Brody +Bronte +Brooke +Brooklyn +Brooklynn +Bruce +Bryan +Bryant +Bryce +Brycen +Brynn +Bryson +Burt +Byrne +Byron +Bysshe +Cade +Caden +Cadence +Caiden +Caitlin +Caitlyn +Calanthia +Caleb +Caleigh +Cali +Callie +Calvin +Camden +Cameron +Camila +Camille +Camron +Camryn +Candace +Candice +Candis +Canute +Cara +Carl +Carlos +Carly +Carlyle +Carmen +Carolina +Caroline +Carolyn +Carry +Carson +Carter +Caryl +Casey +Cash +Casimir +Cassandra +Cassian +Cassidy +Catherine +Cayden +Cecilia +Cecily +Celeste +Cesar +Chad +Chance +Chandler +Charles +Charlie +Charlotte +Charlton +Chase +Chelsea +Cherette +Cheri +Cherry +Cheyanne +Cheyenne +Chip +Chloe +Chris +Christa +Christian +Christiana +Christina +Christobel +Christopher +Ciara +Cindy +Claire +Clara +Claribel +Clark +Claudia +Claudius +Clayton +Clement +Cleveland +Cliff +Clinton +Clitus +Clover +Cody +Cohen +Colby +Cole +Colin +Collin +Colten +Colton +Conner +Connor +Cooper +Cora +Corbin +Coreen +Corey +Corrine +Cory +Courtney +Cristian +Cristopher +Cruz +Crystal +Curtis +Cy +Cynthia +Daisy +Dakota +Dallas +Dalton +Dalya +Damian +Damien +Damon +Dana +Dane +Danica +Daniel +Daniela +Daniella +Danielle +Danika +Danna +Danny +Dante +Darcey +Darell +Daria +Darin +Darius +Darren +David +Davion +Davis +Dawson +Dayana +Dayna +Dayton +Dean +Deandre +Deangelo +Debbi +Declan +Dee +Deena +Delaney +Delilah +Della +Delma +Denholm +Denise +Dennis +Denys +Derek +Derrick +Desiree +Desmond +Destiny +Devin +Devon +Diamond +Diana +Diego +Dillon +Dina +Dolores +Dominic +Dominick +Donald +Donella +Donna +Donny +Donovan +Dorian +Dorothy +Dortha +Douglas +Drake +Drew +Driscoll +Dulce +Duncan +Dustin +Dylan +Easter +Easton +Ebba +Eddie +Eden +Edgar +Eduardo +Edward +Edwin +Effie +Elaina +Eleanor +Elena +Eli +Eliana +Elias +Elijah +Eliot +Eliott +Elise +Eliza +Elizabeth +Ella +Elle +Ellie +Elliot +Elliott +Elric +Elspet +Elwood +Emanuel +Emely +Emerson +Emery +Emilee +Emilia +Emiliano +Emilio +Emily +Emma +Emmanuel +Enrique +Eric +Erica +Erick +Erik +Erika +Erin +Ermintrude +Ernesto +Esmeralda +Esteban +Esther +Estrella +Ethan +Eugenia +Euphemia +Eustace +Eva +Evan +Evangeline +Eveleen +Evelina +Evelyn +Everett +Ezekiel +Ezra +Fabian +Faith +Fatima +Fay +Felix +Fernanda +Fernando +Finn +Fiona +Fitz +Flick +Floella +Flora +Flossie +Fortune +Francesca +Francis +Francisco +Frank +Frankie +Franklin +Fulton +Gabriel +Gabriela +Gabriella +Gabrielle +Gael +Gage +Garret +Garrett +Gary +Gavin +Gaye +Gaylord +Genesis +Genette +Genevieve +George +Georgene +Georgia +Geraldine +Gerardo +Gervase +Gianna +Gina +Ginger +Giovanni +Giselle +Gladwyn +Glenna +Gloria +Goddard +Godwin +Goodwin +Gordon +Grace +Gracie +Grady +Graeme +Graham +Grant +Gratian +Grayson +Gregory +Greta +Greyson +Griffin +Griselda +Guadalupe +Guillermo +Gunner +Gustavo +Gwenda +Gwenevere +Hadley +Haidee +Hailee +Hailey +Hal +Haleigh +Haley +Hanna +Hannah +Happy +Harley +Harmony +Harper +Harrison +Hartley +Hayden +Haylee +Hayley +Haylie +Hazel +Heather +Heaven +Hector +Hedley +Heidi +Helen +Henderson +Henry +Hepsie +Hervey +Holden +Holly +Homer +Hope +Horatio +Hortensia +Hudson +Huffie +Hugo +Hunter +Ian +Iantha +Ileen +Imani +Innocent +Irene +Iris +Irvine +Isaac +Isabel +Isabella +Isabelle +Isaiah +Isaias +Isiah +Ismael +Israel +Issac +Itzel +Ivan +Ivy +Izabella +Izaiah +Jacaline +Jace +Jack +Jackson +Jacob +Jacoby +Jacqueline +Jacquetta +Jacqui +Jada +Jade +Jaden +Jadon +Jadyn +Jaelyn +Jaiden +Jaime +Jake +Jakki +Jakob +Jalen +Jamar +Jamari +Jamarion +James +Jameson +Jamie +Jamison +Jane +Janel +Janelle +Janette +Janie +Janina +Janine +Janiya +Janiyah +Jared +Jaslene +Jasmin +Jasmine +Jason +Jasper +Javier +Javon +Jaxon +Jaxson +Jay +Jayce +Jayda +Jayden +Jaydon +Jaye +Jayla +Jaylee +Jaylen +Jayne +Jaynie +Jayson +Jazlyn +Jazmin +Jazmine +Jeanna +Jeannie +Jeannine +Jeb +Jed +Jeffrey +Jemmy +Jenifer +Jenna +Jennie +Jennifer +Jera +Jere +Jeremiah +Jeremy +Jeri +Jermaine +Jerrie +Jerry +Jesse +Jessica +Jesus +Jillian +Jillie +Jim +Jimena +Jimmy +Joachim +Joanna +Joaquin +Jocelyn +Joe +Joel +Joetta +Joey +Johan +Johanna +John +Johnathan +Johnny +Joi +Jonah +Jonas +Jonathan +Jonathon +Joni +Jordan +Jordyn +Jorge +Jose +Joselyn +Joseph +Josepha +Josephine +Josh +Joshua +Josiah +Josie +Josue +Joye +Juan +Judah +Jude +Julia +Julian +Juliana +Julianna +Julie +Juliet +Julio +Julissa +Julius +July +Justice +Justin +Kade +Kaden +Kadence +Kaelea +Kaelyn +Kai +Kaiden +Kailey +Kailyn +Kaitlin +Kaitlyn +Kale +Kaleb +Kaleigh +Kameron +Kamryn +Kane +Kara +Karen +Karenza +Karina +Karla +Karly +Karson +Karyn +Kassidy +Kat +Kate +Katelyn +Katelynn +Katherine +Kathleen +Kathryn +Kathy +Katie +Katlyn +Kayden +Kaydence +Kayla +Kaylee +Kayleigh +Kaylie +Kaylin +Keagan +Keaton +Keegan +Keira +Keith +Kellen +Kellie +Kelly +Kelsey +Kelvin +Kendall +Kendra +Kennard +Kennedy +Kenneth +Kenzie +Kerena +Kerensa +Keturah +Kevin +Keziah +Khalil +Khloe +Kiana +Kiara +Kiera +Kiley +Kimberley +Kimberly +Kimora +Kingston +Kira +Kobe +Kolton +Kristen +Kristina +Kristopher +Kyla +Kyle +Kylee +Kyleigh +Kyler +Kylie +Kyra +Lacey +Lacy +Laila +Lakeisha +Lalla +Lana +Lance +Landen +Landon +Landyn +Lane +Lanny +Larry +Latanya +Launce +Laura +Lauren +Laurencia +Laurissa +Lauryn +Lawrence +Layla +Leah +Leeann +Leia +Leila +Leilani +Leland +Lena +Lennox +Leo +Leonardo +Leonel +Leroi +Leslie +Lesly +Lessie +Leta +Levi +Lexi +Lexia +Lexus +Lia +Liam +Lila +Lilah +Lilian +Liliana +Lillian +Lilliana +Lillie +Lilly +Lily +Lincoln +Linden +Lindsay +Lindsey +Lindsie +Lindy +Linton +Lizbeth +Lockie +Logan +Lola +London +Lorenzo +Loreto +Lori +Lorin +Lou +Louis +Luanne +Luca +Lucas +Lucia +Lucian +Lucy +Luis +Lukas +Luke +Luna +Luvenia +Lydia +Lyla +Lyndsey +Lynn +Lynsey +Lynwood +Lyric +Mabelle +Macey +Macie +Mackenzie +Macy +Madalyn +Maddison +Maddox +Madeleine +Madeline +Madelyn +Madelynn +Madilyn +Madison +Madisyn +Madyson +Maegan +Maggie +Makayla +Makenna +Makenzie +Malachi +Malcolm +Malia +Malik +Mallory +Manley +Manuel +Marc +Marcia +Marco +Marcos +Marcus +Marely +Margaret +Maria +Mariabella +Mariah +Mariana +Marilene +Mario +Marion +Marisol +Marissa +Marje +Marjory +Mark +Marlee +Marley +Marlowe +Marlyn +Marshall +Martin +Marvin +Mary +Maryann +Mason +Mateo +Mathew +Matthew +Maudie +Maurene +Maurice +Mauricio +Max +Maximilian +Maximus +Maxwell +May +Maya +Maynard +Mckenna +Mckenzie +Megan +Meghan +Mekhi +Melanie +Melany +Melissa +Melody +Melvin +Melvyn +Meredith +Merideth +Merrilyn +Meryl +Mia +Micah +Michael +Michaela +Micheal +Michelle +Miguel +Mikayla +Mike +Miles +Miley +Milo +Milton +Minnie +Miracle +Miranda +Miriam +Mitchell +Moises +Molly +Monica +Monna +Montague +Monte +Monty +Morgan +Moses +Muriel +Mya +Mylee +Myles +Myriam +Myrtie +Nadia +Nan +Nancy +Naomi +Nasir +Natalia +Natalie +Nataly +Natasha +Nathan +Nathaniel +Nayeli +Nehemiah +Nelle +Nelson +Nena +Nerissa +Netta +Nettie +Nevaeh +Nia +Nicholas +Nickolas +Nicolas +Nicole +Nikolas +Nina +Noah +Noel +Noelle +Nolan +Nonie +Nora +Norah +Nova +Nowell +Nydia +Nyla +Olive +Oliver +Olivia +Omar +Oralie +Orlando +Osbert +Osborn +Osborne +Oscar +Osmund +Owen +Pablo +Paget +Paige +Paisley +Paola +Paris +Parker +Patience +Patricia +Patrick +Patton +Paul +Pauleen +Paxton +Payton +Pedro +Pene +Penelope +Percival +Peregrine +Perla +Peter +Peyton +Pheobe +Philip +Phillip +Phoebe +Phoenix +Phyliss +Phyllida +Phyllis +Piper +Porsche +Porter +Presley +Preston +Priscilla +Prosper +Prue +Quanah +Quentin +Quiana +Quinn +Quinton +Rachael +Rachel +Raegan +Raelene +Rafael +Rain +Ramon +Randa +Randal +Randy +Rastus +Raul +Raymond +Rayner +Reagan +Rebecca +Rebeckah +Rebekah +Reece +Reed +Reene +Reese +Reid +Renie +Reuben +Rexana +Reynard +Rhetta +Ricardo +Rich +Richard +Richie +Rick +Rickena +Rickey +Rickie +Ricky +Rihanna +Riley +River +Robert +Roberto +Rocco +Rodger +Rodrigo +Roger +Roman +Romayne +Romeo +Ronald +Ronnette +Rosa +Roscoe +Rose +Rosemary +Roswell +Rowan +Roy +Royce +Ruben +Ruby +Rubye +Russell +Rusty +Ruth +Ryan +Ryder +Ryker +Rylan +Rylee +Ryleigh +Rylie +Sabella +Sabrina +Sachie +Sadie +Sage +Sal +Sally +Salvador +Sam +Samantha +Samara +Samuel +Sandra +Santiago +Sara +Sarah +Sarai +Saranna +Sasha +Saul +Savanna +Savannah +Sawyer +Scarlett +Scott +Scotty +Sean +Sebastian +Selena +Seneca +Serena +Serenity +Sergio +Seth +Seymour +Shan +Shana +Shane +Shanika +Shannah +Shannon +Shantae +Sharalyn +Sharla +Shaun +Shawn +Shayla +Shelby +Sheri +Sherie +Sherill +Sherri +Shiloh +Sienna +Sierra +Silas +Simon +Sissy +Skylar +Skyler +Sloan +Sofia +Solomon +Sophia +Sophie +Sorrel +Spencer +Spike +Star +Stella +Steph +Stephanie +Stephany +Stephen +Steven +Sue +Sukie +Summer +Sunshine +Susanna +Susannah +Suzan +Suzy +Sybil +Syd +Sydney +Talia +Talon +Tamika +Tamsin +Tania +Tanner +Tansy +Taryn +Tate +Tatiana +Tatum +Tatyanna +Taylor +Teagan +Tel +Terrell +Terry +Tessa +Theodore +Thomas +Tiffany +Timothy +Titus +Tod +Tolly +Tony +Topaz +Tori +Tracee +Tracey +Travis +Trent +Trenton +Trevor +Trey +Trinity +Tristan +Tristen +Triston +Troy +Tucker +Ty +Tye +Tyler +Tyson +Uland +Ulric +Ulyssa +Uriel +Valary +Valentina +Valeria +Valerie +Vanessa +Vaughn +Verna +Veronica +Victor +Victoria +Vince +Vincent +Vinnie +Violet +Vivian +Viviana +Vivyan +Walker +Walter +Ward +Warner +Wayne +Wendi +Wendy +Wesley +Weston +Whitaker +William +Willow +Willy +Winifred +Wisdom +Woodrow +Woody +Wyatt +Wynonna +Wynter +Xander +Xavier +Ximena +Yahir +Yasmin +Yolanda +Ysabel +Zachariah +Zachary +Zack +Zackary +Zander +Zane +Zayden +Zeke +Zelda +Zion +Zoe +Zoey Zune \ No newline at end of file diff --git a/strings/names/first_female.txt b/strings/names/first_female.txt index 6710c1bfc3..038e936879 100644 --- a/strings/names/first_female.txt +++ b/strings/names/first_female.txt @@ -1,771 +1,771 @@ -Aaliyah -Abby -Abigail -Addison -Addyson -Adeline -Adriana -Adrianna -Aida -Aileen -Ainsley -Alaina -Alana -Alanna -Alayna -Alejandra -Alessandra -Alexa -Alexandra -Alexandria -Alexia -Alexis -Alexus -Alfreda -Alice -Alicia -Alina -Alisa -Alison -Alissa -Alisya -Alivia -Aliyah -Allegra -Allegria -Allie -Allison -Allisson -Allyson -Alma -Alondra -Alysha -Alyson -Alyssa -Alyssia -Amanda -Amari -Amaryllis -Amaya -Amber -Ambrosine -Amelia -Amira -Amiyah -Amy -Amya -Ana -Anahi -Anastasia -Anaya -Andrea -Angel -Angela -Angelica -Angelina -Angie -Aniya -Aniyah -Anjelica -Anna -Annabelle -Anne -Annie -Annika -Anya -April -Arabella -Ariana -Arianna -Ariel -Arielle -Arleen -Ashley -Ashlie -Ashlyn -Ashlynn -Asia -Astor -Athena -Aubree -Aubrey -Aubrie -Audrey -Audrina -Aurora -Autumn -Ava -Avalona -Averill -Avery -Ayla -Bailey -Barbara -Baylee -Beckah -Becky -Bella -Bernice -Bethany -Bethney -Betsy -Bianca -Bidelia -Breanna -Breanne -Brenda -Brenna -Briana -Brianna -Bridget -Brielle -Brittani -Brittany -Brooke -Brooklyn -Brooklynn -Brynn -Cadence -Caitlin -Caitlyn -Calanthia -Caleigh -Cali -Callie -Cameron -Camila -Camille -Camryn -Candace -Candice -Cara -Carly -Carlyle -Carmen -Carolina -Caroline -Carolyn -Carry -Caryl -Casey -Cassandra -Cassidy -Catherine -Cecilia -Cecily -Celeste -Charlotte -Chelsea -Cherette -Cheri -Cherry -Cheyanne -Cheyenne -Chloe -Christa -Christiana -Christina -Christobelle -Ciara -Cindy -Claire -Clara -Claribel -Claudia -Clover -Cora -Coreen -Corrine -Courtney -Crystal -Cynthia -Daisy -Dakota -Dalya -Dana -Danica -Daniela -Daniella -Danielle -Danika -Danna -Daria -Dayana -Dayna -Debbi -Dee -Deena -Delaney -Delilah -Della -Delma -Denise -Denys -Desiree -Destiny -Diamond -Diana -Dina -Dolores -Donella -Donna -Dorothy -Dortha -Dulce -Easter -Ebba -Eden -Effie -Elaina -Eleanor -Elena -Eliana -Elise -Eliza -Elizabeth -Ella -Elle -Ellie -Emely -Emerson -Emery -Emilee -Emilia -Emily -Emma -Erica -Erika -Erin -Ermintrude -Esmeralda -Esther -Estrella -Eugenia -Euphemia -Eustace -Eva -Evangeline -Eveleen -Evelina -Evelyn -Faith -Fatima -Fay -Fernanda -Fiona -Floella -Flora -Flossie -Fortune -Francesca -Gabriela -Gabriella -Gabrielle -Genette -Genevieve -Georgene -Georgia -Geraldine -Gervase -Gianna -Gina -Ginger -Giselle -Gladwyn -Glenna -Gloria -Grace -Gracie -Greta -Griselda -Guadalupe -Gwenda -Gwenevere -Hadley -Haidee -Hailee -Hailey -Hal -Haleigh -Haley -Hanna -Hannah -Harley -Harmony -Harper -Hayden -Haylee -Hayley -Haylie -Hazel -Heather -Heaven -Hedley -Heidi -Helen -Hepsie -Holly -Hope -Hortensia -Iantha -Ileen -Imani -Innocent -Irene -Iris -Isabel -Isabella -Isabelle -Itzel -Ivy -Izabella -Jacaline -Jacqueline -Jacquetta -Jacqui -Jada -Jade -Jaden -Jadyn -Jaelyn -Jakki -Jalen -Jamie -Jane -Janelle -Janette -Janie -Janina -Janine -Janiya -Janiyah -Jaslene -Jasmin -Jasmine -Jayda -Jayden -Jayla -Jaylee -Jaynie -Jazlyn -Jazmin -Jazmine -Jeanna -Jeannie -Jeannine -Jenifer -Jenna -Jennie -Jennifer -Jera -Jere -Jeri -Jessica -Jillian -Jillie -Jimena -Joanna -Jocelyn -Joetta -Johanna -Joi -Joni -Jordan -Jordyn -Joselyn -Josepha -Josephine -Josie -Joye -Julia -Juliana -Julianna -Julie -Juliet -Julissa -July -Kadence -Kaelea -Kaelyn -Kailey -Kailyn -Kaitlin -Kaitlyn -Kaleigh -Kamryn -Kara -Karen -Karenza -Karina -Karla -Karly -Karyn -Kassidy -Kat -Kate -Katelyn -Katelynn -Katherine -Kathleen -Kathryn -Kathy -Katie -Katlyn -Kayden -Kaydence -Kayla -Kaylee -Kayleigh -Kaylie -Kaylin -Keegan -Keira -Keith -Kellie -Kelly -Kelsey -Kendall -Kendra -Kennedy -Kenzie -Kerena -Kerensa -Keturah -Khloe -Kiana -Kiara -Kiera -Kiley -Kimberley -Kimberly -Kimora -Kira -Kristen -Kristina -Kyla -Kylee -Kyleigh -Kylie -Kyra -Lacey -Lacy -Laila -Lakeisha -Lalla -Lana -Latanya -Laura -Lauren -Laurencia -Laurissa -Lauryn -Layla -Leah -Leeann -Leia -Leila -Leilani -Lena -Leslie -Lesly -Lessie -Leta -Lexi -Lexia -Lexus -Lia -Lila -Lilah -Lilian -Liliana -Lillian -Lilliana -Lillie -Lilly -Lily -Lindsay -Lindsey -Lindsie -Lindy -Lizbeth -Lockie -Logan -Lola -London -Lori -Lorin -Luanne -Lucia -Lucian -Lucy -Luna -Luvenia -Lydia -Lyla -Lyndsey -Lynn -Lynsey -Lynwood -Lyric -Mabelle -Macey -Macie -Mackenzie -Macy -Madalyn -Maddison -Madeleine -Madeline -Madelyn -Madelynn -Madilyn -Madison -Madisyn -Madyson -Maegan -Maggie -Makayla -Makenna -Makenzie -Malia -Mallory -Marcia -Marely -Margaret -Maria -Mariabella -Mariah -Mariana -Marilene -Marion -Marisol -Marissa -Marje -Marjory -Marlee -Marley -Marlowe -Marlyn -Marshall -Mary -Maryann -Maudie -Maurene -May -Maya -Mckenna -Mckenzie -Megan -Meghan -Melanie -Melany -Melissa -Melody -Meredith -Merideth -Merrilyn -Meryl -Mia -Michaela -Michelle -Mikayla -Miley -Minnie -Miracle -Miranda -Miriam -Molly -Monica -Monna -Morgan -Muriel -Mya -Mylee -Myriam -Myrtie -Nadia -Nan -Nancy -Naomi -Natalia -Natalie -Nataly -Natasha -Nayeli -Nelle -Nena -Nerissa -Netta -Nettie -Nevaeh -Nia -Nicole -Nina -Noelle -Nonie -Nora -Norah -Nova -Nowell -Nydia -Nyla -Olive -Olivia -Oralie -Paige -Paisley -Paola -Paris -Patience -Patricia -Pauleen -Payton -Pene -Penelope -Peregrine -Perla -Peyton -Pheobe -Phoebe -Phyliss -Phyllida -Phyllis -Piper -Porsche -Presley -Priscilla -Prosper -Prue -Quanah -Quiana -Rachael -Rachel -Raegan -Raelene -Rain -Randa -Randal -Reagan -Rebecca -Rebeckah -Rebekah -Reene -Reese -Renie -Rexana -Rhetta -Rihanna -Riley -Ronnette -Rosa -Rose -Rosemary -Rowan -Ruby -Rubye -Ruth -Rylee -Ryleigh -Rylie -Sabella -Sabrina -Sachie -Sadie -Sage -Sally -Samantha -Samara -Sandra -Sara -Sarah -Sarai -Saranna -Sasha -Savanna -Savannah -Scarlett -Selena -Seneca -Serena -Serenity -Shana -Shanika -Shannah -Shannon -Shantae -Sharalyn -Sharla -Shayla -Shelby -Sheri -Sherie -Sherill -Sherri -Sienna -Sierra -Sissy -Skylar -Skyler -Sofia -Sophia -Sophie -Star -Stella -Steph -Stephanie -Stephany -Sue -Sukie -Summer -Sunshine -Susanna -Susannah -Suzan -Suzy -Sydney -Talia -Tamika -Tania -Tansy -Taryn -Tatiana -Tatum -Tatyanna -Taylor -Teagan -Tessa -Tiffany -Tolly -Topaz -Tori -Tracee -Tracey -Trinity -Ulyssa -Valary -Valentina -Valeria -Valerie -Vanessa -Verna -Veronica -Victoria -Vinnie -Violet -Vivian -Viviana -Vivyan -Wendi -Wendy -Willow -Wisdom -Wynonna -Wynter -Ximena -Yasmin -Yolanda -Ysabel -Zelda -Zoe -Zoey +Aaliyah +Abby +Abigail +Addison +Addyson +Adeline +Adriana +Adrianna +Aida +Aileen +Ainsley +Alaina +Alana +Alanna +Alayna +Alejandra +Alessandra +Alexa +Alexandra +Alexandria +Alexia +Alexis +Alexus +Alfreda +Alice +Alicia +Alina +Alisa +Alison +Alissa +Alisya +Alivia +Aliyah +Allegra +Allegria +Allie +Allison +Allisson +Allyson +Alma +Alondra +Alysha +Alyson +Alyssa +Alyssia +Amanda +Amari +Amaryllis +Amaya +Amber +Ambrosine +Amelia +Amira +Amiyah +Amy +Amya +Ana +Anahi +Anastasia +Anaya +Andrea +Angel +Angela +Angelica +Angelina +Angie +Aniya +Aniyah +Anjelica +Anna +Annabelle +Anne +Annie +Annika +Anya +April +Arabella +Ariana +Arianna +Ariel +Arielle +Arleen +Ashley +Ashlie +Ashlyn +Ashlynn +Asia +Astor +Athena +Aubree +Aubrey +Aubrie +Audrey +Audrina +Aurora +Autumn +Ava +Avalona +Averill +Avery +Ayla +Bailey +Barbara +Baylee +Beckah +Becky +Bella +Bernice +Bethany +Bethney +Betsy +Bianca +Bidelia +Breanna +Breanne +Brenda +Brenna +Briana +Brianna +Bridget +Brielle +Brittani +Brittany +Brooke +Brooklyn +Brooklynn +Brynn +Cadence +Caitlin +Caitlyn +Calanthia +Caleigh +Cali +Callie +Cameron +Camila +Camille +Camryn +Candace +Candice +Cara +Carly +Carlyle +Carmen +Carolina +Caroline +Carolyn +Carry +Caryl +Casey +Cassandra +Cassidy +Catherine +Cecilia +Cecily +Celeste +Charlotte +Chelsea +Cherette +Cheri +Cherry +Cheyanne +Cheyenne +Chloe +Christa +Christiana +Christina +Christobelle +Ciara +Cindy +Claire +Clara +Claribel +Claudia +Clover +Cora +Coreen +Corrine +Courtney +Crystal +Cynthia +Daisy +Dakota +Dalya +Dana +Danica +Daniela +Daniella +Danielle +Danika +Danna +Daria +Dayana +Dayna +Debbi +Dee +Deena +Delaney +Delilah +Della +Delma +Denise +Denys +Desiree +Destiny +Diamond +Diana +Dina +Dolores +Donella +Donna +Dorothy +Dortha +Dulce +Easter +Ebba +Eden +Effie +Elaina +Eleanor +Elena +Eliana +Elise +Eliza +Elizabeth +Ella +Elle +Ellie +Emely +Emerson +Emery +Emilee +Emilia +Emily +Emma +Erica +Erika +Erin +Ermintrude +Esmeralda +Esther +Estrella +Eugenia +Euphemia +Eustace +Eva +Evangeline +Eveleen +Evelina +Evelyn +Faith +Fatima +Fay +Fernanda +Fiona +Floella +Flora +Flossie +Fortune +Francesca +Gabriela +Gabriella +Gabrielle +Genette +Genevieve +Georgene +Georgia +Geraldine +Gervase +Gianna +Gina +Ginger +Giselle +Gladwyn +Glenna +Gloria +Grace +Gracie +Greta +Griselda +Guadalupe +Gwenda +Gwenevere +Hadley +Haidee +Hailee +Hailey +Hal +Haleigh +Haley +Hanna +Hannah +Harley +Harmony +Harper +Hayden +Haylee +Hayley +Haylie +Hazel +Heather +Heaven +Hedley +Heidi +Helen +Hepsie +Holly +Hope +Hortensia +Iantha +Ileen +Imani +Innocent +Irene +Iris +Isabel +Isabella +Isabelle +Itzel +Ivy +Izabella +Jacaline +Jacqueline +Jacquetta +Jacqui +Jada +Jade +Jaden +Jadyn +Jaelyn +Jakki +Jalen +Jamie +Jane +Janelle +Janette +Janie +Janina +Janine +Janiya +Janiyah +Jaslene +Jasmin +Jasmine +Jayda +Jayden +Jayla +Jaylee +Jaynie +Jazlyn +Jazmin +Jazmine +Jeanna +Jeannie +Jeannine +Jenifer +Jenna +Jennie +Jennifer +Jera +Jere +Jeri +Jessica +Jillian +Jillie +Jimena +Joanna +Jocelyn +Joetta +Johanna +Joi +Joni +Jordan +Jordyn +Joselyn +Josepha +Josephine +Josie +Joye +Julia +Juliana +Julianna +Julie +Juliet +Julissa +July +Kadence +Kaelea +Kaelyn +Kailey +Kailyn +Kaitlin +Kaitlyn +Kaleigh +Kamryn +Kara +Karen +Karenza +Karina +Karla +Karly +Karyn +Kassidy +Kat +Kate +Katelyn +Katelynn +Katherine +Kathleen +Kathryn +Kathy +Katie +Katlyn +Kayden +Kaydence +Kayla +Kaylee +Kayleigh +Kaylie +Kaylin +Keegan +Keira +Keith +Kellie +Kelly +Kelsey +Kendall +Kendra +Kennedy +Kenzie +Kerena +Kerensa +Keturah +Khloe +Kiana +Kiara +Kiera +Kiley +Kimberley +Kimberly +Kimora +Kira +Kristen +Kristina +Kyla +Kylee +Kyleigh +Kylie +Kyra +Lacey +Lacy +Laila +Lakeisha +Lalla +Lana +Latanya +Laura +Lauren +Laurencia +Laurissa +Lauryn +Layla +Leah +Leeann +Leia +Leila +Leilani +Lena +Leslie +Lesly +Lessie +Leta +Lexi +Lexia +Lexus +Lia +Lila +Lilah +Lilian +Liliana +Lillian +Lilliana +Lillie +Lilly +Lily +Lindsay +Lindsey +Lindsie +Lindy +Lizbeth +Lockie +Logan +Lola +London +Lori +Lorin +Luanne +Lucia +Lucian +Lucy +Luna +Luvenia +Lydia +Lyla +Lyndsey +Lynn +Lynsey +Lynwood +Lyric +Mabelle +Macey +Macie +Mackenzie +Macy +Madalyn +Maddison +Madeleine +Madeline +Madelyn +Madelynn +Madilyn +Madison +Madisyn +Madyson +Maegan +Maggie +Makayla +Makenna +Makenzie +Malia +Mallory +Marcia +Marely +Margaret +Maria +Mariabella +Mariah +Mariana +Marilene +Marion +Marisol +Marissa +Marje +Marjory +Marlee +Marley +Marlowe +Marlyn +Marshall +Mary +Maryann +Maudie +Maurene +May +Maya +Mckenna +Mckenzie +Megan +Meghan +Melanie +Melany +Melissa +Melody +Meredith +Merideth +Merrilyn +Meryl +Mia +Michaela +Michelle +Mikayla +Miley +Minnie +Miracle +Miranda +Miriam +Molly +Monica +Monna +Morgan +Muriel +Mya +Mylee +Myriam +Myrtie +Nadia +Nan +Nancy +Naomi +Natalia +Natalie +Nataly +Natasha +Nayeli +Nelle +Nena +Nerissa +Netta +Nettie +Nevaeh +Nia +Nicole +Nina +Noelle +Nonie +Nora +Norah +Nova +Nowell +Nydia +Nyla +Olive +Olivia +Oralie +Paige +Paisley +Paola +Paris +Patience +Patricia +Pauleen +Payton +Pene +Penelope +Peregrine +Perla +Peyton +Pheobe +Phoebe +Phyliss +Phyllida +Phyllis +Piper +Porsche +Presley +Priscilla +Prosper +Prue +Quanah +Quiana +Rachael +Rachel +Raegan +Raelene +Rain +Randa +Randal +Reagan +Rebecca +Rebeckah +Rebekah +Reene +Reese +Renie +Rexana +Rhetta +Rihanna +Riley +Ronnette +Rosa +Rose +Rosemary +Rowan +Ruby +Rubye +Ruth +Rylee +Ryleigh +Rylie +Sabella +Sabrina +Sachie +Sadie +Sage +Sally +Samantha +Samara +Sandra +Sara +Sarah +Sarai +Saranna +Sasha +Savanna +Savannah +Scarlett +Selena +Seneca +Serena +Serenity +Shana +Shanika +Shannah +Shannon +Shantae +Sharalyn +Sharla +Shayla +Shelby +Sheri +Sherie +Sherill +Sherri +Sienna +Sierra +Sissy +Skylar +Skyler +Sofia +Sophia +Sophie +Star +Stella +Steph +Stephanie +Stephany +Sue +Sukie +Summer +Sunshine +Susanna +Susannah +Suzan +Suzy +Sydney +Talia +Tamika +Tania +Tansy +Taryn +Tatiana +Tatum +Tatyanna +Taylor +Teagan +Tessa +Tiffany +Tolly +Topaz +Tori +Tracee +Tracey +Trinity +Ulyssa +Valary +Valentina +Valeria +Valerie +Vanessa +Verna +Veronica +Victoria +Vinnie +Violet +Vivian +Viviana +Vivyan +Wendi +Wendy +Willow +Wisdom +Wynonna +Wynter +Ximena +Yasmin +Yolanda +Ysabel +Zelda +Zoe +Zoey Zune \ No newline at end of file diff --git a/strings/names/first_male.txt b/strings/names/first_male.txt index b86722dbaf..928958d1a9 100644 --- a/strings/names/first_male.txt +++ b/strings/names/first_male.txt @@ -1,668 +1,668 @@ -Aaden -Aaron -Abel -Abraham -Adam -Adan -Aden -Adolph -Adrian -Aidan -Aiden -Alan -Albert -Alberto -Alden -Alec -Alejandro -Alex -Alexander -Alexis -Alfred -Alfredo -Alger -Ali -Alijah -Allen -Alvin -Amari -Amir -Amos -Anderson -Andre -Andres -Andrew -Andy -Angel -Angelo -Anthony -Antonio -Apple -Archie -Armando -Arnie -Art -Arthur -Arturo -Asher -Ashton -August -Austin -Avery -Axel -Ayden -Baldric -Bartholomew -Beau -Beckett -Benjamin -Bennett -Bill -Blake -Braden -Bradley -Brady -Braeden -Braiden -Brandon -Braxton -Brayan -Brayden -Braydon -Braylon -Brendan -Brenden -Brennan -Brett -Brian -Brick -Brock -Brodie -Brody -Bronte -Bruce -Bryan -Bryant -Bryce -Brycen -Bryson -Buck -Burt -Butch -Byrne -Byron -Cade -Caden -Caiden -Caleb -Calvin -Camden -Cameron -Camron -Camryn -Carl -Carlos -Carson -Carter -Casey -Cash -Casimir -Cassian -Cayden -Cesar -Chad -Chance -Chandler -Charles -Charlie -Charlton -Chase -Chip -Chris -Christian -Christopher -Clark -Claudius -Clayton -Clement -Cletus -Cleveland -Cliff -Clinton -Cody -Cohen -Colby -Cole -Colin -Collin -Colten -Colton -Conner -Connor -Cooper -Corbin -Corey -Cory -Cristian -Cristopher -Crush -Cruz -Curtis -Cy -Dakota -Dallas -Dalton -Damian -Damien -Damon -Dane -Daniel -Danny -Dante -Darcey -Darell -Darin -Darius -Darren -David -Davion -Davis -Dawson -Dayton -Dean -Deandre -Deangelo -Declan -Denholm -Dennis -Derek -Derrick -Desmond -Devin -Devon -Diego -Dillon -Dirk -Dominic -Dominick -Donald -Donny -Donovan -Douglas -Drake -Drew -Driscoll -Duke -Duncan -Dustin -Dylan -Easton -Eddie -Edgar -Eduardo -Edward -Edwin -Eli -Elias -Elijah -Eliot -Eliott -Elliot -Elliott -Elric -Elwood -Emanuel -Emerson -Emiliano -Emilio -Emmanuel -Enrique -Eric -Erick -Erik -Ernesto -Esteban -Ethan -Evan -Everett -Ezekiel -Ezra -Fabian -Felix -Fenton -Fernando -Finn -Fitz -Flick -Flint -Flip -Francis -Francisco -Frank -Frankie -Franklin -Fridge -Fulton -Gabriel -Gael -Gage -Gannon -Garret -Garrett -Gary -Gavin -George -Gerardo -Giovanni -Goddard -Godwin -Goodwin -Gordon -Grady -Graeme -Graham -Grandpa -Grant -Gratian -Grayson -Gregory -Grendel -Greyson -Griffin -Guillermo -Gunner -Gustavo -Han -Harrison -Harry -Hartley -Harvey -Hayden -Hector -Henderson -Henry -Holden -Homer -Horatio -Hudson -Huffie -Hugo -Hungry -Hunter -Ian -Irvine -Isaac -Isaiah -Isaias -Isiah -Ismael -Israel -Issac -Ivan -Izaiah -Jace -Jack -Jackson -Jacob -Jacoby -Jaden -Jadon -Jaiden -Jaime -Jake -Jakob -Jalen -Jamar -Jamari -Jamarion -James -Jameson -Jamie -Jamison -Janel -Jared -Jason -Jasper -Javier -Javon -Jaxon -Jaxson -Jay -Jayce -Jayden -Jaydon -Jaye -Jaylen -Jayne -Jayson -Jean-Luc -Jeb -Jed -Jeffrey -Jemmy -Jeremiah -Jeremy -Jermaine -Jerrie -Jerry -Jesse -Jesus -Jim -Jimmy -Joachim -Joaquin -Joe -Joel -Joey -Johan -John -Johnathan -Johnny -Jonah -Jonas -Jonathan -Jonathon -Jordan -Jorge -Jose -Joseph -Josh -Joshua -Josiah -Josue -Juan -Judah -Jude -Julian -Julio -Julius -Justice -Justin -Kade -Kaden -Kai -Kaiden -Kale -Kaleb -Kameron -Kane -Karson -Kayden -Keagan -Keaton -Keegan -Keith -Kellen -Kelvin -Kennard -Kenneth -Kevin -Keziah -Khalil -Kingston -Kobe -Kolton -Kristopher -Kyle -Kyler -Lance -Landen -Lando -Landon -Landyn -Lane -Lanny -Larry -Launce -Lawrence -Leland -Lennox -Lenny -Leo -Leonard -Leonardo -Leonel -Leroy -Levi -Liam -Lief -Lincoln -Linden -Linton -Logan -Lorde -Lorenzo -Loreto -Lou -Louis -Luca -Lucas -Luis -Lukas -Luke -Maddox -Malachi -Malcolm -Malik -Manley -Manuel -Marc -Marco -Marcos -Marcus -Mario -Marion -Mark -Marshall -Martin -Marvin -Mason -Mateo -Mathew -Matthew -Maurice -Mauricio -Max -Maximilian -Maximus -Maxwell -Maynard -Mekhi -Melvin -Melvyn -Micah -Michael -Micheal -Miguel -Mike -Miles -Milo -Milton -Mitchell -Moises -Montague -Monte -Monty -Morgan -Moses -Myles -Nasir -Nat -Nathan -Nathaniel -Nehemiah -Nelson -Nicholas -Nick -Nickolas -Nicolas -Nikolas -Noah -Noel -Nolan -Oliver -Omar -Opie -Orlando -Osbert -Osborn -Osborne -Oscar -Osmund -Oswald -Owen -Pablo -Paget -Parker -Patrick -Patton -Paul -Paxton -Payton -Pedro -Percival -Persh -Peter -Peyton -Philip -Phillip -Phoenix -Porter -Preston -Quentin -Quinn -Quinton -Rafael -Ramon -Randy -Rastus -Raul -Raymond -Rayner -Reece -Reed -Reese -Reid -Reuben -Reynard -Ricardo -Richard -Ricky -Riley -River -Robert -Roberto -Rocco -Rodger -Rodrigo -Roger -Roman -Romayne -Romeo -Ronald -Roscoe -Roswell -Rowan -Roy -Royce -Rube -Ruben -Russell -Rusty -Ryan -Ryder -Ryker -Rylan -Sal -Salvador -Sam -Samuel -Santiago -Saul -Sawyer -Scott -Scotty -Sean -Sebastian -Sergio -Seth -Seymour -Shane -Shaun -Shawn -Shiloh -Silas -Simon -Skyler -Sloan -Smoke -Solomon -Sorrel -Spencer -Spike -Stephen -Steven -Sybil -Syd -Talon -Tamsin -Tanner -Tate -Taylor -Tel -Terrell -Terry -Theodore -Thomas -Tim -Timothy -Titus -Todd -Tony -Travis -Trent -Trenton -Trevor -Trey -Trip -Tristan -Tristen -Triston -Troy -Tucker -Ty -Tye -Tyler -Tyson -Uland -Ulric -Uriel -Vaughn -Victor -Vince -Vincent -Vinny -Walker -Walter -Ward -Warner -Wayne -Wesley -Weston -Whitaker -William -Willy -Woodrow -Wyatt -Xander -Xavier -Yahir -Zachariah -Zachary -Zack -Zackary -Zander -Zane -Zayden -Zeke +Aaden +Aaron +Abel +Abraham +Adam +Adan +Aden +Adolph +Adrian +Aidan +Aiden +Alan +Albert +Alberto +Alden +Alec +Alejandro +Alex +Alexander +Alexis +Alfred +Alfredo +Alger +Ali +Alijah +Allen +Alvin +Amari +Amir +Amos +Anderson +Andre +Andres +Andrew +Andy +Angel +Angelo +Anthony +Antonio +Apple +Archie +Armando +Arnie +Art +Arthur +Arturo +Asher +Ashton +August +Austin +Avery +Axel +Ayden +Baldric +Bartholomew +Beau +Beckett +Benjamin +Bennett +Bill +Blake +Braden +Bradley +Brady +Braeden +Braiden +Brandon +Braxton +Brayan +Brayden +Braydon +Braylon +Brendan +Brenden +Brennan +Brett +Brian +Brick +Brock +Brodie +Brody +Bronte +Bruce +Bryan +Bryant +Bryce +Brycen +Bryson +Buck +Burt +Butch +Byrne +Byron +Cade +Caden +Caiden +Caleb +Calvin +Camden +Cameron +Camron +Camryn +Carl +Carlos +Carson +Carter +Casey +Cash +Casimir +Cassian +Cayden +Cesar +Chad +Chance +Chandler +Charles +Charlie +Charlton +Chase +Chip +Chris +Christian +Christopher +Clark +Claudius +Clayton +Clement +Cletus +Cleveland +Cliff +Clinton +Cody +Cohen +Colby +Cole +Colin +Collin +Colten +Colton +Conner +Connor +Cooper +Corbin +Corey +Cory +Cristian +Cristopher +Crush +Cruz +Curtis +Cy +Dakota +Dallas +Dalton +Damian +Damien +Damon +Dane +Daniel +Danny +Dante +Darcey +Darell +Darin +Darius +Darren +David +Davion +Davis +Dawson +Dayton +Dean +Deandre +Deangelo +Declan +Denholm +Dennis +Derek +Derrick +Desmond +Devin +Devon +Diego +Dillon +Dirk +Dominic +Dominick +Donald +Donny +Donovan +Douglas +Drake +Drew +Driscoll +Duke +Duncan +Dustin +Dylan +Easton +Eddie +Edgar +Eduardo +Edward +Edwin +Eli +Elias +Elijah +Eliot +Eliott +Elliot +Elliott +Elric +Elwood +Emanuel +Emerson +Emiliano +Emilio +Emmanuel +Enrique +Eric +Erick +Erik +Ernesto +Esteban +Ethan +Evan +Everett +Ezekiel +Ezra +Fabian +Felix +Fenton +Fernando +Finn +Fitz +Flick +Flint +Flip +Francis +Francisco +Frank +Frankie +Franklin +Fridge +Fulton +Gabriel +Gael +Gage +Gannon +Garret +Garrett +Gary +Gavin +George +Gerardo +Giovanni +Goddard +Godwin +Goodwin +Gordon +Grady +Graeme +Graham +Grandpa +Grant +Gratian +Grayson +Gregory +Grendel +Greyson +Griffin +Guillermo +Gunner +Gustavo +Han +Harrison +Harry +Hartley +Harvey +Hayden +Hector +Henderson +Henry +Holden +Homer +Horatio +Hudson +Huffie +Hugo +Hungry +Hunter +Ian +Irvine +Isaac +Isaiah +Isaias +Isiah +Ismael +Israel +Issac +Ivan +Izaiah +Jace +Jack +Jackson +Jacob +Jacoby +Jaden +Jadon +Jaiden +Jaime +Jake +Jakob +Jalen +Jamar +Jamari +Jamarion +James +Jameson +Jamie +Jamison +Janel +Jared +Jason +Jasper +Javier +Javon +Jaxon +Jaxson +Jay +Jayce +Jayden +Jaydon +Jaye +Jaylen +Jayne +Jayson +Jean-Luc +Jeb +Jed +Jeffrey +Jemmy +Jeremiah +Jeremy +Jermaine +Jerrie +Jerry +Jesse +Jesus +Jim +Jimmy +Joachim +Joaquin +Joe +Joel +Joey +Johan +John +Johnathan +Johnny +Jonah +Jonas +Jonathan +Jonathon +Jordan +Jorge +Jose +Joseph +Josh +Joshua +Josiah +Josue +Juan +Judah +Jude +Julian +Julio +Julius +Justice +Justin +Kade +Kaden +Kai +Kaiden +Kale +Kaleb +Kameron +Kane +Karson +Kayden +Keagan +Keaton +Keegan +Keith +Kellen +Kelvin +Kennard +Kenneth +Kevin +Keziah +Khalil +Kingston +Kobe +Kolton +Kristopher +Kyle +Kyler +Lance +Landen +Lando +Landon +Landyn +Lane +Lanny +Larry +Launce +Lawrence +Leland +Lennox +Lenny +Leo +Leonard +Leonardo +Leonel +Leroy +Levi +Liam +Lief +Lincoln +Linden +Linton +Logan +Lorde +Lorenzo +Loreto +Lou +Louis +Luca +Lucas +Luis +Lukas +Luke +Maddox +Malachi +Malcolm +Malik +Manley +Manuel +Marc +Marco +Marcos +Marcus +Mario +Marion +Mark +Marshall +Martin +Marvin +Mason +Mateo +Mathew +Matthew +Maurice +Mauricio +Max +Maximilian +Maximus +Maxwell +Maynard +Mekhi +Melvin +Melvyn +Micah +Michael +Micheal +Miguel +Mike +Miles +Milo +Milton +Mitchell +Moises +Montague +Monte +Monty +Morgan +Moses +Myles +Nasir +Nat +Nathan +Nathaniel +Nehemiah +Nelson +Nicholas +Nick +Nickolas +Nicolas +Nikolas +Noah +Noel +Nolan +Oliver +Omar +Opie +Orlando +Osbert +Osborn +Osborne +Oscar +Osmund +Oswald +Owen +Pablo +Paget +Parker +Patrick +Patton +Paul +Paxton +Payton +Pedro +Percival +Persh +Peter +Peyton +Philip +Phillip +Phoenix +Porter +Preston +Quentin +Quinn +Quinton +Rafael +Ramon +Randy +Rastus +Raul +Raymond +Rayner +Reece +Reed +Reese +Reid +Reuben +Reynard +Ricardo +Richard +Ricky +Riley +River +Robert +Roberto +Rocco +Rodger +Rodrigo +Roger +Roman +Romayne +Romeo +Ronald +Roscoe +Roswell +Rowan +Roy +Royce +Rube +Ruben +Russell +Rusty +Ryan +Ryder +Ryker +Rylan +Sal +Salvador +Sam +Samuel +Santiago +Saul +Sawyer +Scott +Scotty +Sean +Sebastian +Sergio +Seth +Seymour +Shane +Shaun +Shawn +Shiloh +Silas +Simon +Skyler +Sloan +Smoke +Solomon +Sorrel +Spencer +Spike +Stephen +Steven +Sybil +Syd +Talon +Tamsin +Tanner +Tate +Taylor +Tel +Terrell +Terry +Theodore +Thomas +Tim +Timothy +Titus +Todd +Tony +Travis +Trent +Trenton +Trevor +Trey +Trip +Tristan +Tristen +Triston +Troy +Tucker +Ty +Tye +Tyler +Tyson +Uland +Ulric +Uriel +Vaughn +Victor +Vince +Vincent +Vinny +Walker +Walter +Ward +Warner +Wayne +Wesley +Weston +Whitaker +William +Willy +Woodrow +Wyatt +Xander +Xavier +Yahir +Zachariah +Zachary +Zack +Zackary +Zander +Zane +Zayden +Zeke Zion \ No newline at end of file diff --git a/strings/names/golem.txt b/strings/names/golem.txt index a26da78b04..7cfcefa899 100644 --- a/strings/names/golem.txt +++ b/strings/names/golem.txt @@ -1,157 +1,157 @@ -Ablation -Alabaster -Alunite -Andesite -Anyhdrite -Basalt -Basin -Bauxite -Bedrock -Bismuth -Bismuthinite -Bituminous Coal -Borax -Boulder -Brimstone -Brittle -Calcite -Cassiterite -Cenozoic -Chalk -Chasm -Cheridite -Chert -Chromite -Cinnabar -Claystone -Coast -Cobaltite -Column -Conglomerate -Core -Crevasse -Crust -Cryolite -Crystal -Dacite -Diorite -Dolomite -Dolostone -Dragonforce -Earthflow -Epoch -Eutrophication -Fault -Flint -Foliation -Foreshock -Fossil -Gabbro -Galena -Garnierite -Geode -Geoge -Gneiss -Granite -Graphite -Gravel -Groove -Grotto -Gypsum -Hematite -Hornblende -Humus -Igneous -Ilmenite -Iron -Island -Jasper -Jet -Kaolinite -Kettle -Kimberlite -Komatiite -Landslide -Levee -Lignite -Limestone -Limonite -Luster -Madidite -Magnetite -Magnitude -Malachite -Mantle -Marble -Marcasite -Melange -Meme -Mica -Microcline -Migmatite -Mineral -Mountain -Mudstone -Obsidian -Olivine -Ore -Orpiment -Orthoclase -Outwash -Oxbow Lake -Oynx -Pahoehoe -Pebble -Pegmatite -Periclase -Petrified Wood -Phyllite -Pitchblende -Plate -Pothole -Puddingstone -Pyrite -Pyrolusite -Quake -Quarry -Quartz -Quartzite -Realgar -Reservoir -Rhyolite -Rock -Rock Salt -Rockfall -Rutile -Saltpeter -Sand -Sandstone -Satinspar -Schist -Sediment -Seismic -Selenite -Serpentine -Shale -Shore -Siltstone -Slag -Slate -Sphalerite -Stack -Stalactite -Stalagmite -Stibnite -Stone -Stress -Subduction -Sylvite -Talc -Tetrahedrite -Tidal -Trench -Valley -Volcano -Xenolith -Yardang -Zone +Ablation +Alabaster +Alunite +Andesite +Anyhdrite +Basalt +Basin +Bauxite +Bedrock +Bismuth +Bismuthinite +Bituminous Coal +Borax +Boulder +Brimstone +Brittle +Calcite +Cassiterite +Cenozoic +Chalk +Chasm +Cheridite +Chert +Chromite +Cinnabar +Claystone +Coast +Cobaltite +Column +Conglomerate +Core +Crevasse +Crust +Cryolite +Crystal +Dacite +Diorite +Dolomite +Dolostone +Dragonforce +Earthflow +Epoch +Eutrophication +Fault +Flint +Foliation +Foreshock +Fossil +Gabbro +Galena +Garnierite +Geode +Geoge +Gneiss +Granite +Graphite +Gravel +Groove +Grotto +Gypsum +Hematite +Hornblende +Humus +Igneous +Ilmenite +Iron +Island +Jasper +Jet +Kaolinite +Kettle +Kimberlite +Komatiite +Landslide +Levee +Lignite +Limestone +Limonite +Luster +Madidite +Magnetite +Magnitude +Malachite +Mantle +Marble +Marcasite +Melange +Meme +Mica +Microcline +Migmatite +Mineral +Mountain +Mudstone +Obsidian +Olivine +Ore +Orpiment +Orthoclase +Outwash +Oxbow Lake +Oynx +Pahoehoe +Pebble +Pegmatite +Periclase +Petrified Wood +Phyllite +Pitchblende +Plate +Pothole +Puddingstone +Pyrite +Pyrolusite +Quake +Quarry +Quartz +Quartzite +Realgar +Reservoir +Rhyolite +Rock +Rock Salt +Rockfall +Rutile +Saltpeter +Sand +Sandstone +Satinspar +Schist +Sediment +Seismic +Selenite +Serpentine +Shale +Shore +Siltstone +Slag +Slate +Sphalerite +Stack +Stalactite +Stalagmite +Stibnite +Stone +Stress +Subduction +Sylvite +Talc +Tetrahedrite +Tidal +Trench +Valley +Volcano +Xenolith +Yardang +Zone diff --git a/strings/names/last.txt b/strings/names/last.txt index b9769055e3..6796c7519e 100644 --- a/strings/names/last.txt +++ b/strings/names/last.txt @@ -1,570 +1,570 @@ -Ackerley -Adams -Addison -Agg -Aggley -Ahmed -Albright -Alekseev -Ali -Alice -Allen -Alliman -Altmann -Anderson -Andreev -Ann -Archibald -Armstrong -Ashbaugh -Atkinson -Atweeke -Aultman -Auman -Baer -Bailey -Baker -Barnes -Barrett -Bash -Bashline -Basinger -Baskett -Basmanoff -Batten -Baum -Baxter -Beach -Beail -Beck -Beedell -Begum -Bell -Benford -Bennett -Berkheimer -Best -Bickerson -Bicknell -Biery -Black -Blackburn -Blaine -Blessig -Bloise -Bluetenberger -Blyant -Bode -Bould -Bousum -Bowchiew -Boyer -Brandenburg -Bratton -Braun -Briggs -Brindle -Briner -Brinigh -Brooks -Brown -Bullard -Bunten -Burkett -Burns -Burris -Butterfill -Buttersworth -Buzzard -Byers -Bynum -Caldwell -Callison -Camp -Campbell -Carmichael -Carr -Carter -Catherina -Catleay -Cavalet -Chapman -Chauvin -Cherry -Christman -Christopher -Clark -Clarke -Clewett -Coates -Coldsmith -Collins -Compton -Conrad -Cook -Cooper -Costello -Cowart -Cowper -Cox -Cressman -Curry -Cypret -David -Davies -Davis -Dawkins -Day -Dean -Demuth -Dennis -Dickinson -Digson -Dimeling -Donkin -Draudy -Driggers -Dryfus -Dugmore -Duncan -Durstine -Earl -Easter -Echard -Eckhardstein -Edwards -Eggbert -Ehret -Elderson -Eliza -Elliott -Ellis -Enderly -Endsley -Evans -Ewing -Faqua -Faust -Fea -Feufer -Fiddler -Field -Fields -Finlay -Fischer -Fiscina -Fisher -Fitzgerald -Fleming -Flickinger -Focell -Foster -Franks -Fraser -Fryer -Fuchs -Fulton -Gadow -Gardner -Garland -Garneys -Garratt -Garrison -Gettemy -Gibson -Glover -Goebbles -Goodman -Graham -Gray -Green -Greenawalt -Greene -Greenwood -Gregory -Griffiths -Gronko -Guess -Hall -Hanford -Hardie -Harding -Hardy -Harris -Harrison -Harrold -Harrow -Harshman -Hastings -Hawker -Hawking -Hawkins -Hayhurst -Haynes -Heckendora -Hegarty -Henry -Hice -Highlands -Hill -Hincken -Hirleman -Hoenshell -Holdeman -Holmes -Hook -Hooker -Hoopengarner -Hoover -Houser -Houston -Howard -Howe -Huey -Hughes -Hujsak -Hunt -Hunter -Hussain -Hutton -Hynes -Ironmonger -Isaman -Isemann -Ivanov -Jackson -James -Jardine -Jenkins -Jenner -Jerome -Jesse -Jewell -Joghs -Johnson -Jones -Jowers -Joyce -Judge -Jyllian -Kadel -Kanaga -Kaur -Keener -Kelley -Kellogg -Kelly -Kemble -Kemerer -Keppel -Kepplinger -Khan -Kiefer -Kifer -Kimple -King -Kirkson -Knapenberger -Knapp -Koepple -Koster -Kuster -Kuznetsov -Laborde -Lacon -Lafortune -Langston -Larson -Lauffer -Laurenzi -Leach -Lee -Leech -Leichter -Leslie -Lester -Levett -Lewis -Lineman -Linton -Llora -Lloyd -Logue -Lombardi -Lord -Losey -Lowe -Lowstetter -Lucy -Ludwig -Maclagan -Magor -Marcotte -Margaret -Marriman -Marshall -Martins -Mary -Mason -Mathews -Matthews -Mcclymonds -Mccullough -Mccune -McDonald -McDonohugh -Mcfall -Mcintosh -Mckendrick -Mcloskey -Mcmullen -McShain -Mens -Merryman -Metzer -Meyers -Mikhaylov -Mildred -Miller -Millhouse -Mills -Milne -Mingle -Minnie -Mitchell -Moberly -Moon -Moore -Morgan -Morris -Mortland -Mosser -Mueller -Muggins -Mull -Muller -Murphy -Murray -Nash -Neely -Nehling -Newbern -Newton -Nicholas -Nickolson -Northey -Noton -Olphert -Oneal -Oppenheimer -Osteen -Osterweis -Osterwise -Otis -Overstreet -Owen -Owens -Palmer -Parker -Parkinson -Patel -Patterson -Paulson -Pavlov -Paynter -Pearsall -Pennington -Perkins -Pershing -Peters -Petrov -Pfeifer -Philips -Phillips -Picard -Pinney -Poehl -Poley -Polson -Potter -Powell -Power -Powers -Pratt -Prechtl -Prescott -Prevatt -Price -Priebe -Pritchard -Pycroft -Quinn -Quirin -Rader -Rahl -Ramos -Randolph -Ratcliff -Rathen -Rathens -Raub -Ray -Reade -Reichard -Reid -Reighner -Rhinehart -Richards -Richardson -Richter -Rifler -Riggle -Riker -Ringer -Roadman -Roberts -Robertson -Robinson -Roby -Rockwell -Rogers -Rohtin -Rose -Rosensteel -Rowley -Russell -Ryals -Sagan -Sanders -Sandford -Sandys -Sauter -Saylor -Schaeffer -Scherer -Schmidt -Schofield -Schrader -Scott -Sealis -Seelig -Seidner -Semenov -Shafer -Shaffer -Shaner -Shaw -Sheets -Shick -Shirey -Sholl -Shupe -Sidower -Siegrist -Simmons -Simpson -Singh -Skywalker -Sloan -Smail -Smirnov -Smith -Snyder -Sommer -Spock -Stafford -Stahl -Stainforth -Stall -Stamos -Stange -Staymates -Steele -Stephenson -Stern -Stewart -Stocker -Stone -Stough -Straub -Stroble -Stroh -Styles -Sullivan -Sulyard -Summy -Sutton -Swabey -Swarner -Sybilla -Taggart -Tanner -Taylor -Teagarden -Tedrow -Tennant -Thomas -Thomlinson -Thompson -Thomson -Thorley -Tilton -Tireman -Todd -Treeby -Trovato -Turner -Ulery -Ullman -Unk -Vader -Vanleer -Vasilyev -Waldron -Walker -Wallick -Ward -Wardle -Warren -Watson -Webb -Weeter -Weinstein -Weisgarber -Wells -Welty -Wentzel -Werner -Werry -Wheeler -Whirlow -White -Whiteman -Whittier -Wible -Wile -Wilkerson -Wilkinson -Willey -Williams -Williamson -Wilo -Wilson -Winton -Wise -Wolfe -Wolff -Wood -Woodward -Woodworth -Woolery -Woollard -Wright -Yeskey -Young -Zadovsky -Zalack -Zaun -Zeal -Zimmer +Ackerley +Adams +Addison +Agg +Aggley +Ahmed +Albright +Alekseev +Ali +Alice +Allen +Alliman +Altmann +Anderson +Andreev +Ann +Archibald +Armstrong +Ashbaugh +Atkinson +Atweeke +Aultman +Auman +Baer +Bailey +Baker +Barnes +Barrett +Bash +Bashline +Basinger +Baskett +Basmanoff +Batten +Baum +Baxter +Beach +Beail +Beck +Beedell +Begum +Bell +Benford +Bennett +Berkheimer +Best +Bickerson +Bicknell +Biery +Black +Blackburn +Blaine +Blessig +Bloise +Bluetenberger +Blyant +Bode +Bould +Bousum +Bowchiew +Boyer +Brandenburg +Bratton +Braun +Briggs +Brindle +Briner +Brinigh +Brooks +Brown +Bullard +Bunten +Burkett +Burns +Burris +Butterfill +Buttersworth +Buzzard +Byers +Bynum +Caldwell +Callison +Camp +Campbell +Carmichael +Carr +Carter +Catherina +Catleay +Cavalet +Chapman +Chauvin +Cherry +Christman +Christopher +Clark +Clarke +Clewett +Coates +Coldsmith +Collins +Compton +Conrad +Cook +Cooper +Costello +Cowart +Cowper +Cox +Cressman +Curry +Cypret +David +Davies +Davis +Dawkins +Day +Dean +Demuth +Dennis +Dickinson +Digson +Dimeling +Donkin +Draudy +Driggers +Dryfus +Dugmore +Duncan +Durstine +Earl +Easter +Echard +Eckhardstein +Edwards +Eggbert +Ehret +Elderson +Eliza +Elliott +Ellis +Enderly +Endsley +Evans +Ewing +Faqua +Faust +Fea +Feufer +Fiddler +Field +Fields +Finlay +Fischer +Fiscina +Fisher +Fitzgerald +Fleming +Flickinger +Focell +Foster +Franks +Fraser +Fryer +Fuchs +Fulton +Gadow +Gardner +Garland +Garneys +Garratt +Garrison +Gettemy +Gibson +Glover +Goebbles +Goodman +Graham +Gray +Green +Greenawalt +Greene +Greenwood +Gregory +Griffiths +Gronko +Guess +Hall +Hanford +Hardie +Harding +Hardy +Harris +Harrison +Harrold +Harrow +Harshman +Hastings +Hawker +Hawking +Hawkins +Hayhurst +Haynes +Heckendora +Hegarty +Henry +Hice +Highlands +Hill +Hincken +Hirleman +Hoenshell +Holdeman +Holmes +Hook +Hooker +Hoopengarner +Hoover +Houser +Houston +Howard +Howe +Huey +Hughes +Hujsak +Hunt +Hunter +Hussain +Hutton +Hynes +Ironmonger +Isaman +Isemann +Ivanov +Jackson +James +Jardine +Jenkins +Jenner +Jerome +Jesse +Jewell +Joghs +Johnson +Jones +Jowers +Joyce +Judge +Jyllian +Kadel +Kanaga +Kaur +Keener +Kelley +Kellogg +Kelly +Kemble +Kemerer +Keppel +Kepplinger +Khan +Kiefer +Kifer +Kimple +King +Kirkson +Knapenberger +Knapp +Koepple +Koster +Kuster +Kuznetsov +Laborde +Lacon +Lafortune +Langston +Larson +Lauffer +Laurenzi +Leach +Lee +Leech +Leichter +Leslie +Lester +Levett +Lewis +Lineman +Linton +Llora +Lloyd +Logue +Lombardi +Lord +Losey +Lowe +Lowstetter +Lucy +Ludwig +Maclagan +Magor +Marcotte +Margaret +Marriman +Marshall +Martins +Mary +Mason +Mathews +Matthews +Mcclymonds +Mccullough +Mccune +McDonald +McDonohugh +Mcfall +Mcintosh +Mckendrick +Mcloskey +Mcmullen +McShain +Mens +Merryman +Metzer +Meyers +Mikhaylov +Mildred +Miller +Millhouse +Mills +Milne +Mingle +Minnie +Mitchell +Moberly +Moon +Moore +Morgan +Morris +Mortland +Mosser +Mueller +Muggins +Mull +Muller +Murphy +Murray +Nash +Neely +Nehling +Newbern +Newton +Nicholas +Nickolson +Northey +Noton +Olphert +Oneal +Oppenheimer +Osteen +Osterweis +Osterwise +Otis +Overstreet +Owen +Owens +Palmer +Parker +Parkinson +Patel +Patterson +Paulson +Pavlov +Paynter +Pearsall +Pennington +Perkins +Pershing +Peters +Petrov +Pfeifer +Philips +Phillips +Picard +Pinney +Poehl +Poley +Polson +Potter +Powell +Power +Powers +Pratt +Prechtl +Prescott +Prevatt +Price +Priebe +Pritchard +Pycroft +Quinn +Quirin +Rader +Rahl +Ramos +Randolph +Ratcliff +Rathen +Rathens +Raub +Ray +Reade +Reichard +Reid +Reighner +Rhinehart +Richards +Richardson +Richter +Rifler +Riggle +Riker +Ringer +Roadman +Roberts +Robertson +Robinson +Roby +Rockwell +Rogers +Rohtin +Rose +Rosensteel +Rowley +Russell +Ryals +Sagan +Sanders +Sandford +Sandys +Sauter +Saylor +Schaeffer +Scherer +Schmidt +Schofield +Schrader +Scott +Sealis +Seelig +Seidner +Semenov +Shafer +Shaffer +Shaner +Shaw +Sheets +Shick +Shirey +Sholl +Shupe +Sidower +Siegrist +Simmons +Simpson +Singh +Skywalker +Sloan +Smail +Smirnov +Smith +Snyder +Sommer +Spock +Stafford +Stahl +Stainforth +Stall +Stamos +Stange +Staymates +Steele +Stephenson +Stern +Stewart +Stocker +Stone +Stough +Straub +Stroble +Stroh +Styles +Sullivan +Sulyard +Summy +Sutton +Swabey +Swarner +Sybilla +Taggart +Tanner +Taylor +Teagarden +Tedrow +Tennant +Thomas +Thomlinson +Thompson +Thomson +Thorley +Tilton +Tireman +Todd +Treeby +Trovato +Turner +Ulery +Ullman +Unk +Vader +Vanleer +Vasilyev +Waldron +Walker +Wallick +Ward +Wardle +Warren +Watson +Webb +Weeter +Weinstein +Weisgarber +Wells +Welty +Wentzel +Werner +Werry +Wheeler +Whirlow +White +Whiteman +Whittier +Wible +Wile +Wilkerson +Wilkinson +Willey +Williams +Williamson +Wilo +Wilson +Winton +Wise +Wolfe +Wolff +Wood +Woodward +Woodworth +Woolery +Woollard +Wright +Yeskey +Young +Zadovsky +Zalack +Zaun +Zeal +Zimmer Zoucks \ No newline at end of file diff --git a/strings/names/lizard_female.txt b/strings/names/lizard_female.txt index cf588df9b1..078ee7bcff 100644 --- a/strings/names/lizard_female.txt +++ b/strings/names/lizard_female.txt @@ -1,163 +1,163 @@ -Adzi -Ah -Ahaht -Ajim -Akeenus -Akish -Akishan -Aleeto -Am -Amussa -An -Anozz -Asheemar -Asska -Awas -Azala -Azbai -Azeez -Azum -Banalz -Bar -Baseenar -Beek -Beekatan -Beekus -Beela -Beelei -Beem -Beewos -Bejeen -Ber -Betzi -Bishalus -Bokeeus -Bur -Bura -Chalaree -Chana -Chanil -Chee -Cheesh -Chimatei -Chirurgeon -Cholasistu -Chuna -Churasu -Crath -Dar -Deeja -Deesei -Deesh -Deetsan -Deetwos -Dooka -Druja -Eepa -Ei -Eix -El -Ereel -Eutei -Gai -Gih -Gilm -Gish -Go -Hal -Hul -Ja -Jaseen -Jasuda -Jeed -Jeen -Kajul -Kal -Kasa -Keel -Keerava -Kiurz -Kud -La -Lee -Lei -Lifts -Liurz -Lurasha -Ma -Mach -Marz -Meedish -Meeh -Meema -Meen -Meena -Meenus -Meerana -Meesei -Meeus -Mei -Milah -Mim -Mota -Mudeska -Muz -Na -Nakuma -Nam -Nassa -Natoo -Neesha -Neetizei -Neetra -Neeus -Niima -Numeen -Nuralg -Nush -Ocheeva -Okur -Olank -On -Onasha -Osheeka -Pasha -Ra -Rana -Raniur -Ree -Reesa -Rei -Sa -Saak -Sanax -Seeba -Seed -Seen -Shah -Shahvee -Shaleez -Shatalg -Sheer -Shei -Sigerthe -Skaleel -Sudie -Tail -Tar -Tasha -Tei -Telixith -Tumma -Veek -Wan -Wazei -Weedum -Weewish -Witseidutsei -Wuja -Wujeeta -Wusha -Xil -Zish +Adzi +Ah +Ahaht +Ajim +Akeenus +Akish +Akishan +Aleeto +Am +Amussa +An +Anozz +Asheemar +Asska +Awas +Azala +Azbai +Azeez +Azum +Banalz +Bar +Baseenar +Beek +Beekatan +Beekus +Beela +Beelei +Beem +Beewos +Bejeen +Ber +Betzi +Bishalus +Bokeeus +Bur +Bura +Chalaree +Chana +Chanil +Chee +Cheesh +Chimatei +Chirurgeon +Cholasistu +Chuna +Churasu +Crath +Dar +Deeja +Deesei +Deesh +Deetsan +Deetwos +Dooka +Druja +Eepa +Ei +Eix +El +Ereel +Eutei +Gai +Gih +Gilm +Gish +Go +Hal +Hul +Ja +Jaseen +Jasuda +Jeed +Jeen +Kajul +Kal +Kasa +Keel +Keerava +Kiurz +Kud +La +Lee +Lei +Lifts +Liurz +Lurasha +Ma +Mach +Marz +Meedish +Meeh +Meema +Meen +Meena +Meenus +Meerana +Meesei +Meeus +Mei +Milah +Mim +Mota +Mudeska +Muz +Na +Nakuma +Nam +Nassa +Natoo +Neesha +Neetizei +Neetra +Neeus +Niima +Numeen +Nuralg +Nush +Ocheeva +Okur +Olank +On +Onasha +Osheeka +Pasha +Ra +Rana +Raniur +Ree +Reesa +Rei +Sa +Saak +Sanax +Seeba +Seed +Seen +Shah +Shahvee +Shaleez +Shatalg +Sheer +Shei +Sigerthe +Skaleel +Sudie +Tail +Tar +Tasha +Tei +Telixith +Tumma +Veek +Wan +Wazei +Weedum +Weewish +Witseidutsei +Wuja +Wujeeta +Wusha +Xil +Zish Zollassa \ No newline at end of file diff --git a/strings/names/lizard_male.txt b/strings/names/lizard_male.txt index 437d124b50..f14f1705ba 100644 --- a/strings/names/lizard_male.txt +++ b/strings/names/lizard_male.txt @@ -1,328 +1,328 @@ -Abijoo -Ah -Ajum -Am -Amusei -An -Anoo -Aojee -Asum -Az -Azeel -Azinar -Azjai -Baar -Banka -Bar -Barnaxi -Batar -Batuus -Beem -Beshnus -Betu -Bex -Bijot -Bimee -Binyaar -Bosekus -Brand -Bun -Bunach -Bunish -Busheeus -Buujhan -Chakuk -Chalish -Chalureel -Chath -Chee -Cheedal -Chilwir -Chitakus -Chiwish -Chulz -Chuna -Da -Dakee -Dan -Dar -Darasken -DarJee -Debameel -Deed -Deegeeta -Deeh -Deekonus -Deekum -Deekus -Deerkaza -Deetum -Demeepa -Depasa -Derkeethus -Deroh -Dezanu -Dreet -Drumarz -Dum -Dunaxith -Effe -Ei -Eidu -Eius -Eiuus -Eix -Eleedal -Er -Esqoo -Etaku -Gah -Gajul -Gam -Geeh -Geel -Geem -Geh -Gei -Gih -Gin -Goh -Gulum -Haj -Han -Haran -Hareeya -Hathei -Heedul -Heem -Hei -Heir -Hixeeh -Huleeya -Huzei -Ilas -Im -Inee -Itan -J'Ram -Ja -Jah -Jaraleet -Jaree -Jas -Jasaiin -Jaseen -Jat -Jee -Jeela -Jeelius -Jeelus -Jeen -Jeer -Jeetum -Jei -Jilux -Jin -Jon -Jul -Julan -Junal -Jush -Juunei -Kai -Kajin -Kamax -Kas -Keema -Keer -Keerasa -Kepanuu -Kia -Kiameed -Kilaya -Kiurz -Kur -Kuz -La -Lah -Lai -Lan -Lara -Leem -Lei -Loh -Lotash -Luh -Lurz -Luteema -Maahi -Madesi -Maheelius -Mahei -Maht -Malz -Marz -Mathei -Maxath -Meej -Meejapa -Meensuda -Meer -Mema -Mere -Metaku -Miharil -Milos -Miun -Mobareed -Mohimeem -Mopakuz -Motuu -Mujeen -Muranatepa -Mush -Muz -Na -Napetui -Nazuux -Nebutil -Neeti -Neetinei -Neetrenaza -Neetzara -Neeus -Nema -Neposh -Netapatuu -Nexith -Nodeeus -Nomu -Nosaleeth -Nowajeem -Noyei -Nulaz -Nur -Obaxith -Okan -Okaw -Okeeh -Oleed -Oleen -Olik -Olink -Onuja -Onurai -Opatieel -Otumeel -Owai -Pachat -Pacheeva -Pad -Paduxi -Pajeen -Parash -Peeradeeh -Pejureel -Petaxai -Pideelus -Pimaxi -Pojeel -Ra -Radithax -Raj -Rareel -Rasha -Redieeus -Ree -Reeh -Reemukeeus -Reenum -Reesa -Reet -Reezal -Resari -Riker -Ru -Rupah -Sakeepa -Sakeeus -Sakka -Saliith -Sar -Schiavas -Seek -Seewul -Sei -Sejaijilax -Shakiis -Shehs -Shei -Silm -Skee -Skeetul -Sureeus -Ta -Taeed -Tah -Taleel -Talen -Tan -Tanaka -Tanan -Tee -Teeba -Teegla -Teeka -Teekeeus -Teemeeta -Teeus -Tehat -Tei -Teinaava -Teineeja -Terezeeus -Tikaasi -Tim -Topeeth -Topith -Tsleeixth -Tul -Tulm -Tun -Ukatsei -Ukawei -Ula -Ulawa -Ullis -Usha -Usheeja -Utadeek -Utamukeeus -Utatul -Uxith -Vara -Veekas -Veenaza -Veezara -Vistha -Vudeelal -Wanan -Wanum -Wayiteh -Weebam -Weeltul -Weer -Wih -Wud -Wuleen -Wulm -Wumeek -Xal -Xemo -Yinz -Yinz'r -Zaw -Ze -Zeen -Zeeus +Abijoo +Ah +Ajum +Am +Amusei +An +Anoo +Aojee +Asum +Az +Azeel +Azinar +Azjai +Baar +Banka +Bar +Barnaxi +Batar +Batuus +Beem +Beshnus +Betu +Bex +Bijot +Bimee +Binyaar +Bosekus +Brand +Bun +Bunach +Bunish +Busheeus +Buujhan +Chakuk +Chalish +Chalureel +Chath +Chee +Cheedal +Chilwir +Chitakus +Chiwish +Chulz +Chuna +Da +Dakee +Dan +Dar +Darasken +DarJee +Debameel +Deed +Deegeeta +Deeh +Deekonus +Deekum +Deekus +Deerkaza +Deetum +Demeepa +Depasa +Derkeethus +Deroh +Dezanu +Dreet +Drumarz +Dum +Dunaxith +Effe +Ei +Eidu +Eius +Eiuus +Eix +Eleedal +Er +Esqoo +Etaku +Gah +Gajul +Gam +Geeh +Geel +Geem +Geh +Gei +Gih +Gin +Goh +Gulum +Haj +Han +Haran +Hareeya +Hathei +Heedul +Heem +Hei +Heir +Hixeeh +Huleeya +Huzei +Ilas +Im +Inee +Itan +J'Ram +Ja +Jah +Jaraleet +Jaree +Jas +Jasaiin +Jaseen +Jat +Jee +Jeela +Jeelius +Jeelus +Jeen +Jeer +Jeetum +Jei +Jilux +Jin +Jon +Jul +Julan +Junal +Jush +Juunei +Kai +Kajin +Kamax +Kas +Keema +Keer +Keerasa +Kepanuu +Kia +Kiameed +Kilaya +Kiurz +Kur +Kuz +La +Lah +Lai +Lan +Lara +Leem +Lei +Loh +Lotash +Luh +Lurz +Luteema +Maahi +Madesi +Maheelius +Mahei +Maht +Malz +Marz +Mathei +Maxath +Meej +Meejapa +Meensuda +Meer +Mema +Mere +Metaku +Miharil +Milos +Miun +Mobareed +Mohimeem +Mopakuz +Motuu +Mujeen +Muranatepa +Mush +Muz +Na +Napetui +Nazuux +Nebutil +Neeti +Neetinei +Neetrenaza +Neetzara +Neeus +Nema +Neposh +Netapatuu +Nexith +Nodeeus +Nomu +Nosaleeth +Nowajeem +Noyei +Nulaz +Nur +Obaxith +Okan +Okaw +Okeeh +Oleed +Oleen +Olik +Olink +Onuja +Onurai +Opatieel +Otumeel +Owai +Pachat +Pacheeva +Pad +Paduxi +Pajeen +Parash +Peeradeeh +Pejureel +Petaxai +Pideelus +Pimaxi +Pojeel +Ra +Radithax +Raj +Rareel +Rasha +Redieeus +Ree +Reeh +Reemukeeus +Reenum +Reesa +Reet +Reezal +Resari +Riker +Ru +Rupah +Sakeepa +Sakeeus +Sakka +Saliith +Sar +Schiavas +Seek +Seewul +Sei +Sejaijilax +Shakiis +Shehs +Shei +Silm +Skee +Skeetul +Sureeus +Ta +Taeed +Tah +Taleel +Talen +Tan +Tanaka +Tanan +Tee +Teeba +Teegla +Teeka +Teekeeus +Teemeeta +Teeus +Tehat +Tei +Teinaava +Teineeja +Terezeeus +Tikaasi +Tim +Topeeth +Topith +Tsleeixth +Tul +Tulm +Tun +Ukatsei +Ukawei +Ula +Ulawa +Ullis +Usha +Usheeja +Utadeek +Utamukeeus +Utatul +Uxith +Vara +Veekas +Veenaza +Veezara +Vistha +Vudeelal +Wanan +Wanum +Wayiteh +Weebam +Weeltul +Weer +Wih +Wud +Wuleen +Wulm +Wumeek +Xal +Xemo +Yinz +Yinz'r +Zaw +Ze +Zeen +Zeeus Zish \ No newline at end of file diff --git a/strings/names/mime.txt b/strings/names/mime.txt index 094987da9d..989cd6f300 100644 --- a/strings/names/mime.txt +++ b/strings/names/mime.txt @@ -1,32 +1,32 @@ -Church Mouse -Hush Foot -Invisible Man -Lemon Mime -Marcel -Marcel Mime -Master-Mime -Mime -Mr Beret -Mr Mime -Mr Mute -Mute -Omerta -Oui Oui -Pantomime -Quiet -Quiet Riot -See Through -Silence -Silencio -Silent Knight -Silent Majority -Silent Night -Silent Sorrow -Silent Step -Silent Mouse -The Unspeakable -Transparency -Unspeakable -Untouchable -Wall Runner -White Face +Church Mouse +Hush Foot +Invisible Man +Lemon Mime +Marcel +Marcel Mime +Master-Mime +Mime +Mr Beret +Mr Mime +Mr Mute +Mute +Omerta +Oui Oui +Pantomime +Quiet +Quiet Riot +See Through +Silence +Silencio +Silent Knight +Silent Majority +Silent Night +Silent Sorrow +Silent Step +Silent Mouse +The Unspeakable +Transparency +Unspeakable +Untouchable +Wall Runner +White Face diff --git a/strings/names/ninjaname.txt b/strings/names/ninjaname.txt index fa0d0f1094..eb470493fa 100644 --- a/strings/names/ninjaname.txt +++ b/strings/names/ninjaname.txt @@ -1,44 +1,44 @@ -Aria -Baki -Blood -Bro -Cyrax -Daemon -Death -Donatello -Eater -Ermac -Fox -Goemon -Hanzo -Hayabusa -Hazuki -Hero -Hien -Hiro -Hiryu -Iga -Koga -Leonardo -McAwesome -McNinja -Michaelangelo -Midnight -Null -Ogre -Phantom -Raiden -Rain -Raphael -Ryu -Saibot -Samurai -Sarutobi -Scorpion -Seven -Shadow -Shredder -Smoke -Splinter -Throat +Aria +Baki +Blood +Bro +Cyrax +Daemon +Death +Donatello +Eater +Ermac +Fox +Goemon +Hanzo +Hayabusa +Hazuki +Hero +Hien +Hiro +Hiryu +Iga +Koga +Leonardo +McAwesome +McNinja +Michaelangelo +Midnight +Null +Ogre +Phantom +Raiden +Rain +Raphael +Ryu +Saibot +Samurai +Sarutobi +Scorpion +Seven +Shadow +Shredder +Smoke +Splinter +Throat Zero \ No newline at end of file diff --git a/strings/names/ninjatitle.txt b/strings/names/ninjatitle.txt index 41c5b338ba..f9776f56fe 100644 --- a/strings/names/ninjatitle.txt +++ b/strings/names/ninjatitle.txt @@ -1,46 +1,46 @@ -Agile -Assassin -Awesome -Black -Crimson -Cruel -Deep -Dr -Dragon -Ender -Grandmaster -Grappler -Gray -Hunter -Initiate -Killer -Liquid -Master -Merciful -Merciless -Nickel -Night -Nightshade -Ninja -Noob -Orphaner -Quick -Remorseless -Rogue -Sensei -Shinobi -Silencing -Silent -Silver -Singing -Slayer -Snake -Solid -Solidus -Stalker -Steel -Strider -Striker -Swift -Ulimate +Agile +Assassin +Awesome +Black +Crimson +Cruel +Deep +Dr +Dragon +Ender +Grandmaster +Grappler +Gray +Hunter +Initiate +Killer +Liquid +Master +Merciful +Merciless +Nickel +Night +Nightshade +Ninja +Noob +Orphaner +Quick +Remorseless +Rogue +Sensei +Shinobi +Silencing +Silent +Silver +Singing +Slayer +Snake +Solid +Solidus +Stalker +Steel +Strider +Striker +Swift +Ulimate Widower \ No newline at end of file diff --git a/strings/names/plasmaman.txt b/strings/names/plasmaman.txt index eb5f8b786c..8cbfc00837 100644 --- a/strings/names/plasmaman.txt +++ b/strings/names/plasmaman.txt @@ -1,118 +1,118 @@ -Actinium -Aluminium -Americium -Antimony -Argon -Arsenic -Astatine -Barium -Berkelium -Beryllium -Bismuth -Bohrium -Boron -Bromine -Cadmium -Caesium -Calcium -Californium -Carbon -Cerium -Chlorine -Chromium -Cobalt -Copernicium -Copper -Curium -Darmstadtium -Dubnium -Dysprosium -Einsteinium -Erbium -Europium -Fermium -Flerovium -Fluorine -Francium -Gadolinium -Gallium -Germanium -Gold -Hafnium -Hassium -Helium -Holmium -Hydrogen -Indium -Iodine -Iridium -Iron -Krypton -Lanthanum -Lawrencium -Lead -Lithium -Livermorium -Lutetium -Magnesium -Manganese -Meitnerium -Mendelevium -Mercury -Molybdenum -Moscovium -Neodymium -Neon -Neptunium -Nickel -Nihonium -Niobium -Nitrogen -Nobelium -Oganesson -Osmium -Oxygen -Palladium -Phosphorus -Platinum -Plutonium -Polonium -Potassium -Praseodymium -Promethium -Protactinium -Radium -Radon -Rhenium -Rhodium -Roentgenium -Rubidium -Ruthenium -Rutherfordium -Samarium -Scandium -Seaborgium -Selenium -Silicon -Silver -Sodium -Strontium -Sulfur -Tantalum -Technetium -Tellurium -Tennessine -Terbium -Thallium -Thorium -Thulium -Tin -Titanium -Tungsten -Uranium -Vanadium -Xenon -Ytterbium -Yttrium -Zinc +Actinium +Aluminium +Americium +Antimony +Argon +Arsenic +Astatine +Barium +Berkelium +Beryllium +Bismuth +Bohrium +Boron +Bromine +Cadmium +Caesium +Calcium +Californium +Carbon +Cerium +Chlorine +Chromium +Cobalt +Copernicium +Copper +Curium +Darmstadtium +Dubnium +Dysprosium +Einsteinium +Erbium +Europium +Fermium +Flerovium +Fluorine +Francium +Gadolinium +Gallium +Germanium +Gold +Hafnium +Hassium +Helium +Holmium +Hydrogen +Indium +Iodine +Iridium +Iron +Krypton +Lanthanum +Lawrencium +Lead +Lithium +Livermorium +Lutetium +Magnesium +Manganese +Meitnerium +Mendelevium +Mercury +Molybdenum +Moscovium +Neodymium +Neon +Neptunium +Nickel +Nihonium +Niobium +Nitrogen +Nobelium +Oganesson +Osmium +Oxygen +Palladium +Phosphorus +Platinum +Plutonium +Polonium +Potassium +Praseodymium +Promethium +Protactinium +Radium +Radon +Rhenium +Rhodium +Roentgenium +Rubidium +Ruthenium +Rutherfordium +Samarium +Scandium +Seaborgium +Selenium +Silicon +Silver +Sodium +Strontium +Sulfur +Tantalum +Technetium +Tellurium +Tennessine +Terbium +Thallium +Thorium +Thulium +Tin +Titanium +Tungsten +Uranium +Vanadium +Xenon +Ytterbium +Yttrium +Zinc Zirconium \ No newline at end of file diff --git a/strings/names/posibrain.txt b/strings/names/posibrain.txt index 119632bd81..ed8a186fd4 100644 --- a/strings/names/posibrain.txt +++ b/strings/names/posibrain.txt @@ -1,47 +1,47 @@ -PBU -HIU -SINA -ARMA -OSI -HBL -MSO -RR -CHRI -CDB -HG -XSI -ORNG -GUN -KOR -MET -FRE -XIS -SLI -PKP -HOG -RZH -GOOF -MRPR -JJR -FIRC -INC -PHL -BGB -ANTR -MIW -WJ -JRD -CHOC -ANCL -JLLO -JNLG -KOS -TKRG -XAL -STLP -CBOS -DUNC -FXMC -DRSD -COI +PBU +HIU +SINA +ARMA +OSI +HBL +MSO +RR +CHRI +CDB +HG +XSI +ORNG +GUN +KOR +MET +FRE +XIS +SLI +PKP +HOG +RZH +GOOF +MRPR +JJR +FIRC +INC +PHL +BGB +ANTR +MIW +WJ +JRD +CHOC +ANCL +JLLO +JNLG +KOS +TKRG +XAL +STLP +CBOS +DUNC +FXMC +DRSD +COI CYBR \ No newline at end of file diff --git a/strings/names/verbs.txt b/strings/names/verbs.txt index 17bc127fd5..fc90f89e40 100644 --- a/strings/names/verbs.txt +++ b/strings/names/verbs.txt @@ -1,632 +1,632 @@ -accept -add -admire -admit -advise -afford -agree -alert -allow -amuse -analyse -announce -annoy -answer -apologise -appear -applaud -appreciate -approve -argue -arrange -arrest -arrive -ask -attach -attack -attempt -attend -attract -avoid -back -bake -balance -ban -bang -bare -bat -bathe -battle -beam -beg -behave -belong -bleach -bless -blind -blink -blot -blush -boast -boil -bolt -bomb -book -bore -borrow -bounce -bow -box -brake -branch -breathe -bruise -brush -bubble -bump -burn -bury -buzz -calculate -call -camp -care -carry -carve -cause -challenge -change -charge -chase -cheat -check -cheer -chew -choke -chop -claim -clap -clean -clear -clip -close -coach -coil -collect -colour -comb -command -communicate -compare -compete -complain -complete -concentrate -concern -confess -confuse -connect -consider -consist -contain -continue -copy -correct -cough -count -cover -crack -crash -crawl -cross -crush -cry -cure -curl -curve -cycle -dam -damage -dance -dare -decay -deceive -decide -decorate -delay -delight -deliver -depend -describe -desert -deserve -destroy -detect -develop -disagree -disappear -disapprove -disarm -discover -dislike -divide -double -doubt -drag -drain -dream -dress -drip -drop -drown -drum -dry -dust -earn -educate -embarrass -employ -empty -encourage -end -enjoy -enter -entertain -escape -examine -excite -excuse -exercise -exist -expand -expect -explain -explode -extend -face -fade -fail -fancy -fasten -fax -fear -fence -fetch -file -fill -film -fire -fit -fix -flap -flash -float -flood -flow -flower -fold -follow -fool -force -form -found -frame -frighten -fry -gather -gaze -glow -glue -grab -grate -grease -greet -grin -grip -groan -guarantee -guard -guess -guide -hammer -hand -handle -hang -happen -harass -harm -hate -haunt -head -heal -heap -heat -help -hook -hop -hope -hover -hug -hum -hunt -hurry -identify -ignore -imagine -impress -improve -include -increase -influence -inform -inject -injure -instruct -intend -interest -interfere -interrupt -introduce -invent -invite -irritate -itch -jail -jam -jog -join -joke -judge -juggle -jump -kick -kill -kiss -kneel -knit -knock -knot -label -land -last -laugh -launch -learn -level -license -lick -lie -lighten -like -list -listen -live -load -lock -long -look -love -man -manage -march -mark -marry -match -mate -matter -measure -meddle -melt -memorise -mend -messup -milk -mine -miss -mix -moan -moor -mourn -move -muddle -mug -multiply -murder -nail -name -need -nest -nod -note -notice -number -obey -object -observe -obtain -occur -offend -offer -open -order -overflow -owe -own -pack -paddle -paint -park -part -pass -paste -pat -pause -peck -pedal -peel -peep -perform -permit -phone -pick -pinch -pine -place -plan -plant -play -please -plug -point -poke -polish -pop -possess -post -pour -practise -pray -preach -precede -prefer -prepare -present -preserve -press -pretend -prevent -prick -print -produce -program -promise -protect -provide -pull -pump -punch -puncture -punish -push -question -queue -race -radiate -rain -raise -reach -realise -receive -recognise -record -reduce -reflect -refuse -regret -reign -reject -rejoice -relax -release -rely -remain -remember -remind -remove -repair -repeat -replace -reply -report -reproduce -request -rescue -retire -return -rhyme -rinse -risk -rob -rock -roll -rot -rub -ruin -rule -rush -sack -sail -satisfy -save -saw -scare -scatter -scold -scorch -scrape -scratch -scream -screw -scribble -scrub -seal -search -separate -serve -settle -shade -share -shave -shelter -shiver -shock -shop -shrug -sigh -sign -signal -sin -sip -ski -skip -slap -slip -slow -smash -smell -smile -smoke -snatch -sneeze -sniff -snore -snow -soak -soothe -sound -spare -spark -sparkle -spell -spill -spoil -spot -spray -sprout -squash -squeak -squeal -squeeze -stain -stamp -stare -start -stay -steer -step -stir -stitch -stop -store -strap -strengthen -stretch -strip -stroke -stuff -subtract -succeed -suck -suffer -suggest -suit -supply -support -suppose -surprise -surround -suspect -suspend -switch -talk -tame -tap -taste -tease -telephone -tempt -terrify -test -thank -thaw -tick -tickle -tie -time -tip -tire -touch -tour -tow -trace -trade -train -transport -trap -travel -treat -tremble -trick -trip -trot -trouble -trust -try -tug -tumble -turn -twist -type -undress -unfasten -unite -unlock -unpack -untidy -use -vanish -visit -wail -wait -walk -wander -want -warm -warn -wash -waste -watch -water -wave -weigh -welcome -whine -whip -whirl -whisper -whistle -wink -wipe -wish -wobble -wonder -work -worry -wrap -wreck -wrestle -wriggle -yawn -yell -zip +accept +add +admire +admit +advise +afford +agree +alert +allow +amuse +analyse +announce +annoy +answer +apologise +appear +applaud +appreciate +approve +argue +arrange +arrest +arrive +ask +attach +attack +attempt +attend +attract +avoid +back +bake +balance +ban +bang +bare +bat +bathe +battle +beam +beg +behave +belong +bleach +bless +blind +blink +blot +blush +boast +boil +bolt +bomb +book +bore +borrow +bounce +bow +box +brake +branch +breathe +bruise +brush +bubble +bump +burn +bury +buzz +calculate +call +camp +care +carry +carve +cause +challenge +change +charge +chase +cheat +check +cheer +chew +choke +chop +claim +clap +clean +clear +clip +close +coach +coil +collect +colour +comb +command +communicate +compare +compete +complain +complete +concentrate +concern +confess +confuse +connect +consider +consist +contain +continue +copy +correct +cough +count +cover +crack +crash +crawl +cross +crush +cry +cure +curl +curve +cycle +dam +damage +dance +dare +decay +deceive +decide +decorate +delay +delight +deliver +depend +describe +desert +deserve +destroy +detect +develop +disagree +disappear +disapprove +disarm +discover +dislike +divide +double +doubt +drag +drain +dream +dress +drip +drop +drown +drum +dry +dust +earn +educate +embarrass +employ +empty +encourage +end +enjoy +enter +entertain +escape +examine +excite +excuse +exercise +exist +expand +expect +explain +explode +extend +face +fade +fail +fancy +fasten +fax +fear +fence +fetch +file +fill +film +fire +fit +fix +flap +flash +float +flood +flow +flower +fold +follow +fool +force +form +found +frame +frighten +fry +gather +gaze +glow +glue +grab +grate +grease +greet +grin +grip +groan +guarantee +guard +guess +guide +hammer +hand +handle +hang +happen +harass +harm +hate +haunt +head +heal +heap +heat +help +hook +hop +hope +hover +hug +hum +hunt +hurry +identify +ignore +imagine +impress +improve +include +increase +influence +inform +inject +injure +instruct +intend +interest +interfere +interrupt +introduce +invent +invite +irritate +itch +jail +jam +jog +join +joke +judge +juggle +jump +kick +kill +kiss +kneel +knit +knock +knot +label +land +last +laugh +launch +learn +level +license +lick +lie +lighten +like +list +listen +live +load +lock +long +look +love +man +manage +march +mark +marry +match +mate +matter +measure +meddle +melt +memorise +mend +messup +milk +mine +miss +mix +moan +moor +mourn +move +muddle +mug +multiply +murder +nail +name +need +nest +nod +note +notice +number +obey +object +observe +obtain +occur +offend +offer +open +order +overflow +owe +own +pack +paddle +paint +park +part +pass +paste +pat +pause +peck +pedal +peel +peep +perform +permit +phone +pick +pinch +pine +place +plan +plant +play +please +plug +point +poke +polish +pop +possess +post +pour +practise +pray +preach +precede +prefer +prepare +present +preserve +press +pretend +prevent +prick +print +produce +program +promise +protect +provide +pull +pump +punch +puncture +punish +push +question +queue +race +radiate +rain +raise +reach +realise +receive +recognise +record +reduce +reflect +refuse +regret +reign +reject +rejoice +relax +release +rely +remain +remember +remind +remove +repair +repeat +replace +reply +report +reproduce +request +rescue +retire +return +rhyme +rinse +risk +rob +rock +roll +rot +rub +ruin +rule +rush +sack +sail +satisfy +save +saw +scare +scatter +scold +scorch +scrape +scratch +scream +screw +scribble +scrub +seal +search +separate +serve +settle +shade +share +shave +shelter +shiver +shock +shop +shrug +sigh +sign +signal +sin +sip +ski +skip +slap +slip +slow +smash +smell +smile +smoke +snatch +sneeze +sniff +snore +snow +soak +soothe +sound +spare +spark +sparkle +spell +spill +spoil +spot +spray +sprout +squash +squeak +squeal +squeeze +stain +stamp +stare +start +stay +steer +step +stir +stitch +stop +store +strap +strengthen +stretch +strip +stroke +stuff +subtract +succeed +suck +suffer +suggest +suit +supply +support +suppose +surprise +surround +suspect +suspend +switch +talk +tame +tap +taste +tease +telephone +tempt +terrify +test +thank +thaw +tick +tickle +tie +time +tip +tire +touch +tour +tow +trace +trade +train +transport +trap +travel +treat +tremble +trick +trip +trot +trouble +trust +try +tug +tumble +turn +twist +type +undress +unfasten +unite +unlock +unpack +untidy +use +vanish +visit +wail +wait +walk +wander +want +warm +warn +wash +waste +watch +water +wave +weigh +welcome +whine +whip +whirl +whisper +whistle +wink +wipe +wish +wobble +wonder +work +worry +wrap +wreck +wrestle +wriggle +yawn +yell +zip zoom \ No newline at end of file diff --git a/strings/names/wizardfirst.txt b/strings/names/wizardfirst.txt index f1e9a10a58..13dc68c6bd 100644 --- a/strings/names/wizardfirst.txt +++ b/strings/names/wizardfirst.txt @@ -1,37 +1,37 @@ -Alatar -Archchancellor -Boccob -Circe -Dumbledor -Elminister -Gandalf -Grimm -Gulstaff -Houdini -Jim -Kaschei -Khelben -Kreol -Lina -Merlin -Mogan -Mordenkainen -Morgan -Mystryl -Nihilus -Palando -Prospero -Radagast -Raistlin -Rasputin -Rincewind -Saruman -Tenser -Terefi -Tzeentch -Urza -Vaarsuvius -Vecna -Yoda -Zagyg +Alatar +Archchancellor +Boccob +Circe +Dumbledor +Elminister +Gandalf +Grimm +Gulstaff +Houdini +Jim +Kaschei +Khelben +Kreol +Lina +Merlin +Mogan +Mordenkainen +Morgan +Mystryl +Nihilus +Palando +Prospero +Radagast +Raistlin +Rasputin +Rincewind +Saruman +Tenser +Terefi +Tzeentch +Urza +Vaarsuvius +Vecna +Yoda +Zagyg Zul \ No newline at end of file diff --git a/strings/names/wizardsecond.txt b/strings/names/wizardsecond.txt index dd191cfa2b..6daff0f3e7 100644 --- a/strings/names/wizardsecond.txt +++ b/strings/names/wizardsecond.txt @@ -1,40 +1,40 @@ -Dark -Darkmagic -Darko -Gray -Honko -Inverse -le Fay -of Void -Shado -Smith -the All Knowing -the Amazing -the Bandit Killer -the Benevolent -the Blue -the Brown -the Conquerer -the Deathless -the Destroyer -the Dragon Spooker -the Emperor -the Gray -the Great -the Magician -the Powerful -the Raven -the Red -the Remorseful -the Seething -the Sorcelator -the Spiral King -the Unending -the Unstoppable -the Weeping -the White -the Wise -the Wizzard -Unseen -Weatherwax +Dark +Darkmagic +Darko +Gray +Honko +Inverse +le Fay +of Void +Shado +Smith +the All Knowing +the Amazing +the Bandit Killer +the Benevolent +the Blue +the Brown +the Conquerer +the Deathless +the Destroyer +the Dragon Spooker +the Emperor +the Gray +the Great +the Magician +the Powerful +the Raven +the Red +the Remorseful +the Seething +the Sorcelator +the Spiral King +the Unending +the Unstoppable +the Weeping +the White +the Wise +the Wizzard +Unseen +Weatherwax Yagg \ No newline at end of file diff --git a/strings/sillytips.txt b/strings/sillytips.txt index e6710de95e..8e28284534 100644 --- a/strings/sillytips.txt +++ b/strings/sillytips.txt @@ -23,7 +23,6 @@ Plenty of things that aren't traditionally considered weapons can still be used DEATH IS IMMINENT! This game is older than most of the people playing it. Do not go gentle into that good night. -Flashbangs can weaken blob tiles, allowing for you and the crew to easily destroy them. Just the tip? You can grab someone by clicking on them with the grab intent, then upgrade the grab by clicking on them once more. An aggressive grab will momentarily stun someone, allow you to place Mekhi on a table by clicking on it, or throw them by toggling on throwing. Some people are unable to read text on a game where half of it is based on text. @@ -42,8 +41,7 @@ Mhelp is basically useless, and never used correctly. Being a Mentor just means Toxins Bombs are not the only way to get RnD points. However, nobody will ever do any other method to get sci points... Plasma men are a powerful race with many perks! No really, I swear! So what if they need an "ERP Plasma room" to fuck, who cares! As a Cargo Tech make sure to always buy a tesla to sell back to CC. They love those those. Trust me! -Help. -Maints. +;HELP MAINT Admins always regret meme options in their polls. Putting cat ears on securitrons makes them table people and nya. Mekhi isn't a cat, but he still goes on the table, just roll with it. As a Changeling, you can live without a head as they are merely vestigal to you, now, finally, you can be a Dullahan without it being Halloween. diff --git a/strings/tips.txt b/strings/tips.txt index 2039b30359..5336f767a5 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -237,7 +237,7 @@ As a Changeling, you can absorb someone by strangling them and using the Absorb As a Changeling, absorbing someone will give you their full memory. This can include things such as a Traitor's uplink, thus absorbing one will allow you to access the Traitor uplink and buy toys for your Changeling self to abuse. As a Changeling, absorbing another Changeling will permanently boost your chemical reserve, allow you to pick more abilities, and make the victim unable to revive. Be careful when exposing your identity to other Changelings, as they may be out of those wonderful benefits. As a Changeling, BZ gas will dramatically slow down or even halt your natural chemical regeneration, be sure to avoid it at all costs as some lunatics may try and flood portions of the station to deal with you. -As a Changeling, death is not the end for you! You can revive after two minutes from being dead by triggering your stasis ability, and then waiting for the prompt to resurrect yourself to show up. +As a Changeling, death is not the end for you! You can revive after 40 seconds from being dead by triggering your stasis ability, and then waiting for the prompt to resurrect yourself to show up. As a Changeling, your Regenerate Limbs power will quickly heal all of your wounds, but they'll still leave scars. Changelings can use Fleshmend to get rid of scars, or you can ingest Carpotoxin to get rid of them like a normal person. As a Cultist, do not cause too much chaos before your objective is completed. If the shuttle gets called too soon, you may not have enough time to win. As a Cultist, your team starts off very weak, but if necessary can quickly convert everything they have into raw power. Make sure you have the numbers and equipment to support going loud, or the cult will fall flat on its face. @@ -300,4 +300,4 @@ Laser pointers can be upgraded by replacing its micro laser with a better one fr Being out of combat mode makes makes you deal less damage to people and objects when attacking. This stacks with the penalty incurred by resting. Resting makes you deal less damage to people and objects when attacking. This stacks with the penalty incurred by being out of combat mode. You do not regenerate as much stamina while in combat mode. Resting (being on the ground) makes you regenerate stamina faster. -Remember to be in combat mode while in combat, as otherwise you will be penalized by taking more incoming damage and dealing less damage to your adversary. +Keybinds can be reassigned in character setup on the keybindings tab. This is extremely useful, especially if you know how to use independent binds. diff --git a/tgstation.dme b/tgstation.dme index 1387748839..07eefc79ef 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -145,6 +145,7 @@ #include "code\__DEFINES\dcs\signals.dm" #include "code\__DEFINES\mapping\maploader.dm" #include "code\__DEFINES\material\worth.dm" +#include "code\__DEFINES\mobs\innate_abilities.dm" #include "code\__DEFINES\mobs\slowdowns.dm" #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\research\stock_parts.dm" @@ -294,6 +295,7 @@ #include "code\controllers\configuration\entries\plushies.dm" #include "code\controllers\configuration\entries\policy.dm" #include "code\controllers\configuration\entries\resources.dm" +#include "code\controllers\configuration\entries\respawns.dm" #include "code\controllers\configuration\entries\stamina_combat.dm" #include "code\controllers\subsystem\acid.dm" #include "code\controllers\subsystem\adjacent_air.dm" @@ -792,6 +794,7 @@ #include "code\game\machinery\buttons.dm" #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cloning.dm" +#include "code\game\machinery\colormate.dm" #include "code\game\machinery\constructable_frame.dm" #include "code\game\machinery\cryopod.dm" #include "code\game\machinery\dance_machine.dm" @@ -2403,6 +2406,7 @@ #include "code\modules\mob\clickdelay.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\emote.dm" +#include "code\modules\mob\innate_abilities.dm" #include "code\modules\mob\inventory.dm" #include "code\modules\mob\login.dm" #include "code\modules\mob\logout.dm" @@ -2451,6 +2455,7 @@ #include "code\modules\mob\dead\observer\observer.dm" #include "code\modules\mob\dead\observer\observer_movement.dm" #include "code\modules\mob\dead\observer\orbit.dm" +#include "code\modules\mob\dead\observer\respawn.dm" #include "code\modules\mob\dead\observer\say.dm" #include "code\modules\mob\living\blood.dm" #include "code\modules\mob\living\bloodcrawl.dm" @@ -2468,6 +2473,7 @@ #include "code\modules\mob\living\living_defines.dm" #include "code\modules\mob\living\living_mobility.dm" #include "code\modules\mob\living\living_movement.dm" +#include "code\modules\mob\living\living_signals.dm" #include "code\modules\mob\living\living_sprint.dm" #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\logout.dm" @@ -2556,6 +2562,9 @@ #include "code\modules\mob\living\carbon\human\status_procs.dm" #include "code\modules\mob\living\carbon\human\typing_indicator.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\blobform.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\customization.dm" +#include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm" #include "code\modules\mob\living\carbon\human\species_types\abductor.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" #include "code\modules\mob\living\carbon\human\species_types\angel.dm" @@ -3138,7 +3147,7 @@ #include "code\modules\reagents\chemistry\recipes\special.dm" #include "code\modules\reagents\chemistry\recipes\toxins.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" -#include "code\modules\reagents\reagent_containers\borghydro.dm" +#include "code\modules\reagents\reagent_containers\borghypo.dm" #include "code\modules\reagents\reagent_containers\bottle.dm" #include "code\modules\reagents\reagent_containers\chem_pack.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js index 83dc6d99c1..16bb47c024 100644 --- a/tgui/packages/common/storage.js +++ b/tgui/packages/common/storage.js @@ -11,7 +11,7 @@ export const IMPL_LOCAL_STORAGE = 1; export const IMPL_INDEXED_DB = 2; const INDEXED_DB_VERSION = 1; -const INDEXED_DB_NAME = 'tgui'; +const INDEXED_DB_NAME = 'tgui-citadel-main'; const INDEXED_DB_STORE_NAME = 'storage-v1'; const READ_ONLY = 'readonly'; diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index cab5491cee..61de741dde 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -255,7 +255,7 @@ a.popt { /* ADD HERE FOR ITALIC */ -.italic, .italics, .emote { +.italic, .italics { font-style: italic; } @@ -418,7 +418,7 @@ em { } .emote { - font-style: italic; + } .userdanger { @@ -840,7 +840,7 @@ em { .command_headset { font-weight: bold; - font-size: 160%; + font-size: 125%; } .small { @@ -876,7 +876,7 @@ em { .clown { color: #ff70c1; - font-size: 160%; + font-size: 125%; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold; } diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index 5ba2930bcc..2ea4d418b5 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -273,8 +273,7 @@ a.popt { .italic, -.italics, -.emote { +.italics { font-style: italic; } @@ -443,10 +442,6 @@ h1.alert, h2.alert { color: #000000; } -.emote { - font-style: italic; -} - .userdanger { color: #ff0000; font-weight: bold; @@ -886,7 +881,7 @@ h1.alert, h2.alert { .command_headset { font-weight: bold; - font-size: 160%; + font-size: 125%; } .small { @@ -922,7 +917,7 @@ h1.alert, h2.alert { .clown { color: #FF69Bf; - font-size: 160%; + font-size: 125%; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold; } diff --git a/tgui/public/tgui-common.chunk.js b/tgui/public/tgui-common.chunk.js index 974d43f7a5..781757f34b 100644 --- a/tgui/public/tgui-common.chunk.js +++ b/tgui/public/tgui-common.chunk.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[function(e,t,n){"use strict";t.__esModule=!0;var r=n(448);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(t[e]=r[e])}))},function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=t.Tooltip=t.Tabs=t.TextArea=t.Table=t.Slider=t.Section=t.ProgressBar=t.NumberInput=t.NoticeBox=t.Modal=t.LabeledList=t.LabeledControls=t.Knob=t.Input=t.Icon=t.Grid=t.Flex=t.Dropdown=t.DraggableControl=t.Divider=t.Dimmer=t.ColorBox=t.Collapsible=t.Chart=t.ByondUi=t.Button=t.Box=t.BlockQuote=t.AnimatedNumber=void 0;var r=n(138);t.AnimatedNumber=r.AnimatedNumber;var o=n(463);t.BlockQuote=o.BlockQuote;var i=n(17);t.Box=i.Box;var a=n(191);t.Button=a.Button;var c=n(465);t.ByondUi=c.ByondUi;var u=n(467);t.Chart=u.Chart;var s=n(468);t.Collapsible=s.Collapsible;var l=n(469);t.ColorBox=l.ColorBox;var f=n(193);t.Dimmer=f.Dimmer;var d=n(194);t.Divider=d.Divider;var p=n(139);t.DraggableControl=p.DraggableControl;var h=n(470);t.Dropdown=h.Dropdown;var g=n(195);t.Flex=g.Flex;var v=n(471);t.Grid=v.Grid;var m=n(103);t.Icon=m.Icon;var y=n(197);t.Input=y.Input;var b=n(472);t.Knob=b.Knob;var x=n(473);t.LabeledControls=x.LabeledControls;var w=n(198);t.LabeledList=w.LabeledList;var _=n(474);t.Modal=_.Modal;var E=n(475);t.NoticeBox=E.NoticeBox;var k=n(140);t.NumberInput=k.NumberInput;var S=n(476);t.ProgressBar=S.ProgressBar;var C=n(477);t.Section=C.Section;var N=n(478);t.Slider=N.Slider;var A=n(196);t.Table=A.Table;var T=n(479);t.TextArea=T.TextArea;var O=n(480);t.Tabs=O.Tabs;var I=n(192);t.Tooltip=I.Tooltip;var M=n(481);t.TimeDisplay=M.TimeDisplay},function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.useSharedState=t.useLocalState=t.useBackend=t.selectBackend=t.sendAct=t.sendMessage=t.backendMiddleware=t.backendReducer=t.backendSuspendSuccess=t.backendSuspendStart=t.backendSetSharedState=t.backendUpdate=void 0;var r=n(99),o=n(188),i=n(189),a=n(29),c=n(136);var u=(0,a.createLogger)("backend"),s=function(e){return{type:"backend/update",payload:e}};t.backendUpdate=s;var l=function(e,t){return{type:"backend/setSharedState",payload:{key:e,nextState:t}}};t.backendSetSharedState=l;t.backendSuspendStart=function(){return{type:"backend/suspendStart"}};var f=function(){return{type:"backend/suspendSuccess",payload:{timestamp:Date.now()}}};t.backendSuspendSuccess=f;var d={config:{},data:{},shared:{},suspended:Date.now(),suspending:!1};t.backendReducer=function(e,t){void 0===e&&(e=d);var n=t.type,r=t.payload;if("backend/update"===n){var o=Object.assign({},e.config,r.config),i=Object.assign({},e.data,r.static_data,r.data),a=Object.assign({},e.shared);if(r.shared)for(var c=0,u=Object.keys(r.shared);c=0||(o[n]=e[n]);return o}(t,["payload"]),o=Object.assign({tgui:1,window_id:window.__windowId__},r);null!==n&&n!==undefined&&(o.payload=JSON.stringify(n)),Byond.topic(o)};t.sendMessage=p;var h=function(e,t){void 0===t&&(t={}),"object"!=typeof t||null===t||Array.isArray(t)?u.error("Payload for act() must be an object, got this:",t):p({type:"act/"+e,payload:t})};t.sendAct=h;var g=function(e){return e.backend||{}};t.selectBackend=g;t.useBackend=function(e){var t=e.store,n=g(t.getState());return Object.assign({},n,{act:h})};t.useLocalState=function(e,t,n){var r,o=e.store,i=null!=(r=g(o.getState()).shared)?r:{},a=t in i?i[t]:n;return[a,function(e){o.dispatch(l(t,"function"==typeof e?e(a):e))}]};t.useSharedState=function(e,t,n){var r,o=e.store,i=null!=(r=g(o.getState()).shared)?r:{},a=t in i?i[t]:n;return[a,function(e){p({type:"setSharedState",key:t,value:JSON.stringify("function"==typeof e?e(a):e)||""})}]}}).call(this,n(101).setImmediate)},function(e,t,n){"use strict";t.__esModule=!0,t.Window=t.Pane=t.NtosWindow=t.Layout=void 0;var r=n(141);t.Layout=r.Layout;var o=n(482);t.NtosWindow=o.NtosWindow;var i=n(483);t.Pane=i.Pane;var a=n(199);t.Window=a.Window},function(e,t,n){"use strict";var r=n(7),o=n(23).f,i=n(32),a=n(25),c=n(109),u=n(152),s=n(70);e.exports=function(e,t){var n,l,f,d,p,h=e.target,g=e.global,v=e.stat;if(n=g?r:v?r[h]||c(h,{}):(r[h]||{}).prototype)for(l in t){if(d=t[l],f=e.noTargetGet?(p=o(n,l))&&p.value:n[l],!s(g?l:h+(v?".":"#")+l,e.forced)&&f!==undefined){if(typeof d==typeof f)continue;u(d,f)}(e.sham||f&&f.sham)&&i(d,"sham",!0),a(n,l,d,e)}}},function(e,t,n){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){"use strict";t.__esModule=!0,t.canRender=t.pureComponentHooks=t.shallowDiffers=t.normalizeChildren=t.classes=void 0;t.classes=function(e){for(var t="",n=0;nn?n:e};t.clamp01=function(e){return e<0?0:e>1?1:e};t.scale=function(e,t,n){return(e-t)/(n-t)};t.round=function(e,t){return!e||isNaN(e)?e:(t|=0,i=(e*=n=Math.pow(10,t))>0|-(e<0),o=Math.abs(e%1)>=.4999999999854481,r=Math.floor(e),o&&(e=r+(i>0)),(o?e:Math.round(e))/n);var n,r,o,i};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(Math.max(t,0))};var r=function(e,t){return t&&e>=t[0]&&e<=t[1]};t.inRange=r;t.keyOfMatchingRange=function(e,t){for(var n=0,o=Object.keys(t);n0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";var r,o=n(123),i=n(10),a=n(7),c=n(8),u=n(20),s=n(84),l=n(32),f=n(25),d=n(16).f,p=n(42),h=n(55),g=n(15),v=n(67),m=a.Int8Array,y=m&&m.prototype,b=a.Uint8ClampedArray,x=b&&b.prototype,w=m&&p(m),_=y&&p(y),E=Object.prototype,k=E.isPrototypeOf,S=g("toStringTag"),C=v("TYPED_ARRAY_TAG"),N=o&&!!h&&"Opera"!==s(a.opera),A=!1,T={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},O=function(e){var t=s(e);return"DataView"===t||u(T,t)},I=function(e){return c(e)&&u(T,s(e))};for(r in T)a[r]||(N=!1);if((!N||"function"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError("Incorrect invocation")},N))for(r in T)a[r]&&h(a[r],w);if((!N||!_||_===E)&&(_=w.prototype,N))for(r in T)a[r]&&h(a[r].prototype,_);if(N&&p(x)!==_&&h(x,_),i&&!u(_,S))for(r in A=!0,d(_,S,{get:function(){return c(this)?this[C]:undefined}}),T)a[r]&&l(a[r],C,r);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:N,TYPED_ARRAY_TAG:A&&C,aTypedArray:function(e){if(I(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(h){if(k.call(w,e))return e}else for(var t in T)if(u(T,r)){var n=a[t];if(n&&(e===n||k.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n){if(i){if(n)for(var r in T){var o=a[r];o&&u(o.prototype,e)&&delete o.prototype[e]}_[e]&&!n||f(_,e,n?t:N&&y[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var r,o;if(i){if(h){if(n)for(r in T)(o=a[r])&&u(o,e)&&delete o[e];if(w[e]&&!n)return;try{return f(w,e,n?t:N&&m[e]||t)}catch(c){}}for(r in T)!(o=a[r])||o[e]&&!n||f(o,e,t)}},isView:O,isTypedArray:I,TypedArray:w,TypedArrayPrototype:_}},function(e,t,n){"use strict";t.__esModule=!0,t.zipWith=t.zip=t.uniqBy=t.reduce=t.sortBy=t.map=t.filter=t.toKeyedArray=t.toArray=void 0;t.toArray=function(e){if(Array.isArray(e))return e;if("object"==typeof e){var t=Object.prototype.hasOwnProperty,n=[];for(var r in e)t.call(e,r)&&n.push(e[r]);return n}return[]};t.toKeyedArray=function(e,t){return void 0===t&&(t="key"),r((function(e,n){var r;return Object.assign(((r={})[t]=n,r),e)}))(e)};t.filter=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],r=0;rc)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&(t.style=u),t};t.computeBoxProps=v;var m=function(e){var t=e.textColor||e.color,n=e.backgroundColor;return(0,r.classes)([s(t)&&"color-"+t,s(n)&&"color-bg-"+n])};t.computeBoxClassName=m;var y=function(e){var t=e.as,n=void 0===t?"div":t,r=e.className,a=e.children,c=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["as","className","children"]);if("function"==typeof a)return a(v(e));var u="string"==typeof r?r+" "+m(c):m(c),s=v(c);return(0,o.createVNode)(i.VNodeFlags.HtmlElement,n,u,a,i.ChildFlags.UnknownChildren,s)};t.Box=y,y.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";var r=n(24);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";function r(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",apos:"'"};return e.replace(/
/gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/&#?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/&#x?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},function(e,t,n){"use strict";var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,n){"use strict";var r=n(53),o=n(66),i=n(18),a=n(12),c=n(72),u=[].push,s=function(e){var t=1==e,n=2==e,s=3==e,l=4==e,f=6==e,d=5==e||f;return function(p,h,g,v){for(var m,y,b=i(p),x=o(b),w=r(h,g,3),_=a(x.length),E=0,k=v||c,S=t?k(p,_):n?k(p,0):undefined;_>E;E++)if((d||E in x)&&(y=w(m=x[E],E,b),e))if(t)S[E]=y;else if(y)switch(e){case 3:return!0;case 5:return m;case 6:return E;case 2:u.call(S,m)}else if(l)return!1;return f?-1:s||l?l:S}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6)}},function(e,t,n){"use strict";t.__esModule=!0,t.useSelector=t.useDispatch=t.createAction=t.combineReducers=t.applyMiddleware=t.createStore=void 0;var r=n(30);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?o-1:0),a=1;a1?t-1:0),r=1;r2?n-2:0),o=2;o=i){var a=[t].concat(r).map((function(e){return"string"==typeof e?e:e instanceof Error?e.stack||String(e):JSON.stringify(e)})).filter((function(e){return e})).join(" ")+"\nUser Agent: "+navigator.userAgent;Byond.topic({tgui:1,window_id:window.__windowId__,type:"log",ns:t,message:a})}},s=function(e){return{debug:function(){for(var t=arguments.length,n=new Array(t),o=0;o=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?o-1:0),c=1;c1?r-1:0),i=1;i"+a+""}},function(e,t,n){"use strict";var r=n(5);e.exports=function(e){return r((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},function(e,t,n){"use strict";t.__esModule=!0,t.getGasColor=t.getGasLabel=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=t.UI_CLOSE=t.UI_DISABLED=t.UI_UPDATE=t.UI_INTERACTIVE=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{captain:"#c06616",security:"#e74c3c",medbay:"#3498db",science:"#9b59b6",engineering:"#f1c40f",cargo:"#f39c12",centcom:"#00c100",other:"#c38312"},damageType:{oxy:"#3498db",toxin:"#2ecc71",burn:"#e67e22",brute:"#e74c3c"}};t.CSS_COLORS=["black","white","red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey","good","average","bad","label"];t.RADIO_CHANNELS=[{name:"Syndicate",freq:1213,color:"#a52a2a"},{name:"Red Team",freq:1215,color:"#ff4444"},{name:"Blue Team",freq:1217,color:"#3434fd"},{name:"CentCom",freq:1337,color:"#2681a5"},{name:"Supply",freq:1347,color:"#b88646"},{name:"Service",freq:1349,color:"#6ca729"},{name:"Science",freq:1351,color:"#c68cfa"},{name:"Command",freq:1353,color:"#5177ff"},{name:"Medical",freq:1355,color:"#57b8f0"},{name:"Engineering",freq:1357,color:"#f37746"},{name:"Security",freq:1359,color:"#dd3535"},{name:"AI Private",freq:1447,color:"#d65d95"},{name:"Common",freq:1459,color:"#1ecc43"}];var r=[{id:"o2",name:"Oxygen",label:"O\u2082",color:"blue"},{id:"n2",name:"Nitrogen",label:"N\u2082",color:"red"},{id:"co2",name:"Carbon Dioxide",label:"CO\u2082",color:"grey"},{id:"plasma",name:"Plasma",label:"Plasma",color:"pink"},{id:"water_vapor",name:"Water Vapor",label:"H\u2082O",color:"grey"},{id:"nob",name:"Hyper-noblium",label:"Hyper-nob",color:"teal"},{id:"n2o",name:"Nitrous Oxide",label:"N\u2082O",color:"red"},{id:"no2",name:"Nitryl",label:"NO\u2082",color:"brown"},{id:"tritium",name:"Tritium",label:"Tritium",color:"green"},{id:"bz",name:"BZ",label:"BZ",color:"purple"},{id:"stim",name:"Stimulum",label:"Stimulum",color:"purple"},{id:"pluox",name:"Pluoxium",label:"Pluoxium",color:"blue"},{id:"miasma",name:"Miasma",label:"Miasma",color:"olive"},{id:"hydrogen",name:"Hydrogen",label:"H\u2082",color:"white"}];t.getGasLabel=function(e,t){var n=String(e).toLowerCase(),o=r.find((function(e){return e.id===n||e.name.toLowerCase()===n}));return o&&o.label||t||e};t.getGasColor=function(e){var t=String(e).toLowerCase(),n=r.find((function(e){return e.id===t||e.name.toLowerCase()===t}));return n&&n.color}},function(e,t,n){"use strict";var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,n){"use strict";var r=Math.ceil,o=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?o:r)(e)}},function(e,t,n){"use strict";t.__esModule=!0,t.formatDb=t.formatMoney=t.formatPower=t.formatSiUnit=void 0;var r=n(9),o=["f","p","n","\u03bc","m"," ","k","M","G","T","P","E","Z","Y"],i=o.indexOf(" "),a=function(e,t,n){if(void 0===t&&(t=-i),void 0===n&&(n=""),"number"!=typeof e||!Number.isFinite(e))return e;var a=Math.floor(Math.log10(e)),c=Math.floor(Math.max(3*t,a)),u=Math.floor(a/3),s=Math.floor(c/3),l=(0,r.clamp)(i+s,0,o.length),f=o[l],d=e/Math.pow(1e3,s),p=u>t?2+3*s-c:0;return((0,r.toFixed)(d,p)+" "+f+n).trim()};t.formatSiUnit=a;t.formatPower=function(e,t){return void 0===t&&(t=0),a(e,t,"W")};t.formatMoney=function(e,t){if(void 0===t&&(t=0),!Number.isFinite(e))return e;var n=(0,r.round)(e,t);t>0&&(n=(0,r.toFixed)(e,t));var o=(n=String(n)).length,i=n.indexOf(".");-1===i&&(i=o);for(var a="",c=0;c0&&c=0?"+":t<0?"\u2013":"",o=Math.abs(t);return n+(o=o===Infinity?"Inf":(0,r.toFixed)(o,2))+" dB"}},function(e,t,n){"use strict";var r=n(8);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){"use strict";var r=n(153),o=n(7),i=function(e){return"function"==typeof e?e:undefined};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t,n){"use strict";var r=n(20),o=n(18),i=n(82),a=n(122),c=i("IE_PROTO"),u=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=o(e),r(e,c)?e[c]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?u:null}},function(e,t,n){"use strict";e.exports=!1},function(e,t,n){"use strict";var r=n(5);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},function(e,t,n){"use strict";var r=n(11),o=n(27),i=n(15)("species");e.exports=function(e,t){var n,a=r(e).constructor;return a===undefined||(n=r(a)[i])==undefined?t:o(n)}},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(10),a=n(134),c=n(13),u=n(87),s=n(60),l=n(51),f=n(32),d=n(12),p=n(168),h=n(182),g=n(40),v=n(20),m=n(84),y=n(8),b=n(48),x=n(55),w=n(52).f,_=n(183),E=n(21).forEach,k=n(59),S=n(16),C=n(23),N=n(33),A=n(89),T=N.get,O=N.set,I=S.f,M=C.f,L=Math.round,V=o.RangeError,R=u.ArrayBuffer,P=u.DataView,B=c.NATIVE_ARRAY_BUFFER_VIEWS,D=c.TYPED_ARRAY_TAG,F=c.TypedArray,j=c.TypedArrayPrototype,K=c.aTypedArrayConstructor,z=c.isTypedArray,Y=function(e,t){for(var n=0,r=t.length,o=new(K(e))(r);r>n;)o[n]=t[n++];return o},U=function(e,t){I(e,t,{get:function(){return T(this)[t]}})},$=function(e){var t;return e instanceof R||"ArrayBuffer"==(t=m(e))||"SharedArrayBuffer"==t},H=function(e,t){return z(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},W=function(e,t){return H(e,t=g(t,!0))?l(2,e[t]):M(e,t)},q=function(e,t,n){return!(H(e,t=g(t,!0))&&y(n)&&v(n,"value"))||v(n,"get")||v(n,"set")||n.configurable||v(n,"writable")&&!n.writable||v(n,"enumerable")&&!n.enumerable?I(e,t,n):(e[t]=n.value,e)};i?(B||(C.f=W,S.f=q,U(j,"buffer"),U(j,"byteOffset"),U(j,"byteLength"),U(j,"length")),r({target:"Object",stat:!0,forced:!B},{getOwnPropertyDescriptor:W,defineProperty:q}),e.exports=function(e,t,n){var i=e.match(/\d+$/)[0]/8,c=e+(n?"Clamped":"")+"Array",u="get"+e,l="set"+e,g=o[c],v=g,m=v&&v.prototype,S={},C=function(e,t){I(e,t,{get:function(){return function(e,t){var n=T(e);return n.view[u](t*i+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,r){var o=T(e);n&&(r=(r=L(r))<0?0:r>255?255:255&r),o.view[l](t*i+o.byteOffset,r,!0)}(this,t,e)},enumerable:!0})};B?a&&(v=t((function(e,t,n,r){return s(e,v,c),A(y(t)?$(t)?r!==undefined?new g(t,h(n,i),r):n!==undefined?new g(t,h(n,i)):new g(t):z(t)?Y(v,t):_.call(v,t):new g(p(t)),e,v)})),x&&x(v,F),E(w(g),(function(e){e in v||f(v,e,g[e])})),v.prototype=m):(v=t((function(e,t,n,r){s(e,v,c);var o,a,u,l=0,f=0;if(y(t)){if(!$(t))return z(t)?Y(v,t):_.call(v,t);o=t,f=h(n,i);var g=t.byteLength;if(r===undefined){if(g%i)throw V("Wrong length");if((a=g-f)<0)throw V("Wrong length")}else if((a=d(r)*i)+f>g)throw V("Wrong length");u=a/i}else u=p(t),o=new R(a=u*i);for(O(e,{buffer:o,byteOffset:f,byteLength:a,length:u,view:new P(o)});l"+e+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(o){}var e,t;h=r?function(e){e.write(p("")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=s("iframe")).style.display="none",u.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};c[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(d.prototype=o(e),n=new d,d.prototype=null,n[f]=e):n=h(),t===undefined?n:i(n,t)}},function(e,t,n){"use strict";var r=n(16).f,o=n(20),i=n(15)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){"use strict";var r=n(15),o=n(48),i=n(16),a=r("unscopables"),c=Array.prototype;c[a]==undefined&&i.f(c,a,{configurable:!0,value:o(null)}),e.exports=function(e){c[a][e]=!0}},function(e,t,n){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var r=n(154),o=n(113).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){"use strict";var r=n(27);e.exports=function(e,t,n){if(r(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var r=n(40),o=n(16),i=n(51);e.exports=function(e,t,n){var a=r(t);a in e?o.f(e,a,i(0,n)):e[a]=n}},function(e,t,n){"use strict";var r=n(11),o=n(166);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),t=n instanceof Array}catch(i){}return function(n,i){return r(n),o(i),t?e.call(n,i):n.__proto__=i,n}}():undefined)},function(e,t,n){"use strict";var r=n(68),o=n(8),i=n(20),a=n(16).f,c=n(67),u=n(76),s=c("meta"),l=0,f=Object.isExtensible||function(){return!0},d=function(e){a(e,s,{value:{objectID:"O"+ ++l,weakData:{}}})},p=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,s)){if(!f(e))return"F";if(!t)return"E";d(e)}return e[s].objectID},getWeakData:function(e,t){if(!i(e,s)){if(!f(e))return!0;if(!t)return!1;d(e)}return e[s].weakData},onFreeze:function(e){return u&&p.REQUIRED&&f(e)&&!i(e,s)&&d(e),e}};r[s]=!0},function(e,t,n){"use strict";t.__esModule=!0,t.removeScrollableNode=t.addScrollableNode=t.canStealFocus=t.setupGlobalEvents=t.globalEvents=void 0;var r=n(185),o=n(78),i=(n(29),new r.EventEmitter);t.globalEvents=i;var a,c=!1;t.setupGlobalEvents=function(e){void 0===e&&(e={}),c=!!e.ignoreWindowFocus};var u=!0,s=function y(e,t){c?u=!0:(a&&(clearTimeout(a),a=null),t?a=setTimeout((function(){return y(e)})):u!==e&&(u=e,i.emit(e?"window-focus":"window-blur"),i.emit("window-focus-change",e)))},l=null,f=function(e){var t=String(e.tagName).toLowerCase();return"input"===t||"textarea"===t};t.canStealFocus=f;var d=function b(){l&&(l.removeEventListener("blur",b),l=null)},p=null,h=null,g=[];t.addScrollableNode=function(e){g.push(e)};t.removeScrollableNode=function(e){var t=g.indexOf(e);t>=0&&g.splice(t,1)};window.addEventListener("mousemove",(function(e){var t=e.target;t!==h&&(h=t,function(e){if(!l&&u)for(var t=document.body;e&&e!==t;){if(g.includes(e)){if(e.contains(p))return;return p=e,void e.focus()}e=e.parentNode}}(t))})),window.addEventListener("focusin",(function(e){if(h=null,p=e.target,s(!0),f(e.target))return t=e.target,d(),void(l=t).addEventListener("blur",d);var t})),window.addEventListener("focusout",(function(e){h=null,s(!1,!0)})),window.addEventListener("blur",(function(e){h=null,s(!1,!0)})),window.addEventListener("beforeunload",(function(e){s(!1)}));var v={},m=function(){function e(e,t,n){this.event=e,this.type=t,this.code=window.event?e.which:e.keyCode,this.ctrl=e.ctrlKey,this.shift=e.shiftKey,this.alt=e.altKey,this.repeat=!!n}var t=e.prototype;return t.hasModifierKeys=function(){return this.ctrl||this.alt||this.shift},t.isModifierKey=function(){return this.code===o.KEY_CTRL||this.code===o.KEY_SHIFT||this.code===o.KEY_ALT},t.isDown=function(){return"keydown"===this.type},t.isUp=function(){return"keyup"===this.type},t.toString=function(){return this._str||(this._str="",this.ctrl&&(this._str+="Ctrl+"),this.alt&&(this._str+="Alt+"),this.shift&&(this._str+="Shift+"),this.code>=48&&this.code<=90?this._str+=String.fromCharCode(this.code):this.code>=o.KEY_F1&&this.code<=o.KEY_F12?this._str+="F"+(this.code-111):this._str+="["+this.code+"]"),this._str},e}();document.addEventListener("keydown",(function(e){if(!f(e.target)){var t=e.keyCode,n=new m(e,"keydown",v[t]);i.emit("keydown",n),i.emit("key",n),v[t]=!0}})),document.addEventListener("keyup",(function(e){if(!f(e.target)){var t=e.keyCode,n=new m(e,"keyup");i.emit("keyup",n),i.emit("key",n),v[t]=!1}}))},function(e,t,n){"use strict";var r=n(37);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){"use strict";var r=n(41),o=n(16),i=n(15),a=n(10),c=i("species");e.exports=function(e){var t=r(e),n=o.f;a&&t&&!t[c]&&n(t,c,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},function(e,t,n){"use strict";var r=n(11),o=n(118),i=n(12),a=n(53),c=n(119),u=n(162),s=function(e,t){this.stopped=e,this.result=t};(e.exports=function(e,t,n,l,f){var d,p,h,g,v,m,y,b=a(t,n,l?2:1);if(f)d=e;else{if("function"!=typeof(p=c(e)))throw TypeError("Target is not iterable");if(o(p)){for(h=0,g=i(e.length);g>h;h++)if((v=l?b(r(y=e[h])[0],y[1]):b(e[h]))&&v instanceof s)return v;return new s(!1)}d=p.call(e)}for(m=d.next;!(y=m.call(d)).done;)if("object"==typeof(v=u(d,b,y.value,l))&&v&&v instanceof s)return v;return new s(!1)}).stop=function(e){return new s(!0,e)}},function(e,t,n){"use strict";var r=n(24),o="["+n(91)+"]",i=RegExp("^"+o+o+"*"),a=RegExp(o+o+"*$"),c=function(e){return function(t){var n=String(r(t));return 1&e&&(n=n.replace(i,"")),2&e&&(n=n.replace(a,"")),n}};e.exports={start:c(1),end:c(2),trim:c(3)}},function(e,t,n){"use strict";t.__esModule=!0,t.assetMiddleware=t.resolveAsset=void 0;var r=[/v4shim/i],o={};t.resolveAsset=function(e){return o[e]||e};t.assetMiddleware=function(e){return function(e){return function(t){var n=t.type,i=t.payload;if("asset/stylesheet"!==n)if("asset/mappings"!==n)e(t);else for(var a=function(){var e=u[c];if(r.some((function(t){return t.test(e)})))return"continue";var t=i[e],n=e.split(".").pop();o[e]=t,"css"===n&&Byond.loadCss(t),"js"===n&&Byond.loadJs(t)},c=0,u=Object.keys(i);cl;)if((c=u[l++])!=c)return!0}else for(;s>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},function(e,t,n){"use strict";var r=n(5),o=/#|\.prototype\./,i=function(e,t){var n=c[a(e)];return n==s||n!=u&&("function"==typeof t?r(t):!!t)},a=i.normalize=function(e){return String(e).replace(o,".").toLowerCase()},c=i.data={},u=i.NATIVE="N",s=i.POLYFILL="P";e.exports=i},function(e,t,n){"use strict";var r=n(154),o=n(113);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){"use strict";var r=n(8),o=n(58),i=n(15)("species");e.exports=function(e,t){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)?r(n)&&null===(n=n[i])&&(n=undefined):n=undefined),new(n===undefined?Array:n)(0===t?0:t)}},function(e,t,n){"use strict";var r=n(5),o=n(15),i=n(116),a=o("species");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var r=n(25);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){"use strict";var r=n(5);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(e,t,n){"use strict";var r=n(11);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){"use strict";t.__esModule=!0,t.KEY_QUOTE=t.KEY_RIGHT_BRACKET=t.KEY_BACKSLASH=t.KEY_LEFT_BRACKET=t.KEY_SLASH=t.KEY_PERIOD=t.KEY_MINUS=t.KEY_COMMA=t.KEY_EQUAL=t.KEY_SEMICOLON=t.KEY_F12=t.KEY_F11=t.KEY_F10=t.KEY_F9=t.KEY_F8=t.KEY_F7=t.KEY_F6=t.KEY_F5=t.KEY_F4=t.KEY_F3=t.KEY_F2=t.KEY_F1=t.KEY_Z=t.KEY_Y=t.KEY_X=t.KEY_W=t.KEY_V=t.KEY_U=t.KEY_T=t.KEY_S=t.KEY_R=t.KEY_Q=t.KEY_P=t.KEY_O=t.KEY_N=t.KEY_M=t.KEY_L=t.KEY_K=t.KEY_J=t.KEY_I=t.KEY_H=t.KEY_G=t.KEY_F=t.KEY_E=t.KEY_D=t.KEY_C=t.KEY_B=t.KEY_A=t.KEY_9=t.KEY_8=t.KEY_7=t.KEY_6=t.KEY_5=t.KEY_4=t.KEY_3=t.KEY_2=t.KEY_1=t.KEY_0=t.KEY_DELETE=t.KEY_INSERT=t.KEY_DOWN=t.KEY_RIGHT=t.KEY_UP=t.KEY_LEFT=t.KEY_HOME=t.KEY_END=t.KEY_PAGEDOWN=t.KEY_PAGEUP=t.KEY_SPACE=t.KEY_ESCAPE=t.KEY_CAPSLOCK=t.KEY_PAUSE=t.KEY_ALT=t.KEY_CTRL=t.KEY_SHIFT=t.KEY_ENTER=t.KEY_TAB=t.KEY_BACKSPACE=void 0;t.KEY_BACKSPACE=8;t.KEY_TAB=9;t.KEY_ENTER=13;t.KEY_SHIFT=16;t.KEY_CTRL=17;t.KEY_ALT=18;t.KEY_PAUSE=19;t.KEY_CAPSLOCK=20;t.KEY_ESCAPE=27;t.KEY_SPACE=32;t.KEY_PAGEUP=33;t.KEY_PAGEDOWN=34;t.KEY_END=35;t.KEY_HOME=36;t.KEY_LEFT=37;t.KEY_UP=38;t.KEY_RIGHT=39;t.KEY_DOWN=40;t.KEY_INSERT=45;t.KEY_DELETE=46;t.KEY_0=48;t.KEY_1=49;t.KEY_2=50;t.KEY_3=51;t.KEY_4=52;t.KEY_5=53;t.KEY_6=54;t.KEY_7=55;t.KEY_8=56;t.KEY_9=57;t.KEY_A=65;t.KEY_B=66;t.KEY_C=67;t.KEY_D=68;t.KEY_E=69;t.KEY_F=70;t.KEY_G=71;t.KEY_H=72;t.KEY_I=73;t.KEY_J=74;t.KEY_K=75;t.KEY_L=76;t.KEY_M=77;t.KEY_N=78;t.KEY_O=79;t.KEY_P=80;t.KEY_Q=81;t.KEY_R=82;t.KEY_S=83;t.KEY_T=84;t.KEY_U=85;t.KEY_V=86;t.KEY_W=87;t.KEY_X=88;t.KEY_Y=89;t.KEY_Z=90;t.KEY_F1=112;t.KEY_F2=113;t.KEY_F3=114;t.KEY_F4=115;t.KEY_F5=116;t.KEY_F6=117;t.KEY_F7=118;t.KEY_F8=119;t.KEY_F9=120;t.KEY_F10=121;t.KEY_F11=122;t.KEY_F12=123;t.KEY_SEMICOLON=186;t.KEY_EQUAL=187;t.KEY_COMMA=188;t.KEY_MINUS=189;t.KEY_PERIOD=190;t.KEY_SLASH=191;t.KEY_LEFT_BRACKET=219;t.KEY_BACKSLASH=220;t.KEY_RIGHT_BRACKET=221;t.KEY_QUOTE=222},function(e,t,n){"use strict";function r(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(s){return void n(s)}c.done?t(u):Promise.resolve(u).then(r,o)}function o(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function c(e){r(a,o,i,c,u,"next",e)}function u(e){r(a,o,i,c,u,"throw",e)}c(undefined)}))}}t.__esModule=!0,t.storage=t.IMPL_INDEXED_DB=t.IMPL_LOCAL_STORAGE=t.IMPL_MEMORY=void 0;t.IMPL_MEMORY=0;t.IMPL_LOCAL_STORAGE=1;t.IMPL_INDEXED_DB=2;var i=function(e){return function(){try{return Boolean(e())}catch(t){return!1}}},a=i((function(){return window.localStorage&&window.localStorage.getItem})),c=i((function(){return(window.indexedDB||window.msIndexedDB)&&(window.IDBTransaction||window.msIDBTransaction)})),u=function(){function e(){this.impl=0,this.store={}}var t=e.prototype;return t.get=function(e){return this.store[e]},t.set=function(e,t){this.store[e]=t},t.remove=function(e){this.store[e]=undefined},t.clear=function(){this.store={}},e}(),s=function(){function e(){this.impl=1}var t=e.prototype;return t.get=function(e){var t=localStorage.getItem(e);if("string"==typeof t)return JSON.parse(t)},t.set=function(e,t){localStorage.setItem(e,JSON.stringify(t))},t.remove=function(e){localStorage.removeItem(e)},t.clear=function(){localStorage.clear()},e}(),l=function(){function e(){this.impl=2,this.dbPromise=new Promise((function(e,t){var n=(window.indexedDB||window.msIndexedDB).open("tgui",1);n.onupgradeneeded=function(){try{n.result.createObjectStore("storage-v1")}catch(e){t(new Error("Failed to upgrade IDB: "+n.error))}},n.onsuccess=function(){return e(n.result)},n.onerror=function(){t(new Error("Failed to open IDB: "+n.error))}}))}var t=e.prototype;return t.getStore=function(e){return this.dbPromise.then((function(t){return t.transaction("storage-v1",e).objectStore("storage-v1")}))},t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore("readonly");case 2:return n=t.sent,t.abrupt("return",new Promise((function(t,r){var o=n.get(e);o.onsuccess=function(){return t(o.result)},o.onerror=function(){return r(o.error)}})));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return null===n&&(n=undefined),t.next=3,this.getStore("readwrite");case 3:t.sent.put(n,e);case 5:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore("readwrite");case 2:t.sent["delete"](e);case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getStore("readwrite");case 2:e.sent.clear();case 4:case"end":return e.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),f=new(function(){function e(){this.backendPromise=o(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!c()){e.next=10;break}return e.prev=1,t=new l,e.next=5,t.dbPromise;case 5:return e.abrupt("return",t);case 8:e.prev=8,e.t0=e["catch"](1);case 10:if(!a()){e.next=12;break}return e.abrupt("return",new s);case 12:return e.abrupt("return",new u);case 13:case"end":return e.stop()}}),e,null,[[1,8]])})))()}var t=e.prototype;return t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.get(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return r=t.sent,t.abrupt("return",r.set(e,n));case 4:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.remove(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return e=t.sent,t.abrupt("return",e.clear());case 4:case"end":return t.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}());t.storage=f},,function(e,t,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);t.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:r},function(e,t,n){"use strict";var r=n(111),o=n(67),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},function(e,t,n){"use strict";var r=n(41);e.exports=r("navigator","userAgent")||""},function(e,t,n){"use strict";var r=n(120),o=n(37),i=n(15)("toStringTag"),a="Arguments"==o(function(){return arguments}());e.exports=r?o:function(e){var t,n,r;return e===undefined?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),i))?n:a?o(t):"Object"==(r=o(t))&&"function"==typeof t.callee?"Arguments":r}},function(e,t,n){"use strict";var r=n(15)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},"return":function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(c){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(c){}return n}},function(e,t,n){"use strict";var r=n(27),o=n(18),i=n(66),a=n(12),c=function(e){return function(t,n,c,u){r(n);var s=o(t),l=i(s),f=a(s.length),d=e?f-1:0,p=e?-1:1;if(c<2)for(;;){if(d in l){u=l[d],d+=p;break}if(d+=p,e?d<0:f<=d)throw TypeError("Reduce of empty array with no initial value")}for(;e?d>=0:f>d;d+=p)d in l&&(u=n(u,l[d],d,s));return u}};e.exports={left:c(!1),right:c(!0)}},function(e,t,n){"use strict";var r=n(7),o=n(10),i=n(123),a=n(32),c=n(75),u=n(5),s=n(60),l=n(38),f=n(12),d=n(168),p=n(268),h=n(42),g=n(55),v=n(52).f,m=n(16).f,y=n(117),b=n(49),x=n(33),w=x.get,_=x.set,E=r.ArrayBuffer,k=E,S=r.DataView,C=S&&S.prototype,N=Object.prototype,A=r.RangeError,T=p.pack,O=p.unpack,I=function(e){return[255&e]},M=function(e){return[255&e,e>>8&255]},L=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},V=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},R=function(e){return T(e,23,4)},P=function(e){return T(e,52,8)},B=function(e,t){m(e.prototype,t,{get:function(){return w(this)[t]}})},D=function(e,t,n,r){var o=d(n),i=w(e);if(o+t>i.byteLength)throw A("Wrong index");var a=w(i.buffer).bytes,c=o+i.byteOffset,u=a.slice(c,c+t);return r?u:u.reverse()},F=function(e,t,n,r,o,i){var a=d(n),c=w(e);if(a+t>c.byteLength)throw A("Wrong index");for(var u=w(c.buffer).bytes,s=a+c.byteOffset,l=r(+o),f=0;fY;)(j=z[Y++])in k||a(k,j,E[j]);K.constructor=k}g&&h(C)!==N&&g(C,N);var U=new S(new k(2)),$=C.setInt8;U.setInt8(0,2147483648),U.setInt8(1,2147483649),!U.getInt8(0)&&U.getInt8(1)||c(C,{setInt8:function(e,t){$.call(this,e,t<<24>>24)},setUint8:function(e,t){$.call(this,e,t<<24>>24)}},{unsafe:!0})}else k=function(e){s(this,k,"ArrayBuffer");var t=d(e);_(this,{bytes:y.call(new Array(t),0),byteLength:t}),o||(this.byteLength=t)},S=function(e,t,n){s(this,S,"DataView"),s(e,k,"DataView");var r=w(e).byteLength,i=l(t);if(i<0||i>r)throw A("Wrong offset");if(i+(n=n===undefined?r-i:f(n))>r)throw A("Wrong length");_(this,{buffer:e,byteLength:n,byteOffset:i}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=i)},o&&(B(k,"byteLength"),B(S,"buffer"),B(S,"byteLength"),B(S,"byteOffset")),c(S.prototype,{getInt8:function(e){return D(this,1,e)[0]<<24>>24},getUint8:function(e){return D(this,1,e)[0]},getInt16:function(e){var t=D(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=D(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return V(D(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return V(D(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return O(D(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return O(D(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){F(this,1,e,I,t)},setUint8:function(e,t){F(this,1,e,I,t)},setInt16:function(e,t){F(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){F(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){F(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){F(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){F(this,4,e,R,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){F(this,8,e,P,t,arguments.length>2?arguments[2]:undefined)}});b(k,"ArrayBuffer"),b(S,"DataView"),e.exports={ArrayBuffer:k,DataView:S}},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(70),a=n(25),c=n(56),u=n(61),s=n(60),l=n(8),f=n(5),d=n(85),p=n(49),h=n(89);e.exports=function(e,t,n){var g=-1!==e.indexOf("Map"),v=-1!==e.indexOf("Weak"),m=g?"set":"add",y=o[e],b=y&&y.prototype,x=y,w={},_=function(e){var t=b[e];a(b,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return v&&!l(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(i(e,"function"!=typeof y||!(v||b.forEach&&!f((function(){(new y).entries().next()})))))x=n.getConstructor(t,e,g,m),c.REQUIRED=!0;else if(i(e,!0)){var E=new x,k=E[m](v?{}:-0,1)!=E,S=f((function(){E.has(1)})),C=d((function(e){new y(e)})),N=!v&&f((function(){for(var e=new y,t=5;t--;)e[m](t,t);return!e.has(-0)}));C||((x=t((function(t,n){s(t,x,e);var r=h(new y,t,x);return n!=undefined&&u(n,r[m],r,g),r}))).prototype=b,b.constructor=x),(S||N)&&(_("delete"),_("has"),g&&_("get")),(N||k)&&_(m),v&&b.clear&&delete b.clear}return w[e]=x,r({global:!0,forced:x!=y},w),p(x,e),v||n.setStrong(x,e,g),x}},function(e,t,n){"use strict";var r=n(8),o=n(55);e.exports=function(e,t,n){var i,a;return o&&"function"==typeof(i=t.constructor)&&i!==n&&r(a=i.prototype)&&a!==n.prototype&&o(e,a),e}},function(e,t,n){"use strict";var r=Math.expm1,o=Math.exp;e.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:o(e)-1}:r},function(e,t,n){"use strict";e.exports="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},function(e,t,n){"use strict";var r=n(43),o=n(7),i=n(5);e.exports=r||!i((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete o[e]}))},function(e,t,n){"use strict";var r=n(8),o=n(37),i=n(15)("match");e.exports=function(e){var t;return r(e)&&((t=e[i])!==undefined?!!t:"RegExp"==o(e))}},function(e,t,n){"use strict";var r=n(5);function o(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=r((function(){var e=o("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=r((function(){var e=o("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},function(e,t,n){"use strict";var r,o,i=n(77),a=n(94),c=RegExp.prototype.exec,u=String.prototype.replace,s=c,l=(r=/a/,o=/b*/g,c.call(r,"a"),c.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),f=a.UNSUPPORTED_Y||a.BROKEN_CARET,d=/()??/.exec("")[1]!==undefined;(l||d||f)&&(s=function(e){var t,n,r,o,a=this,s=f&&a.sticky,p=i.call(a),h=a.source,g=0,v=e;return s&&(-1===(p=p.replace("y","")).indexOf("g")&&(p+="g"),v=String(e).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==e[a.lastIndex-1])&&(h="(?: "+h+")",v=" "+v,g++),n=new RegExp("^(?:"+h+")",p)),d&&(n=new RegExp("^"+h+"$(?!\\s)",p)),l&&(t=a.lastIndex),r=c.call(s?n:a,v),s?r?(r.input=r.input.slice(g),r[0]=r[0].slice(g),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:l&&r&&(a.lastIndex=a.global?r.index+r[0].length:t),d&&r&&r.length>1&&u.call(r[0],n,(function(){for(o=1;o")})),l="$0"==="a".replace(/./,"$0"),f=i("replace"),d=!!/./[f]&&""===/./[f]("a","$0"),p=!o((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,f){var h=i(e),g=!o((function(){var t={};return t[h]=function(){return 7},7!=""[e](t)})),v=g&&!o((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[u]=function(){return n},n.flags="",n[h]=/./[h]),n.exec=function(){return t=!0,null},n[h](""),!t}));if(!g||!v||"replace"===e&&(!s||!l||d)||"split"===e&&!p){var m=/./[h],y=n(h,""[e],(function(e,t,n,r,o){return t.exec===a?g&&!o?{done:!0,value:m.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:l,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:d}),b=y[0],x=y[1];r(String.prototype,e,b),r(RegExp.prototype,h,2==t?function(e,t){return x.call(e,this,t)}:function(e){return x.call(e,this)})}f&&c(RegExp.prototype[h],"sham",!0)}},function(e,t,n){"use strict";var r=n(130).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},function(e,t,n){"use strict";var r=n(37),o=n(95);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(e))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(e,t)}},function(e,t,n){"use strict";var r;t.__esModule=!0,t.perf=void 0;null==(r=window.performance)||r.now;var o={mark:function(e,t){0},measure:function(e,t){}};t.perf=o},function(e,t,n){"use strict";t.__esModule=!0,t.setupHotReloading=t.sendLogEntry=t.sendMessage=t.subscribe=void 0;var r=[];t.subscribe=function(e){return r.push(e)};t.sendMessage=function(e){};t.sendLogEntry=function(e,t){};t.setupHotReloading=function(){0}},function(e,t,n){"use strict";(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(459),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||void 0,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||void 0}).call(this,n(107))},function(e,t,n){"use strict";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=void 0;var r=n(14),o=function(e,t){return e+t},i=function(e,t){return e-t},a=function(e,t){return e*t},c=function(e,t){return e/t};t.vecAdd=function(){for(var e=arguments.length,t=new Array(e),n=0;n=0||(o[n]=e[n]);return o}(e,["name","size","spin","className","style","rotation"]);n&&(l["font-size"]=100*n+"%"),"number"==typeof f&&(l.transform="rotate("+f+"deg)");var p=a.test(t),h=t.replace(a,"");return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({as:"i",className:(0,o.classes)([u,p?"far":"fas","fa-"+h,c&&"fa-spin"]),style:l},d)))};t.Icon=c,c.defaultHooks=o.pureComponentHooks},,,,function(e,t,n){"use strict";var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(o){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,n){"use strict";var r=n(7),o=n(8),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t,n){"use strict";var r=n(7),o=n(32);e.exports=function(e,t){try{o(r,e,t)}catch(n){r[e]=t}return t}},function(e,t,n){"use strict";var r=n(150),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return o.call(e)}),e.exports=r.inspectSource},function(e,t,n){"use strict";var r=n(43),o=n(150);(e.exports=function(e,t){return o[e]||(o[e]=t!==undefined?t:{})})("versions",[]).push({version:"3.6.5",mode:r?"pure":"global",copyright:"\xa9 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){"use strict";var r=n(41),o=n(52),i=n(114),a=n(11);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(a(e)),n=i.f;return n?t.concat(n(e)):t}},function(e,t,n){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){"use strict";t.f=Object.getOwnPropertySymbols},function(e,t,n){"use strict";var r=n(5);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},function(e,t,n){"use strict";var r,o,i=n(7),a=n(83),c=i.process,u=c&&c.versions,s=u&&u.v8;s?o=(r=s.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=r[1]),e.exports=o&&+o},function(e,t,n){"use strict";var r=n(18),o=n(47),i=n(12);e.exports=function(e){for(var t=r(this),n=i(t.length),a=arguments.length,c=o(a>1?arguments[1]:undefined,n),u=a>2?arguments[2]:undefined,s=u===undefined?n:o(u,n);s>c;)t[c++]=e;return t}},function(e,t,n){"use strict";var r=n(15),o=n(74),i=r("iterator"),a=Array.prototype;e.exports=function(e){return e!==undefined&&(o.Array===e||a[i]===e)}},function(e,t,n){"use strict";var r=n(84),o=n(74),i=n(15)("iterator");e.exports=function(e){if(e!=undefined)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){"use strict";var r={};r[n(15)("toStringTag")]="z",e.exports="[object z]"===String(r)},function(e,t,n){"use strict";var r=n(4),o=n(164),i=n(42),a=n(55),c=n(49),u=n(32),s=n(25),l=n(15),f=n(43),d=n(74),p=n(165),h=p.IteratorPrototype,g=p.BUGGY_SAFARI_ITERATORS,v=l("iterator"),m=function(){return this};e.exports=function(e,t,n,l,p,y,b){o(n,t,l);var x,w,_,E=function(e){if(e===p&&A)return A;if(!g&&e in C)return C[e];switch(e){case"keys":case"values":case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},k=t+" Iterator",S=!1,C=e.prototype,N=C[v]||C["@@iterator"]||p&&C[p],A=!g&&N||E(p),T="Array"==t&&C.entries||N;if(T&&(x=i(T.call(new e)),h!==Object.prototype&&x.next&&(f||i(x)===h||(a?a(x,h):"function"!=typeof x[v]&&u(x,v,m)),c(x,k,!0,!0),f&&(d[k]=m))),"values"==p&&N&&"values"!==N.name&&(S=!0,A=function(){return N.call(this)}),f&&!b||C[v]===A||u(C,v,A),d[t]=A,p)if(w={values:E("values"),keys:y?A:E("keys"),entries:E("entries")},b)for(_ in w)(g||S||!(_ in C))&&s(C,_,w[_]);else r({target:t,proto:!0,forced:g||S},w);return w}},function(e,t,n){"use strict";var r=n(5);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},function(e,t,n){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(e,t,n){"use strict";var r=n(12),o=n(125),i=n(24),a=Math.ceil,c=function(e){return function(t,n,c){var u,s,l=String(i(t)),f=l.length,d=c===undefined?" ":String(c),p=r(n);return p<=f||""==d?l:(u=p-f,(s=o.call(d,a(u/d.length))).length>u&&(s=s.slice(0,u)),e?l+s:s+l)}};e.exports={start:c(!1),end:c(!0)}},function(e,t,n){"use strict";var r=n(38),o=n(24);e.exports="".repeat||function(e){var t=String(o(this)),n="",i=r(e);if(i<0||i==Infinity)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},function(e,t,n){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t,n){"use strict";var r,o,i,a=n(7),c=n(5),u=n(37),s=n(53),l=n(157),f=n(108),d=n(177),p=a.location,h=a.setImmediate,g=a.clearImmediate,v=a.process,m=a.MessageChannel,y=a.Dispatch,b=0,x={},w=function(e){if(x.hasOwnProperty(e)){var t=x[e];delete x[e],t()}},_=function(e){return function(){w(e)}},E=function(e){w(e.data)},k=function(e){a.postMessage(e+"",p.protocol+"//"+p.host)};h&&g||(h=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return x[++b]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},r(b),b},g=function(e){delete x[e]},"process"==u(v)?r=function(e){v.nextTick(_(e))}:y&&y.now?r=function(e){y.now(_(e))}:m&&!d?(i=(o=new m).port2,o.port1.onmessage=E,r=s(i.postMessage,i,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||c(k)||"file:"===p.protocol?r="onreadystatechange"in f("script")?function(e){l.appendChild(f("script")).onreadystatechange=function(){l.removeChild(this),w(e)}}:function(e){setTimeout(_(e),0)}:(r=k,a.addEventListener("message",E,!1))),e.exports={set:h,clear:g}},function(e,t,n){"use strict";var r=n(27),o=function(e){var t,n;this.promise=new e((function(e,r){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},function(e,t,n){"use strict";var r=n(4),o=n(95);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},function(e,t,n){"use strict";var r=n(38),o=n(24),i=function(e){return function(t,n){var i,a,c=String(o(t)),u=r(n),s=c.length;return u<0||u>=s?e?"":undefined:(i=c.charCodeAt(u))<55296||i>56319||u+1===s||(a=c.charCodeAt(u+1))<56320||a>57343?e?c.charAt(u):i:e?c.slice(u,u+2):a-56320+(i-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},function(e,t,n){"use strict";var r=n(93);e.exports=function(e){if(r(e))throw TypeError("The method doesn't accept regular expressions");return e}},function(e,t,n){"use strict";var r=n(15)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(o){}}return!1}},function(e,t,n){"use strict";var r=n(5),o=n(91);e.exports=function(e){return r((function(){return!!o[e]()||"\u200b\x85\u180e"!="\u200b\x85\u180e"[e]()||o[e].name!==e}))}},function(e,t,n){"use strict";var r=n(7),o=n(5),i=n(85),a=n(13).NATIVE_ARRAY_BUFFER_VIEWS,c=r.ArrayBuffer,u=r.Int8Array;e.exports=!a||!o((function(){u(1)}))||!o((function(){new u(-1)}))||!i((function(e){new u,new u(null),new u(1.5),new u(e)}),!0)||o((function(){return 1!==new u(new c(2),1,undefined).length}))},function(e,t,n){"use strict";t.__esModule=!0,t.setupHotKeys=t.releaseHeldKeys=t.releaseHotKey=t.acquireHotKey=void 0;var r=n(78),o=n(57),i=(0,n(29).createLogger)("hotkeys"),a={},c=[r.KEY_ESCAPE,r.KEY_ENTER,r.KEY_SPACE,r.KEY_TAB,r.KEY_CTRL,r.KEY_SHIFT,r.KEY_F5],u={},s=function(e){if(!e.ctrl||e.code!==r.KEY_F5&&e.code!==r.KEY_R){if(!(e.ctrl&&e.code===r.KEY_F||e.event.defaultPrevented||e.isModifierKey()||c.includes(e.code))){var t,n=16===(t=e.code)?"Shift":17===t?"Ctrl":18===t?"Alt":33===t?"Northeast":34===t?"Southeast":35===t?"Southwest":36===t?"Northwest":37===t?"West":38===t?"North":39===t?"East":40===t?"South":45===t?"Insert":46===t?"Delete":t>=48&&t<=57||t>=65&&t<=90?String.fromCharCode(t):t>=96&&t<=105?"Numpad"+(t-96):t>=112&&t<=123?"F"+(t-111):188===t?",":189===t?"-":190===t?".":void 0;if(n){var o=a[n];if(o)return i.debug("macro",o),Byond.command(o);if(e.isDown()&&!u[n]){u[n]=!0;var s='KeyDown "'+n+'"';return i.debug(s),Byond.command(s)}if(e.isUp()&&u[n]){u[n]=!1;var l='KeyUp "'+n+'"';return i.debug(l),Byond.command(l)}}}}else location.reload()};t.acquireHotKey=function(e){c.push(e)};t.releaseHotKey=function(e){var t=c.indexOf(e);t>=0&&c.splice(t,1)};var l=function(){for(var e=0,t=Object.keys(u);e0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props,r=t.value,o=t.dragMatrix;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:c(e,o),value:r,internalValue:r}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,r=t.dragging,o=t.value,i=n.props.onDrag;r&&i&&i(e,o)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,r=t.minValue,i=t.maxValue,a=t.step,u=t.stepPixelSize,s=t.dragMatrix;n.setState((function(t){var n=Object.assign({},t),l=c(e,s)-n.origin;if(t.dragging){var f=Number.isFinite(r)?r%a:0;n.internalValue=(0,o.clamp)(n.internalValue+l*a/u,r-a,i+a),n.value=(0,o.clamp)(n.internalValue-n.internalValue%a+f,r,i),n.origin=c(e,s)}else Math.abs(l)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,r=t.onChange,o=t.onDrag,i=n.state,a=i.dragging,c=i.value,u=i.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!a,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),a)n.suppressFlicker(),r&&r(e,c),o&&o(e,c);else if(n.inputRef){var s=n.inputRef.current;s.value=u;try{s.focus(),s.select()}catch(l){}}},n}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,i.prototype.render=function(){var e=this,t=this.state,n=t.dragging,i=t.editing,c=t.value,u=t.suppressingFlicker,s=this.props,l=s.animated,f=s.value,d=s.unit,p=s.minValue,h=s.maxValue,g=s.format,v=s.onChange,m=s.onDrag,y=s.children,b=s.height,x=s.lineHeight,w=s.fontSize,_=f;(n||u)&&(_=c);var E=function(e){return e+(d?" "+d:"")},k=l&&!n&&!u&&(0,r.createComponentVNode)(2,a.AnimatedNumber,{value:_,format:g,children:E})||E(g?g(_):_),S=(0,r.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:i?undefined:"none",height:b,"line-height":x,"font-size":w},onBlur:function(t){if(i){var n=(0,o.clamp)(parseFloat(t.target.value),p,h);Number.isNaN(n)?e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),v&&v(t,n),m&&m(t,n))}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,o.clamp)(parseFloat(t.target.value),p,h);return Number.isNaN(n)?void e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),v&&v(t,n),void(m&&m(t,n)))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef);return y({dragging:n,editing:i,value:f,displayValue:_,displayElement:k,inputElement:S,handleDragStart:this.handleDragStart})},i}(r.Component);t.DraggableControl=u,u.defaultHooks=i.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50,dragMatrix:[1,0]}},function(e,t,n){"use strict";t.__esModule=!0,t.NumberInput=void 0;var r=n(0),o=n(9),i=n(6),a=n(138),c=n(17);var u=function(e){var t,n;function u(t){var n;n=e.call(this,t)||this;var i=t.value;return n.inputRef=(0,r.createRef)(),n.state={value:i,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props.value;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:e.screenY,value:t,internalValue:t}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,r=t.dragging,o=t.value,i=n.props.onDrag;r&&i&&i(e,o)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,r=t.minValue,i=t.maxValue,a=t.step,c=t.stepPixelSize;n.setState((function(t){var n=Object.assign({},t),u=n.origin-e.screenY;if(t.dragging){var s=Number.isFinite(r)?r%a:0;n.internalValue=(0,o.clamp)(n.internalValue+u*a/c,r-a,i+a),n.value=(0,o.clamp)(n.internalValue-n.internalValue%a+s,r,i),n.origin=e.screenY}else Math.abs(u)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,r=t.onChange,o=t.onDrag,i=n.state,a=i.dragging,c=i.value,u=i.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!a,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),a)n.suppressFlicker(),r&&r(e,c),o&&o(e,c);else if(n.inputRef){var s=n.inputRef.current;s.value=u;try{s.focus(),s.select()}catch(l){}}},n}return n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,u.prototype.render=function(){var e=this,t=this.state,n=t.dragging,u=t.editing,s=t.value,l=t.suppressingFlicker,f=this.props,d=f.className,p=f.fluid,h=f.animated,g=f.value,v=f.unit,m=f.minValue,y=f.maxValue,b=f.height,x=f.width,w=f.lineHeight,_=f.fontSize,E=f.format,k=f.onChange,S=f.onDrag,C=g;(n||l)&&(C=s);var N=function(e){return(0,r.createVNode)(1,"div","NumberInput__content",e+(v?" "+v:""),0,{unselectable:Byond.IS_LTE_IE8})},A=h&&!n&&!l&&(0,r.createComponentVNode)(2,a.AnimatedNumber,{value:C,format:E,children:N})||N(E?E(C):C);return(0,r.createComponentVNode)(2,c.Box,{className:(0,i.classes)(["NumberInput",p&&"NumberInput--fluid",d]),minWidth:x,minHeight:b,lineHeight:w,fontSize:_,onMouseDown:this.handleDragStart,children:[(0,r.createVNode)(1,"div","NumberInput__barContainer",(0,r.createVNode)(1,"div","NumberInput__bar",null,1,{style:{height:(0,o.clamp)((C-m)/(y-m)*100,0,100)+"%"}}),2),A,(0,r.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:u?undefined:"none",height:b,"line-height":w,"font-size":_},onBlur:function(t){if(u){var n=(0,o.clamp)(parseFloat(t.target.value),m,y);Number.isNaN(n)?e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),S&&S(t,n))}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,o.clamp)(parseFloat(t.target.value),m,y);return Number.isNaN(n)?void e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),void(S&&S(t,n)))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef)]})},u}(r.Component);t.NumberInput=u,u.defaultHooks=i.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50}},function(e,t,n){"use strict";t.__esModule=!0,t.Layout=void 0;var r=n(0),o=n(6),i=n(17),a=n(57);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){var t=e.className,n=e.theme,a=void 0===n?"nanotrasen":n,u=e.children,s=c(e,["className","theme","children"]);return(0,r.createVNode)(1,"div","theme-"+a,(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Layout",t].concat((0,i.computeBoxClassName)(s))),u,0,Object.assign({},(0,i.computeBoxProps)(s)))),2)};t.Layout=u;var s=function(e){var t=e.className,n=e.scrollable,a=e.children,u=c(e,["className","scrollable","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Layout__content",n&&"Layout__content--scrollable",t].concat((0,i.computeBoxClassName)(u))),a,0,Object.assign({},(0,i.computeBoxProps)(u))))};s.defaultHooks={onComponentDidMount:function(e){return(0,a.addScrollableNode)(e)},onComponentWillUnmount:function(e){return(0,a.removeScrollableNode)(e)}},u.Content=s},,,,,,,function(e,t,n){"use strict";n(223),n(224),n(225),n(226),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(249),n(251),n(252),n(253),n(163),n(254),n(255),n(256),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(269),n(270),n(271),n(272),n(273),n(275),n(276),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(291),n(292),n(293),n(295),n(296),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(309),n(310),n(311),n(312),n(313),n(314),n(316),n(317),n(319),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(345),n(346),n(347),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(129),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446)},function(e,t,n){"use strict";var r=n(10),o=n(5),i=n(108);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var r=n(7),o=n(109),i=r["__core-js_shared__"]||o("__core-js_shared__",{});e.exports=i},function(e,t,n){"use strict";var r=n(7),o=n(110),i=r.WeakMap;e.exports="function"==typeof i&&/native code/.test(o(i))},function(e,t,n){"use strict";var r=n(20),o=n(112),i=n(23),a=n(16);e.exports=function(e,t){for(var n=o(t),c=a.f,u=i.f,s=0;su;)r(c,n=t[u++])&&(~i(s,n)||s.push(n));return s}},function(e,t,n){"use strict";var r=n(115);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(e,t,n){"use strict";var r=n(10),o=n(16),i=n(11),a=n(71);e.exports=r?Object.defineProperties:function(e,t){i(e);for(var n,r=a(t),c=r.length,u=0;c>u;)o.f(e,n=r[u++],t[n]);return e}},function(e,t,n){"use strict";var r=n(41);e.exports=r("document","documentElement")},function(e,t,n){"use strict";var r=n(31),o=n(52).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&"[object Window]"==i.call(e)?function(e){try{return o(e)}catch(t){return a.slice()}}(e):o(r(e))}},function(e,t,n){"use strict";var r=n(15);t.f=r},function(e,t,n){"use strict";var r=n(18),o=n(47),i=n(12),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),c=i(n.length),u=o(e,c),s=o(t,c),l=arguments.length>2?arguments[2]:undefined,f=a((l===undefined?c:o(l,c))-s,c-u),d=1;for(s0;)s in n?n[u]=n[s]:delete n[u],u+=d,s+=d;return n}},function(e,t,n){"use strict";var r=n(58),o=n(12),i=n(53);e.exports=function a(e,t,n,c,u,s,l,f){for(var d,p=u,h=0,g=!!l&&i(l,f,3);h0&&r(d))p=a(e,t,d,o(d.length),p,s-1)-1;else{if(p>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[p]=d}p++}h++}return p}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(a){var i=e["return"];throw i!==undefined&&r(i.call(e)),a}}},function(e,t,n){"use strict";var r=n(31),o=n(50),i=n(74),a=n(33),c=n(121),u=a.set,s=a.getterFor("Array Iterator");e.exports=c(Array,"Array",(function(e,t){u(this,{type:"Array Iterator",target:r(e),index:0,kind:t})}),(function(){var e=s(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=undefined,{value:undefined,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(e,t,n){"use strict";var r=n(165).IteratorPrototype,o=n(48),i=n(51),a=n(49),c=n(74),u=function(){return this};e.exports=function(e,t,n){var s=t+" Iterator";return e.prototype=o(r,{next:i(1,n)}),a(e,s,!1,!0),c[s]=u,e}},function(e,t,n){"use strict";var r,o,i,a=n(42),c=n(32),u=n(20),s=n(15),l=n(43),f=s("iterator"),d=!1;[].keys&&("next"in(i=[].keys())?(o=a(a(i)))!==Object.prototype&&(r=o):d=!0),r==undefined&&(r={}),l||u(r,f)||c(r,f,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},function(e,t,n){"use strict";var r=n(8);e.exports=function(e){if(!r(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},function(e,t,n){"use strict";var r=n(31),o=n(38),i=n(12),a=n(44),c=n(28),u=Math.min,s=[].lastIndexOf,l=!!s&&1/[1].lastIndexOf(1,-0)<0,f=a("lastIndexOf"),d=c("indexOf",{ACCESSORS:!0,1:0}),p=l||!f||!d;e.exports=p?function(e){if(l)return s.apply(this,arguments)||0;var t=r(this),n=i(t.length),a=n-1;for(arguments.length>1&&(a=u(a,o(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:s},function(e,t,n){"use strict";var r=n(38),o=n(12);e.exports=function(e){if(e===undefined)return 0;var t=r(e),n=o(t);if(t!==n)throw RangeError("Wrong length or index");return n}},function(e,t,n){"use strict";var r=n(27),o=n(8),i=[].slice,a={},c=function(e,t,n){if(!(t in a)){for(var r=[],o=0;o1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!m(this,e)}}),i(l.prototype,n?{get:function(e){var t=m(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),f&&r(l.prototype,"size",{get:function(){return p(this).size}}),l},setStrong:function(e,t,n){var r=t+" Iterator",o=g(t),i=g(r);s(e,t,(function(e,t){h(this,{type:r,target:e,state:o(e),kind:t,last:undefined})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),l(t)}}},function(e,t,n){"use strict";var r=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:r(1+e)}},function(e,t,n){"use strict";var r=n(8),o=Math.floor;e.exports=function(e){return!r(e)&&isFinite(e)&&o(e)===e}},function(e,t,n){"use strict";var r=n(7),o=n(62).trim,i=n(91),a=r.parseInt,c=/^[+-]?0[Xx]/,u=8!==a(i+"08")||22!==a(i+"0x16");e.exports=u?function(e,t){var n=o(String(e));return a(n,t>>>0||(c.test(n)?16:10))}:a},function(e,t,n){"use strict";var r=n(10),o=n(71),i=n(31),a=n(81).f,c=function(e){return function(t){for(var n,c=i(t),u=o(c),s=u.length,l=0,f=[];s>l;)n=u[l++],r&&!a.call(c,n)||f.push(e?[n,c[n]]:c[n]);return f}};e.exports={entries:c(!0),values:c(!1)}},function(e,t,n){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){"use strict";var r=n(7);e.exports=r.Promise},function(e,t,n){"use strict";var r=n(83);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},function(e,t,n){"use strict";var r,o,i,a,c,u,s,l,f=n(7),d=n(23).f,p=n(37),h=n(127).set,g=n(177),v=f.MutationObserver||f.WebKitMutationObserver,m=f.process,y=f.Promise,b="process"==p(m),x=d(f,"queueMicrotask"),w=x&&x.value;w||(r=function(){var e,t;for(b&&(e=m.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(n){throw o?a():i=undefined,n}}i=undefined,e&&e.enter()},b?a=function(){m.nextTick(r)}:v&&!g?(c=!0,u=document.createTextNode(""),new v(r).observe(u,{characterData:!0}),a=function(){u.data=c=!c}):y&&y.resolve?(s=y.resolve(undefined),l=s.then,a=function(){l.call(s,r)}):a=function(){h.call(f,r)}),e.exports=w||function(e){var t={fn:e,next:undefined};i&&(i.next=t),o||(o=t,a()),i=t}},function(e,t,n){"use strict";var r=n(11),o=n(8),i=n(128);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},function(e,t,n){"use strict";var r=n(83);e.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(r)},function(e,t,n){"use strict";var r=n(402);e.exports=function(e,t){var n=r(e);if(n%t)throw RangeError("Wrong offset");return n}},function(e,t,n){"use strict";var r=n(18),o=n(12),i=n(119),a=n(118),c=n(53),u=n(13).aTypedArrayConstructor;e.exports=function(e){var t,n,s,l,f,d,p=r(e),h=arguments.length,g=h>1?arguments[1]:undefined,v=g!==undefined,m=i(p);if(m!=undefined&&!a(m))for(d=(f=m.call(p)).next,p=[];!(l=d.call(f)).done;)p.push(l.value);for(v&&h>2&&(g=c(g,arguments[2],2)),n=o(p.length),s=new(u(this))(n),t=0;n>t;t++)s[t]=v?g(p[t],t):p[t];return s}},function(e,t,n){"use strict";var r=n(75),o=n(56).getWeakData,i=n(11),a=n(8),c=n(60),u=n(61),s=n(21),l=n(20),f=n(33),d=f.set,p=f.getterFor,h=s.find,g=s.findIndex,v=0,m=function(e){return e.frozen||(e.frozen=new y)},y=function(){this.entries=[]},b=function(e,t){return h(e.entries,(function(e){return e[0]===t}))};y.prototype={get:function(e){var t=b(this,e);if(t)return t[1]},has:function(e){return!!b(this,e)},set:function(e,t){var n=b(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=g(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,s){var f=e((function(e,r){c(e,f,t),d(e,{type:t,id:v++,frozen:undefined}),r!=undefined&&u(r,e[s],e,n)})),h=p(t),g=function(e,t,n){var r=h(e),a=o(i(t),!0);return!0===a?m(r).set(t,n):a[r.id]=n,e};return r(f.prototype,{"delete":function(e){var t=h(this);if(!a(e))return!1;var n=o(e);return!0===n?m(t)["delete"](e):n&&l(n,t.id)&&delete n[t.id]},has:function(e){var t=h(this);if(!a(e))return!1;var n=o(e);return!0===n?m(t).has(e):n&&l(n,t.id)}}),r(f.prototype,n?{get:function(e){var t=h(this);if(a(e)){var n=o(e);return!0===n?m(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),f}}},function(e,t,n){"use strict";t.__esModule=!0,t.EventEmitter=void 0;var r=function(){function e(){this.listeners={}}var t=e.prototype;return t.on=function(e,t){this.listeners[e]=this.listeners[e]||[],this.listeners[e].push(t)},t.off=function(e,t){var n=this.listeners[e];if(!n)throw new Error('There is no listeners for "'+e+'"');this.listeners[e]=n.filter((function(e){return e!==t}))},t.emit=function(e){var t=this.listeners[e];if(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;ou&&(o[a]=u-t[a],i=!0)}return[i,o]};t.dragStartHandler=function(e){d.log("drag start"),h=!0,u=[window.screenLeft-e.screenX,window.screenTop-e.screenY],document.addEventListener("mousemove",T),document.addEventListener("mouseup",A),T(e)};var A=function M(e){d.log("drag end"),T(e),document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",M),h=!1,k()},T=function(e){h&&(e.preventDefault(),b((0,o.vecAdd)([e.screenX,e.screenY],u)))};t.resizeStartHandler=function(e,t){return function(n){s=[e,t],d.log("resize start",s),g=!0,u=[window.screenLeft-n.screenX,window.screenTop-n.screenY],l=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",I),document.addEventListener("mouseup",O),I(n)}};var O=function L(e){d.log("resize end",f),I(e),document.removeEventListener("mousemove",I),document.removeEventListener("mouseup",L),g=!1,k()},I=function(e){g&&(e.preventDefault(),(f=(0,o.vecAdd)(l,(0,o.vecMultiply)(s,(0,o.vecAdd)([e.screenX,e.screenY],(0,o.vecInverse)([window.screenLeft,window.screenTop]),u,[1,1]))))[0]=Math.max(f[0],150),f[1]=Math.max(f[1],50),x(f))}},function(e,t,n){"use strict";t.__esModule=!0,t.focusWindow=t.focusMap=void 0;t.focusMap=function(){Byond.winset("mapwindow.map",{focus:!0})};t.focusWindow=function(){Byond.winset(window.__windowId__,{focus:!0})}},function(e,t,n){"use strict";t.__esModule=!0,t.selectDebug=void 0;t.selectDebug=function(e){return e.debug}},function(e,t,n){"use strict";t.__esModule=!0,t.ButtonInput=t.ButtonConfirm=t.ButtonCheckbox=t.Button=void 0;var r=n(0),o=n(6),i=n(135),a=n(29),c=n(17),u=n(103),s=n(192);function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function f(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var d=(0,a.createLogger)("Button"),p=function(e){var t=e.className,n=e.fluid,a=e.icon,l=e.iconRotation,p=e.iconSpin,h=e.color,g=e.disabled,v=e.selected,m=e.tooltip,y=e.tooltipPosition,b=e.ellipsis,x=e.compact,w=e.circular,_=e.content,E=e.children,k=e.onclick,S=e.onClick,C=f(e,["className","fluid","icon","iconRotation","iconSpin","color","disabled","selected","tooltip","tooltipPosition","ellipsis","compact","circular","content","children","onclick","onClick"]),N=!(!_&&!E);return k&&d.warn("Lowercase 'onclick' is not supported on Button and lowercase prop names are discouraged in general. Please use a camelCase'onClick' instead and read: https://infernojs.org/docs/guides/event-handling"),(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.Box,Object.assign({className:(0,o.classes)(["Button",n&&"Button--fluid",g&&"Button--disabled",v&&"Button--selected",N&&"Button--hasContent",b&&"Button--ellipsis",w&&"Button--circular",x&&"Button--compact",h&&"string"==typeof h?"Button--color--"+h:"Button--color--default",t]),tabIndex:!g&&"0",unselectable:Byond.IS_LTE_IE8,onClick:function(e){!g&&S&&S(e)},onKeyDown:function(e){var t=window.event?e.which:e.keyCode;if(t===i.KEY_SPACE||t===i.KEY_ENTER)return e.preventDefault(),void(!g&&S&&S(e));t!==i.KEY_ESCAPE||e.preventDefault()}},C,{children:[a&&(0,r.createComponentVNode)(2,u.Icon,{name:a,rotation:l,spin:p}),_,E,m&&(0,r.createComponentVNode)(2,s.Tooltip,{content:m,position:y})]})))};t.Button=p,p.defaultHooks=o.pureComponentHooks;var h=function(e){var t=e.checked,n=f(e,["checked"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,p,Object.assign({color:"transparent",icon:t?"check-square-o":"square-o",selected:t},n)))};t.ButtonCheckbox=h,p.Checkbox=h;var g=function(e){function t(){var t;return(t=e.call(this)||this).state={clickedOnce:!1},t.handleClick=function(){t.state.clickedOnce&&t.setClickedOnce(!1)},t}l(t,e);var n=t.prototype;return n.setClickedOnce=function(e){var t=this;this.setState({clickedOnce:e}),e?setTimeout((function(){return window.addEventListener("click",t.handleClick)})):window.removeEventListener("click",this.handleClick)},n.render=function(){var e=this,t=this.props,n=t.confirmContent,o=void 0===n?"Confirm?":n,i=t.confirmColor,a=void 0===i?"bad":i,c=t.confirmIcon,u=t.icon,s=t.color,l=t.content,d=t.onClick,h=f(t,["confirmContent","confirmColor","confirmIcon","icon","color","content","onClick"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,p,Object.assign({content:this.state.clickedOnce?o:l,icon:this.state.clickedOnce?c:u,color:this.state.clickedOnce?a:s,onClick:function(){return e.state.clickedOnce?d():e.setClickedOnce(!0)}},h)))},t}(r.Component);t.ButtonConfirm=g,p.Confirm=g;var v=function(e){function t(){var t;return(t=e.call(this)||this).inputRef=(0,r.createRef)(),t.state={inInput:!1},t}l(t,e);var n=t.prototype;return n.setInInput=function(e){if(this.setState({inInput:e}),this.inputRef){var t=this.inputRef.current;if(e){t.value=this.props.currentValue||"";try{t.focus(),t.select()}catch(n){}}}},n.commitResult=function(e){if(this.inputRef){var t=this.inputRef.current;if(""!==t.value)return void this.props.onCommit(e,t.value);if(!this.props.defaultValue)return;this.props.onCommit(e,this.props.defaultValue)}},n.render=function(){var e=this,t=this.props,n=t.fluid,a=t.content,l=t.icon,d=t.iconRotation,p=t.iconSpin,h=t.tooltip,g=t.tooltipPosition,v=t.color,m=void 0===v?"default":v,y=(t.placeholder,t.maxLength,f(t,["fluid","content","icon","iconRotation","iconSpin","tooltip","tooltipPosition","color","placeholder","maxLength"]));return(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.Box,Object.assign({className:(0,o.classes)(["Button",n&&"Button--fluid","Button--color--"+m])},y,{onClick:function(){return e.setInInput(!0)},children:[l&&(0,r.createComponentVNode)(2,u.Icon,{name:l,rotation:d,spin:p}),(0,r.createVNode)(1,"div",null,a,0),(0,r.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:this.state.inInput?undefined:"none","text-align":"left"},onBlur:function(t){e.state.inInput&&(e.setInInput(!1),e.commitResult(t))},onKeyDown:function(t){if(t.keyCode===i.KEY_ENTER)return e.setInInput(!1),void e.commitResult(t);t.keyCode===i.KEY_ESCAPE&&e.setInInput(!1)}},null,this.inputRef),h&&(0,r.createComponentVNode)(2,s.Tooltip,{content:h,position:g})]})))},t}(r.Component);t.ButtonInput=v,p.Input=v},function(e,t,n){"use strict";t.__esModule=!0,t.Tooltip=void 0;var r=n(0),o=n(6);t.Tooltip=function(e){var t=e.content,n=e.position,i=void 0===n?"bottom":n,a="string"==typeof t&&t.length>35;return(0,r.createVNode)(1,"div",(0,o.classes)(["Tooltip",a&&"Tooltip--long",i&&"Tooltip--"+i]),null,1,{"data-tooltip":t})}},function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var r=n(0),o=n(6),i=n(17);t.Dimmer=function(e){var t=e.className,n=e.children,a=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["Dimmer"].concat(t))},a,{children:(0,r.createVNode)(1,"div","Dimmer__inner",n,0)})))}},function(e,t,n){"use strict";t.__esModule=!0,t.Divider=void 0;var r=n(0),o=n(6);t.Divider=function(e){var t=e.vertical,n=e.hidden;return(0,r.createVNode)(1,"div",(0,o.classes)(["Divider",n&&"Divider--hidden",t?"Divider--vertical":"Divider--horizontal"]))}},function(e,t,n){"use strict";t.__esModule=!0,t.FlexItem=t.computeFlexItemProps=t.Flex=t.computeFlexProps=void 0;var r=n(0),o=n(6),i=n(17);function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var c=function(e){var t=e.className,n=e.direction,r=e.wrap,i=e.align,c=e.justify,u=e.inline,s=e.spacing,l=void 0===s?0:s,f=a(e,["className","direction","wrap","align","justify","inline","spacing"]);return Object.assign({className:(0,o.classes)(["Flex",Byond.IS_LTE_IE10&&("column"===n?"Flex--iefix--column":"Flex--iefix"),u&&"Flex--inline",l>0&&"Flex--spacing--"+l,t]),style:Object.assign({},f.style,{"flex-direction":n,"flex-wrap":r,"align-items":i,"justify-content":c})},f)};t.computeFlexProps=c;var u=function(e){return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({},c(e))))};t.Flex=u,u.defaultHooks=o.pureComponentHooks;var s=function(e){var t=e.className,n=e.style,r=e.grow,c=e.order,u=e.shrink,s=e.basis,l=void 0===s?e.width:s,f=e.align,d=a(e,["className","style","grow","order","shrink","basis","align"]);return Object.assign({className:(0,o.classes)(["Flex__item",Byond.IS_LTE_IE10&&"Flex__item--iefix",Byond.IS_LTE_IE10&&r>0&&"Flex__item--iefix--grow",t]),style:Object.assign({},n,{"flex-grow":r,"flex-shrink":u,"flex-basis":(0,i.unit)(l),order:c,"align-self":f})},d)};t.computeFlexItemProps=s;var l=function(e){return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({},s(e))))};t.FlexItem=l,l.defaultHooks=o.pureComponentHooks,u.Item=l},function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var r=n(0),o=n(6),i=n(17);function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var c=function(e){var t=e.className,n=e.collapsing,c=e.children,u=a(e,["className","collapsing","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"table",(0,o.classes)(["Table",n&&"Table--collapsing",t,(0,i.computeBoxClassName)(u)]),(0,r.createVNode)(1,"tbody",null,c,0),2,Object.assign({},(0,i.computeBoxProps)(u))))};t.Table=c,c.defaultHooks=o.pureComponentHooks;var u=function(e){var t=e.className,n=e.header,c=a(e,["className","header"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"tr",(0,o.classes)(["Table__row",n&&"Table__row--header",t,(0,i.computeBoxClassName)(e)]),null,1,Object.assign({},(0,i.computeBoxProps)(c))))};t.TableRow=u,u.defaultHooks=o.pureComponentHooks;var s=function(e){var t=e.className,n=e.collapsing,c=e.header,u=a(e,["className","collapsing","header"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"td",(0,o.classes)(["Table__cell",n&&"Table__cell--collapsing",c&&"Table__cell--header",t,(0,i.computeBoxClassName)(e)]),null,1,Object.assign({},(0,i.computeBoxProps)(u))))};t.TableCell=s,s.defaultHooks=o.pureComponentHooks,c.Row=u,c.Cell=s},function(e,t,n){"use strict";t.__esModule=!0,t.Input=t.toInputValue=void 0;var r=n(0),o=n(6),i=n(17),a=n(78);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){return"number"!=typeof e&&"string"!=typeof e?"":String(e)};t.toInputValue=u;var s=function(e){var t,n;function s(){var t;return(t=e.call(this)||this).inputRef=(0,r.createRef)(),t.state={editing:!1},t.handleInput=function(e){var n=t.state.editing,r=t.props.onInput;n||t.setEditing(!0),r&&r(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,r=t.props.onChange;n&&(t.setEditing(!1),r&&r(e,e.target.value))},t.handleKeyDown=function(e){var n=t.props,r=n.onInput,o=n.onChange,i=n.onEnter;return e.keyCode===a.KEY_ENTER?(t.setEditing(!1),o&&o(e,e.target.value),r&&r(e,e.target.value),i&&i(e,e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):e.keyCode===a.KEY_ESCAPE?(t.setEditing(!1),e.target.value=u(t.props.value),void e.target.blur()):void 0},t}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var l=s.prototype;return l.componentDidMount=function(){var e=this.props.value,t=this.inputRef.current;t&&(t.value=u(e)),this.props.autoFocus&&setTimeout((function(){return t.focus()}),1)},l.componentDidUpdate=function(e,t){var n=this.state.editing,r=e.value,o=this.props.value,i=this.inputRef.current;i&&!n&&r!==o&&(i.value=u(o))},l.setEditing=function(e){this.setState({editing:e})},l.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,a=c(e,["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder"]),u=a.className,s=a.fluid,l=a.monospace,f=c(a,["className","fluid","monospace"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["Input",s&&"Input--fluid",l&&"Input--monospace",u])},f,{children:[(0,r.createVNode)(1,"div","Input__baseline",".",16),(0,r.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t},null,this.inputRef)]})))},s}(r.Component);t.Input=s},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListDivider=t.LabeledListItem=t.LabeledList=void 0;var r=n(0),o=n(6),i=n(17),a=n(194),c=function(e){var t=e.children;return(0,r.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=c,c.defaultHooks=o.pureComponentHooks;var u=function(e){var t=e.className,n=e.label,a=e.labelColor,c=void 0===a?"label":a,u=e.color,s=e.textAlign,l=e.buttons,f=e.content,d=e.children;return(0,r.createVNode)(1,"tr",(0,o.classes)(["LabeledList__row",t]),[(0,r.createComponentVNode)(2,i.Box,{as:"td",color:c,className:(0,o.classes)(["LabeledList__cell","LabeledList__label"]),children:n?n+":":null}),(0,r.createComponentVNode)(2,i.Box,{as:"td",color:u,textAlign:s,className:(0,o.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:l?undefined:2,children:[f,d]}),l&&(0,r.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",l,0)],0)};t.LabeledListItem=u,u.defaultHooks=o.pureComponentHooks;var s=function(e){var t=e.size?(0,i.unit)(Math.max(0,e.size-1)):0;return(0,r.createVNode)(1,"tr","LabeledList__row",(0,r.createVNode)(1,"td",null,(0,r.createComponentVNode)(2,a.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};t.LabeledListDivider=s,s.defaultHooks=o.pureComponentHooks,c.Item=u,c.Divider=s},function(e,t,n){"use strict";t.__esModule=!0,t.Window=void 0;var r=n(0),o=n(6),i=n(22),a=n(19),c=n(2),u=n(1),s=n(36),l=n(137),f=(n(200),n(188)),d=n(29),p=n(141);var h=(0,d.createLogger)("Window"),g=[400,600],v=function(e){var t,n;function u(){return e.apply(this,arguments)||this}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var d=u.prototype;return d.componentDidMount=function(){var e,t=(0,c.useBackend)(this.context),n=t.config;if(!t.suspended){h.log("mounting");var r=Object.assign({size:g},n.window);this.props.width&&this.props.height&&(r.size=[this.props.width,this.props.height]),(null==(e=n.window)?void 0:e.key)&&(0,f.setWindowKey)(n.window.key),(0,f.recallWindowGeometry)(r)}},d.render=function(){var e,t=this.props,n=t.resizable,u=t.theme,d=t.title,g=t.children,v=(0,c.useBackend)(this.context),m=v.config,b=v.suspended,x=(0,l.useDebug)(this.context).debugLayout,w=(0,i.useDispatch)(this.context),_=null==(e=m.window)?void 0:e.fancy,E=m.user&&(m.user.observer?m.status=0||(o[n]=e[n]);return o}(e,["className","fitted","children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,p.Layout.Content,Object.assign({className:(0,o.classes)(["Window__content",t])},a,{children:n&&i||(0,r.createVNode)(1,"div","Window__contentPadding",i,0)})))};var m=function(e){switch(e){case s.UI_INTERACTIVE:return"good";case s.UI_UPDATE:return"average";case s.UI_DISABLED:default:return"bad"}},y=function(e,t){var n=e.className,c=e.title,s=e.status,l=e.fancy,f=e.onDragStart,d=e.onClose;(0,i.useDispatch)(t);return(0,r.createVNode)(1,"div",(0,o.classes)(["TitleBar",n]),[s===undefined&&(0,r.createComponentVNode)(2,u.Icon,{className:"TitleBar__statusIcon",name:"tools",opacity:.5})||(0,r.createComponentVNode)(2,u.Icon,{className:"TitleBar__statusIcon",color:m(s),name:"eye"}),(0,r.createVNode)(1,"div","TitleBar__title","string"==typeof c&&c===c.toLowerCase()&&(0,a.toTitleCase)(c)||c,0),(0,r.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return l&&f(e)}}),!1,!!l&&(0,r.createVNode)(1,"div","TitleBar__close TitleBar__clickable",Byond.IS_LTE_IE8?"x":"\xd7",0,{onclick:d})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.openExternalBrowser=t.toggleDebugLayout=t.toggleKitchenSink=void 0;var r=n(22),o=(0,r.createAction)("debug/toggleKitchenSink");t.toggleKitchenSink=o;var i=(0,r.createAction)("debug/toggleDebugLayout");t.toggleDebugLayout=i;var a=(0,r.createAction)("debug/openExternalBrowser");t.openExternalBrowser=a},,,,function(e,t,n){"use strict";t.__esModule=!0,t.createUuid=void 0;t.createUuid=function(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:3&n|8).toString(16)}))}},,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(41),a=n(43),c=n(10),u=n(115),s=n(155),l=n(5),f=n(20),d=n(58),p=n(8),h=n(11),g=n(18),v=n(31),m=n(40),y=n(51),b=n(48),x=n(71),w=n(52),_=n(158),E=n(114),k=n(23),S=n(16),C=n(81),N=n(32),A=n(25),T=n(111),O=n(82),I=n(68),M=n(67),L=n(15),V=n(159),R=n(26),P=n(49),B=n(33),D=n(21).forEach,F=O("hidden"),j=L("toPrimitive"),K=B.set,z=B.getterFor("Symbol"),Y=Object.prototype,U=o.Symbol,$=i("JSON","stringify"),H=k.f,W=S.f,q=_.f,G=C.f,X=T("symbols"),Z=T("op-symbols"),Q=T("string-to-symbol-registry"),J=T("symbol-to-string-registry"),ee=T("wks"),te=o.QObject,ne=!te||!te.prototype||!te.prototype.findChild,re=c&&l((function(){return 7!=b(W({},"a",{get:function(){return W(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=H(Y,t);r&&delete Y[t],W(e,t,n),r&&e!==Y&&W(Y,t,r)}:W,oe=function(e,t){var n=X[e]=b(U.prototype);return K(n,{type:"Symbol",tag:e,description:t}),c||(n.description=t),n},ie=s?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof U},ae=function(e,t,n){e===Y&&ae(Z,t,n),h(e);var r=m(t,!0);return h(n),f(X,r)?(n.enumerable?(f(e,F)&&e[F][r]&&(e[F][r]=!1),n=b(n,{enumerable:y(0,!1)})):(f(e,F)||W(e,F,y(1,{})),e[F][r]=!0),re(e,r,n)):W(e,r,n)},ce=function(e,t){h(e);var n=v(t),r=x(n).concat(de(n));return D(r,(function(t){c&&!se.call(n,t)||ae(e,t,n[t])})),e},ue=function(e,t){return t===undefined?b(e):ce(b(e),t)},se=function(e){var t=m(e,!0),n=G.call(this,t);return!(this===Y&&f(X,t)&&!f(Z,t))&&(!(n||!f(this,t)||!f(X,t)||f(this,F)&&this[F][t])||n)},le=function(e,t){var n=v(e),r=m(t,!0);if(n!==Y||!f(X,r)||f(Z,r)){var o=H(n,r);return!o||!f(X,r)||f(n,F)&&n[F][r]||(o.enumerable=!0),o}},fe=function(e){var t=q(v(e)),n=[];return D(t,(function(e){f(X,e)||f(I,e)||n.push(e)})),n},de=function(e){var t=e===Y,n=q(t?Z:v(e)),r=[];return D(n,(function(e){!f(X,e)||t&&!f(Y,e)||r.push(X[e])})),r};(u||(A((U=function(){if(this instanceof U)throw TypeError("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==undefined?String(arguments[0]):undefined,t=M(e),n=function r(e){this===Y&&r.call(Z,e),f(this,F)&&f(this[F],t)&&(this[F][t]=!1),re(this,t,y(1,e))};return c&&ne&&re(Y,t,{configurable:!0,set:n}),oe(t,e)}).prototype,"toString",(function(){return z(this).tag})),A(U,"withoutSetter",(function(e){return oe(M(e),e)})),C.f=se,S.f=ae,k.f=le,w.f=_.f=fe,E.f=de,V.f=function(e){return oe(L(e),e)},c&&(W(U.prototype,"description",{configurable:!0,get:function(){return z(this).description}}),a||A(Y,"propertyIsEnumerable",se,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!u,sham:!u},{Symbol:U}),D(x(ee),(function(e){R(e)})),r({target:"Symbol",stat:!0,forced:!u},{"for":function(e){var t=String(e);if(f(Q,t))return Q[t];var n=U(t);return Q[t]=n,J[n]=t,n},keyFor:function(e){if(!ie(e))throw TypeError(e+" is not a symbol");if(f(J,e))return J[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),r({target:"Object",stat:!0,forced:!u,sham:!c},{create:ue,defineProperty:ae,defineProperties:ce,getOwnPropertyDescriptor:le}),r({target:"Object",stat:!0,forced:!u},{getOwnPropertyNames:fe,getOwnPropertySymbols:de}),r({target:"Object",stat:!0,forced:l((function(){E.f(1)}))},{getOwnPropertySymbols:function(e){return E.f(g(e))}}),$)&&r({target:"JSON",stat:!0,forced:!u||l((function(){var e=U();return"[null]"!=$([e])||"{}"!=$({a:e})||"{}"!=$(Object(e))}))},{stringify:function(e,t,n){for(var r,o=[e],i=1;arguments.length>i;)o.push(arguments[i++]);if(r=t,(p(t)||e!==undefined)&&!ie(e))return d(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!ie(t))return t}),o[1]=t,$.apply(null,o)}});U.prototype[j]||N(U.prototype,j,U.prototype.valueOf),P(U,"Symbol"),I[F]=!0},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(7),a=n(20),c=n(8),u=n(16).f,s=n(152),l=i.Symbol;if(o&&"function"==typeof l&&(!("description"in l.prototype)||l().description!==undefined)){var f={},d=function(){var e=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]),t=this instanceof d?new l(e):e===undefined?l():l(e);return""===e&&(f[t]=!0),t};s(d,l);var p=d.prototype=l.prototype;p.constructor=d;var h=p.toString,g="Symbol(test)"==String(l("test")),v=/^Symbol\((.*)\)[^)]+$/;u(p,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=h.call(e);if(a(f,e))return"";var n=g?t.slice(7,-1):t.replace(v,"$1");return""===n?undefined:n}}),r({global:!0,forced:!0},{Symbol:d})}},function(e,t,n){"use strict";n(26)("asyncIterator")},function(e,t,n){"use strict";n(26)("hasInstance")},function(e,t,n){"use strict";n(26)("isConcatSpreadable")},function(e,t,n){"use strict";n(26)("iterator")},function(e,t,n){"use strict";n(26)("match")},function(e,t,n){"use strict";n(26)("matchAll")},function(e,t,n){"use strict";n(26)("replace")},function(e,t,n){"use strict";n(26)("search")},function(e,t,n){"use strict";n(26)("species")},function(e,t,n){"use strict";n(26)("split")},function(e,t,n){"use strict";n(26)("toPrimitive")},function(e,t,n){"use strict";n(26)("toStringTag")},function(e,t,n){"use strict";n(26)("unscopables")},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(58),a=n(8),c=n(18),u=n(12),s=n(54),l=n(72),f=n(73),d=n(15),p=n(116),h=d("isConcatSpreadable"),g=p>=51||!o((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),v=f("concat"),m=function(e){if(!a(e))return!1;var t=e[h];return t!==undefined?!!t:i(e)};r({target:"Array",proto:!0,forced:!g||!v},{concat:function(e){var t,n,r,o,i,a=c(this),f=l(a,0),d=0;for(t=-1,r=arguments.length;t9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");s(f,d++,i)}return f.length=d,f}})},function(e,t,n){"use strict";var r=n(4),o=n(160),i=n(50);r({target:"Array",proto:!0},{copyWithin:o}),i("copyWithin")},function(e,t,n){"use strict";var r=n(4),o=n(21).every,i=n(44),a=n(28),c=i("every"),u=a("every");r({target:"Array",proto:!0,forced:!c||!u},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(117),i=n(50);r({target:"Array",proto:!0},{fill:o}),i("fill")},function(e,t,n){"use strict";var r=n(4),o=n(21).filter,i=n(73),a=n(28),c=i("filter"),u=a("filter");r({target:"Array",proto:!0,forced:!c||!u},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(21).find,i=n(50),a=n(28),c=!0,u=a("find");"find"in[]&&Array(1).find((function(){c=!1})),r({target:"Array",proto:!0,forced:c||!u},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}}),i("find")},function(e,t,n){"use strict";var r=n(4),o=n(21).findIndex,i=n(50),a=n(28),c=!0,u=a("findIndex");"findIndex"in[]&&Array(1).findIndex((function(){c=!1})),r({target:"Array",proto:!0,forced:c||!u},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}}),i("findIndex")},function(e,t,n){"use strict";var r=n(4),o=n(161),i=n(18),a=n(12),c=n(38),u=n(72);r({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:undefined,t=i(this),n=a(t.length),r=u(t,0);return r.length=o(r,t,t,n,0,e===undefined?1:c(e)),r}})},function(e,t,n){"use strict";var r=n(4),o=n(161),i=n(18),a=n(12),c=n(27),u=n(72);r({target:"Array",proto:!0},{flatMap:function(e){var t,n=i(this),r=a(n.length);return c(e),(t=u(n,0)).length=o(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:undefined),t}})},function(e,t,n){"use strict";var r=n(4),o=n(248);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},function(e,t,n){"use strict";var r=n(21).forEach,o=n(44),i=n(28),a=o("forEach"),c=i("forEach");e.exports=a&&c?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}},function(e,t,n){"use strict";var r=n(4),o=n(250);r({target:"Array",stat:!0,forced:!n(85)((function(e){Array.from(e)}))},{from:o})},function(e,t,n){"use strict";var r=n(53),o=n(18),i=n(162),a=n(118),c=n(12),u=n(54),s=n(119);e.exports=function(e){var t,n,l,f,d,p,h=o(e),g="function"==typeof this?this:Array,v=arguments.length,m=v>1?arguments[1]:undefined,y=m!==undefined,b=s(h),x=0;if(y&&(m=r(m,v>2?arguments[2]:undefined,2)),b==undefined||g==Array&&a(b))for(n=new g(t=c(h.length));t>x;x++)p=y?m(h[x],x):h[x],u(n,x,p);else for(d=(f=b.call(h)).next,n=new g;!(l=d.call(f)).done;x++)p=y?i(f,m,[l.value,x],!0):l.value,u(n,x,p);return n.length=x,n}},function(e,t,n){"use strict";var r=n(4),o=n(69).includes,i=n(50);r({target:"Array",proto:!0,forced:!n(28)("indexOf",{ACCESSORS:!0,1:0})},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}}),i("includes")},function(e,t,n){"use strict";var r=n(4),o=n(69).indexOf,i=n(44),a=n(28),c=[].indexOf,u=!!c&&1/[1].indexOf(1,-0)<0,s=i("indexOf"),l=a("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:u||!s||!l},{indexOf:function(e){return u?c.apply(this,arguments)||0:o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";n(4)({target:"Array",stat:!0},{isArray:n(58)})},function(e,t,n){"use strict";var r=n(4),o=n(66),i=n(31),a=n(44),c=[].join,u=o!=Object,s=a("join",",");r({target:"Array",proto:!0,forced:u||!s},{join:function(e){return c.call(i(this),e===undefined?",":e)}})},function(e,t,n){"use strict";var r=n(4),o=n(167);r({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},function(e,t,n){"use strict";var r=n(4),o=n(21).map,i=n(73),a=n(28),c=i("map"),u=a("map");r({target:"Array",proto:!0,forced:!c||!u},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(54);r({target:"Array",stat:!0,forced:o((function(){function e(){}return!(Array.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)i(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var r=n(4),o=n(86).left,i=n(44),a=n(28),c=i("reduce"),u=a("reduce",{1:0});r({target:"Array",proto:!0,forced:!c||!u},{reduce:function(e){return o(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(86).right,i=n(44),a=n(28),c=i("reduceRight"),u=a("reduce",{1:0});r({target:"Array",proto:!0,forced:!c||!u},{reduceRight:function(e){return o(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(58),a=n(47),c=n(12),u=n(31),s=n(54),l=n(15),f=n(73),d=n(28),p=f("slice"),h=d("slice",{ACCESSORS:!0,0:0,1:2}),g=l("species"),v=[].slice,m=Math.max;r({target:"Array",proto:!0,forced:!p||!h},{slice:function(e,t){var n,r,l,f=u(this),d=c(f.length),p=a(e,d),h=a(t===undefined?d:t,d);if(i(f)&&("function"!=typeof(n=f.constructor)||n!==Array&&!i(n.prototype)?o(n)&&null===(n=n[g])&&(n=undefined):n=undefined,n===Array||n===undefined))return v.call(f,p,h);for(r=new(n===undefined?Array:n)(m(h-p,0)),l=0;p1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(27),i=n(18),a=n(5),c=n(44),u=[],s=u.sort,l=a((function(){u.sort(undefined)})),f=a((function(){u.sort(null)})),d=c("sort");r({target:"Array",proto:!0,forced:l||!f||!d},{sort:function(e){return e===undefined?s.call(i(this)):s.call(i(this),o(e))}})},function(e,t,n){"use strict";n(59)("Array")},function(e,t,n){"use strict";var r=n(4),o=n(47),i=n(38),a=n(12),c=n(18),u=n(72),s=n(54),l=n(73),f=n(28),d=l("splice"),p=f("splice",{ACCESSORS:!0,0:0,1:2}),h=Math.max,g=Math.min;r({target:"Array",proto:!0,forced:!d||!p},{splice:function(e,t){var n,r,l,f,d,p,v=c(this),m=a(v.length),y=o(e,m),b=arguments.length;if(0===b?n=r=0:1===b?(n=0,r=m-y):(n=b-2,r=g(h(i(t),0),m-y)),m+n-r>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(l=u(v,r),f=0;fm-r+n;f--)delete v[f-1]}else if(n>r)for(f=m-r;f>y;f--)p=f+n-1,(d=f+r-1)in v?v[p]=v[d]:delete v[p];for(f=0;f>1,g=23===t?o(2,-24)-o(2,-77):0,v=e<0||0===e&&1/e<0?1:0,m=0;for((e=r(e))!=e||e===1/0?(s=e!=e?1:0,u=p):(u=i(a(e)/c),e*(l=o(2,-u))<1&&(u--,l*=2),(e+=u+h>=1?g/l:g*o(2,1-h))*l>=2&&(u++,l/=2),u+h>=p?(s=0,u=p):u+h>=1?(s=(e*l-1)*o(2,t),u+=h):(s=e*o(2,h-1)*o(2,t),u=0));t>=8;f[m++]=255&s,s/=256,t-=8);for(u=u<0;f[m++]=255&u,u/=256,d-=8);return f[--m]|=128*v,f},unpack:function(e,t){var n,r=e.length,i=8*r-t-1,a=(1<>1,u=i-7,s=r-1,l=e[s--],f=127&l;for(l>>=7;u>0;f=256*f+e[s],s--,u-=8);for(n=f&(1<<-u)-1,f>>=-u,u+=t;u>0;n=256*n+e[s],s--,u-=8);if(0===f)f=1-c;else{if(f===a)return n?NaN:l?-1/0:1/0;n+=o(2,t),f-=c}return(l?-1:1)*n*o(2,f-t)}}},function(e,t,n){"use strict";var r=n(4),o=n(13);r({target:"ArrayBuffer",stat:!0,forced:!o.NATIVE_ARRAY_BUFFER_VIEWS},{isView:o.isView})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(87),a=n(11),c=n(47),u=n(12),s=n(45),l=i.ArrayBuffer,f=i.DataView,d=l.prototype.slice;r({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:o((function(){return!new l(2).slice(1,undefined).byteLength}))},{slice:function(e,t){if(d!==undefined&&t===undefined)return d.call(a(this),e);for(var n=a(this).byteLength,r=c(e,n),o=c(t===undefined?n:t,n),i=new(s(this,l))(u(o-r)),p=new f(this),h=new f(i),g=0;r9999?"+":"";return n+o(i(e),n?6:4,0)+"-"+o(this.getUTCMonth()+1,2,0)+"-"+o(this.getUTCDate(),2,0)+"T"+o(this.getUTCHours(),2,0)+":"+o(this.getUTCMinutes(),2,0)+":"+o(this.getUTCSeconds(),2,0)+"."+o(t,3,0)+"Z"}:u},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(18),a=n(40);r({target:"Date",proto:!0,forced:o((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=i(this),n=a(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){"use strict";var r=n(32),o=n(277),i=n(15)("toPrimitive"),a=Date.prototype;i in a||r(a,i,o)},function(e,t,n){"use strict";var r=n(11),o=n(40);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return o(r(this),"number"!==e)}},function(e,t,n){"use strict";var r=n(25),o=Date.prototype,i=o.toString,a=o.getTime;new Date(NaN)+""!="Invalid Date"&&r(o,"toString",(function(){var e=a.call(this);return e==e?i.call(this):"Invalid Date"}))},function(e,t,n){"use strict";n(4)({target:"Function",proto:!0},{bind:n(169)})},function(e,t,n){"use strict";var r=n(8),o=n(16),i=n(42),a=n(15)("hasInstance"),c=Function.prototype;a in c||o.f(c,a,{value:function(e){if("function"!=typeof this||!r(e))return!1;if(!r(this.prototype))return e instanceof this;for(;e=i(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){"use strict";var r=n(10),o=n(16).f,i=Function.prototype,a=i.toString,c=/^\s*function ([^ (]*)/;r&&!("name"in i)&&o(i,"name",{configurable:!0,get:function(){try{return a.call(this).match(c)[1]}catch(e){return""}}})},function(e,t,n){"use strict";n(4)({global:!0},{globalThis:n(7)})},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(5),a=o("JSON","stringify"),c=/[\uD800-\uDFFF]/g,u=/^[\uD800-\uDBFF]$/,s=/^[\uDC00-\uDFFF]$/,l=function(e,t,n){var r=n.charAt(t-1),o=n.charAt(t+1);return u.test(e)&&!s.test(o)||s.test(e)&&!u.test(r)?"\\u"+e.charCodeAt(0).toString(16):e},f=i((function(){return'"\\udf06\\ud834"'!==a("\udf06\ud834")||'"\\udead"'!==a("\udead")}));a&&r({target:"JSON",stat:!0,forced:f},{stringify:function(e,t,n){var r=a.apply(null,arguments);return"string"==typeof r?r.replace(c,l):r}})},function(e,t,n){"use strict";var r=n(7);n(49)(r.JSON,"JSON",!0)},function(e,t,n){"use strict";var r=n(88),o=n(170);e.exports=r("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),o)},function(e,t,n){"use strict";var r=n(4),o=n(171),i=Math.acosh,a=Math.log,c=Math.sqrt,u=Math.LN2;r({target:"Math",stat:!0,forced:!i||710!=Math.floor(i(Number.MAX_VALUE))||i(Infinity)!=Infinity},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?a(e)+u:o(e-1+c(e-1)*c(e+1))}})},function(e,t,n){"use strict";var r=n(4),o=Math.asinh,i=Math.log,a=Math.sqrt;r({target:"Math",stat:!0,forced:!(o&&1/o(0)>0)},{asinh:function c(e){return isFinite(e=+e)&&0!=e?e<0?-c(-e):i(e+a(e*e+1)):e}})},function(e,t,n){"use strict";var r=n(4),o=Math.atanh,i=Math.log;r({target:"Math",stat:!0,forced:!(o&&1/o(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:i((1+e)/(1-e))/2}})},function(e,t,n){"use strict";var r=n(4),o=n(126),i=Math.abs,a=Math.pow;r({target:"Math",stat:!0},{cbrt:function(e){return o(e=+e)*a(i(e),1/3)}})},function(e,t,n){"use strict";var r=n(4),o=Math.floor,i=Math.log,a=Math.LOG2E;r({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-o(i(e+.5)*a):32}})},function(e,t,n){"use strict";var r=n(4),o=n(90),i=Math.cosh,a=Math.abs,c=Math.E;r({target:"Math",stat:!0,forced:!i||i(710)===Infinity},{cosh:function(e){var t=o(a(e)-1)+1;return(t+1/(t*c*c))*(c/2)}})},function(e,t,n){"use strict";var r=n(4),o=n(90);r({target:"Math",stat:!0,forced:o!=Math.expm1},{expm1:o})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{fround:n(294)})},function(e,t,n){"use strict";var r=n(126),o=Math.abs,i=Math.pow,a=i(2,-52),c=i(2,-23),u=i(2,127)*(2-c),s=i(2,-126);e.exports=Math.fround||function(e){var t,n,i=o(e),l=r(e);return iu||n!=n?l*Infinity:l*n}},function(e,t,n){"use strict";var r=n(4),o=Math.hypot,i=Math.abs,a=Math.sqrt;r({target:"Math",stat:!0,forced:!!o&&o(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,r,o=0,c=0,u=arguments.length,s=0;c0?(r=n/s)*r:n;return s===Infinity?Infinity:s*a(o)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=Math.imul;r({target:"Math",stat:!0,forced:o((function(){return-5!=i(4294967295,5)||2!=i.length}))},{imul:function(e,t){var n=+e,r=+t,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},function(e,t,n){"use strict";var r=n(4),o=Math.log,i=Math.LOG10E;r({target:"Math",stat:!0},{log10:function(e){return o(e)*i}})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{log1p:n(171)})},function(e,t,n){"use strict";var r=n(4),o=Math.log,i=Math.LN2;r({target:"Math",stat:!0},{log2:function(e){return o(e)/i}})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{sign:n(126)})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(90),a=Math.abs,c=Math.exp,u=Math.E;r({target:"Math",stat:!0,forced:o((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return a(e=+e)<1?(i(e)-i(-e))/2:(c(e-1)-c(-e-1))*(u/2)}})},function(e,t,n){"use strict";var r=n(4),o=n(90),i=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=o(e=+e),n=o(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(i(e)+i(-e))}})},function(e,t,n){"use strict";n(49)(Math,"Math",!0)},function(e,t,n){"use strict";var r=n(4),o=Math.ceil,i=Math.floor;r({target:"Math",stat:!0},{trunc:function(e){return(e>0?i:o)(e)}})},function(e,t,n){"use strict";var r=n(10),o=n(7),i=n(70),a=n(25),c=n(20),u=n(37),s=n(89),l=n(40),f=n(5),d=n(48),p=n(52).f,h=n(23).f,g=n(16).f,v=n(62).trim,m=o.Number,y=m.prototype,b="Number"==u(d(y)),x=function(e){var t,n,r,o,i,a,c,u,s=l(e,!1);if("string"==typeof s&&s.length>2)if(43===(t=(s=v(s)).charCodeAt(0))||45===t){if(88===(n=s.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(s.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+s}for(a=(i=s.slice(2)).length,c=0;co)return NaN;return parseInt(i,r)}return+s};if(i("Number",!m(" 0o1")||!m("0b1")||m("+0x1"))){for(var w,_=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof _&&(b?f((function(){y.valueOf.call(n)})):"Number"!=u(n))?s(new m(x(t)),n,_):x(t)},E=r?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;E.length>k;k++)c(m,w=E[k])&&!c(_,w)&&g(_,w,h(m,w));_.prototype=y,y.constructor=_,a(o,"Number",_)}},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isFinite:n(308)})},function(e,t,n){"use strict";var r=n(7).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&r(e)}},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isInteger:n(172)})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},function(e,t,n){"use strict";var r=n(4),o=n(172),i=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return o(e)&&i(e)<=9007199254740991}})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){"use strict";var r=n(4),o=n(315);r({target:"Number",stat:!0,forced:Number.parseFloat!=o},{parseFloat:o})},function(e,t,n){"use strict";var r=n(7),o=n(62).trim,i=n(91),a=r.parseFloat,c=1/a(i+"-0")!=-Infinity;e.exports=c?function(e){var t=o(String(e)),n=a(t);return 0===n&&"-"==t.charAt(0)?-0:n}:a},function(e,t,n){"use strict";var r=n(4),o=n(173);r({target:"Number",stat:!0,forced:Number.parseInt!=o},{parseInt:o})},function(e,t,n){"use strict";var r=n(4),o=n(38),i=n(318),a=n(125),c=n(5),u=1..toFixed,s=Math.floor,l=function f(e,t,n){return 0===t?n:t%2==1?f(e,t-1,n*e):f(e*e,t/2,n)};r({target:"Number",proto:!0,forced:u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){u.call({})}))},{toFixed:function(e){var t,n,r,c,u=i(this),f=o(e),d=[0,0,0,0,0,0],p="",h="0",g=function(e,t){for(var n=-1,r=t;++n<6;)r+=e*d[n],d[n]=r%1e7,r=s(r/1e7)},v=function(e){for(var t=6,n=0;--t>=0;)n+=d[t],d[t]=s(n/e),n=n%e*1e7},m=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==d[e]){var n=String(d[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t};if(f<0||f>20)throw RangeError("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(p="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*l(2,69,1))-69)<0?u*l(2,-t,1):u/l(2,t,1),n*=4503599627370496,(t=52-t)>0){for(g(0,n),r=f;r>=7;)g(1e7,0),r-=7;for(g(l(10,r,1),0),r=t-1;r>=23;)v(1<<23),r-=23;v(1<0?p+((c=h.length)<=f?"0."+a.call("0",f-c)+h:h.slice(0,c-f)+"."+h.slice(c-f)):p+h}})},function(e,t,n){"use strict";var r=n(37);e.exports=function(e){if("number"!=typeof e&&"Number"!=r(e))throw TypeError("Incorrect invocation");return+e}},function(e,t,n){"use strict";var r=n(4),o=n(320);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(e,t,n){"use strict";var r=n(10),o=n(5),i=n(71),a=n(114),c=n(81),u=n(18),s=n(66),l=Object.assign,f=Object.defineProperty;e.exports=!l||o((function(){if(r&&1!==l({b:1},l(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(e){t[e]=e})),7!=l({},e)[n]||"abcdefghijklmnopqrst"!=i(l({},t)).join("")}))?function(e,t){for(var n=u(e),o=arguments.length,l=1,f=a.f,d=c.f;o>l;)for(var p,h=s(arguments[l++]),g=f?i(h).concat(f(h)):i(h),v=g.length,m=0;v>m;)p=g[m++],r&&!d.call(h,p)||(n[p]=h[p]);return n}:l},function(e,t,n){"use strict";n(4)({target:"Object",stat:!0,sham:!n(10)},{create:n(48)})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(27),u=n(16);o&&r({target:"Object",proto:!0,forced:i},{__defineGetter__:function(e,t){u.f(a(this),e,{get:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(4),o=n(10);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperties:n(156)})},function(e,t,n){"use strict";var r=n(4),o=n(10);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperty:n(16).f})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(27),u=n(16);o&&r({target:"Object",proto:!0,forced:i},{__defineSetter__:function(e,t){u.f(a(this),e,{set:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(4),o=n(174).entries;r({target:"Object",stat:!0},{entries:function(e){return o(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(76),i=n(5),a=n(8),c=n(56).onFreeze,u=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){u(1)})),sham:!o},{freeze:function(e){return u&&a(e)?u(c(e)):e}})},function(e,t,n){"use strict";var r=n(4),o=n(61),i=n(54);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return o(e,(function(e,n){i(t,e,n)}),undefined,!0),t}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(31),a=n(23).f,c=n(10),u=o((function(){a(1)}));r({target:"Object",stat:!0,forced:!c||u,sham:!c},{getOwnPropertyDescriptor:function(e,t){return a(i(e),t)}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(112),a=n(31),c=n(23),u=n(54);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=a(e),o=c.f,s=i(r),l={},f=0;s.length>f;)(n=o(r,t=s[f++]))!==undefined&&u(l,t,n);return l}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(158).f;r({target:"Object",stat:!0,forced:o((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:i})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(18),a=n(42),c=n(122);r({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!c},{getPrototypeOf:function(e){return a(i(e))}})},function(e,t,n){"use strict";n(4)({target:"Object",stat:!0},{is:n(175)})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(8),a=Object.isExtensible;r({target:"Object",stat:!0,forced:o((function(){a(1)}))},{isExtensible:function(e){return!!i(e)&&(!a||a(e))}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(8),a=Object.isFrozen;r({target:"Object",stat:!0,forced:o((function(){a(1)}))},{isFrozen:function(e){return!i(e)||!!a&&a(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(8),a=Object.isSealed;r({target:"Object",stat:!0,forced:o((function(){a(1)}))},{isSealed:function(e){return!i(e)||!!a&&a(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(18),i=n(71);r({target:"Object",stat:!0,forced:n(5)((function(){i(1)}))},{keys:function(e){return i(o(e))}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(40),u=n(42),s=n(23).f;o&&r({target:"Object",proto:!0,forced:i},{__lookupGetter__:function(e){var t,n=a(this),r=c(e,!0);do{if(t=s(n,r))return t.get}while(n=u(n))}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(40),u=n(42),s=n(23).f;o&&r({target:"Object",proto:!0,forced:i},{__lookupSetter__:function(e){var t,n=a(this),r=c(e,!0);do{if(t=s(n,r))return t.set}while(n=u(n))}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(56).onFreeze,a=n(76),c=n(5),u=Object.preventExtensions;r({target:"Object",stat:!0,forced:c((function(){u(1)})),sham:!a},{preventExtensions:function(e){return u&&o(e)?u(i(e)):e}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(56).onFreeze,a=n(76),c=n(5),u=Object.seal;r({target:"Object",stat:!0,forced:c((function(){u(1)})),sham:!a},{seal:function(e){return u&&o(e)?u(i(e)):e}})},function(e,t,n){"use strict";n(4)({target:"Object",stat:!0},{setPrototypeOf:n(55)})},function(e,t,n){"use strict";var r=n(120),o=n(25),i=n(344);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(e,t,n){"use strict";var r=n(120),o=n(84);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},function(e,t,n){"use strict";var r=n(4),o=n(174).values;r({target:"Object",stat:!0},{values:function(e){return o(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(173);r({global:!0,forced:parseInt!=o},{parseInt:o})},function(e,t,n){"use strict";var r,o,i,a,c=n(4),u=n(43),s=n(7),l=n(41),f=n(176),d=n(25),p=n(75),h=n(49),g=n(59),v=n(8),m=n(27),y=n(60),b=n(37),x=n(110),w=n(61),_=n(85),E=n(45),k=n(127).set,S=n(178),C=n(179),N=n(348),A=n(128),T=n(180),O=n(33),I=n(70),M=n(15),L=n(116),V=M("species"),R="Promise",P=O.get,B=O.set,D=O.getterFor(R),F=f,j=s.TypeError,K=s.document,z=s.process,Y=l("fetch"),U=A.f,$=U,H="process"==b(z),W=!!(K&&K.createEvent&&s.dispatchEvent),q=I(R,(function(){if(!(x(F)!==String(F))){if(66===L)return!0;if(!H&&"function"!=typeof PromiseRejectionEvent)return!0}if(u&&!F.prototype["finally"])return!0;if(L>=51&&/native code/.test(F))return!1;var e=F.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[V]=t,!(e.then((function(){}))instanceof t)})),G=q||!_((function(e){F.all(e)["catch"]((function(){}))})),X=function(e){var t;return!(!v(e)||"function"!=typeof(t=e.then))&&t},Z=function(e,t,n){if(!t.notified){t.notified=!0;var r=t.reactions;S((function(){for(var o=t.value,i=1==t.state,a=0;r.length>a;){var c,u,s,l=r[a++],f=i?l.ok:l.fail,d=l.resolve,p=l.reject,h=l.domain;try{f?(i||(2===t.rejection&&te(e,t),t.rejection=1),!0===f?c=o:(h&&h.enter(),c=f(o),h&&(h.exit(),s=!0)),c===l.promise?p(j("Promise-chain cycle")):(u=X(c))?u.call(c,d,p):d(c)):p(o)}catch(g){h&&!s&&h.exit(),p(g)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&J(e,t)}))}},Q=function(e,t,n){var r,o;W?((r=K.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),s.dispatchEvent(r)):r={promise:t,reason:n},(o=s["on"+e])?o(r):"unhandledrejection"===e&&N("Unhandled promise rejection",n)},J=function(e,t){k.call(s,(function(){var n,r=t.value;if(ee(t)&&(n=T((function(){H?z.emit("unhandledRejection",r,e):Q("unhandledrejection",e,r)})),t.rejection=H||ee(t)?2:1,n.error))throw n.value}))},ee=function(e){return 1!==e.rejection&&!e.parent},te=function(e,t){k.call(s,(function(){H?z.emit("rejectionHandled",e):Q("rejectionhandled",e,t.value)}))},ne=function(e,t,n,r){return function(o){e(t,n,o,r)}},re=function(e,t,n,r){t.done||(t.done=!0,r&&(t=r),t.value=n,t.state=2,Z(e,t,!0))},oe=function ie(e,t,n,r){if(!t.done){t.done=!0,r&&(t=r);try{if(e===n)throw j("Promise can't be resolved itself");var o=X(n);o?S((function(){var r={done:!1};try{o.call(n,ne(ie,e,r,t),ne(re,e,r,t))}catch(i){re(e,r,i,t)}})):(t.value=n,t.state=1,Z(e,t,!1))}catch(i){re(e,{done:!1},i,t)}}};q&&(F=function(e){y(this,F,R),m(e),r.call(this);var t=P(this);try{e(ne(oe,this,t),ne(re,this,t))}catch(n){re(this,t,n)}},(r=function(e){B(this,{type:R,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:undefined})}).prototype=p(F.prototype,{then:function(e,t){var n=D(this),r=U(E(this,F));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=H?z.domain:undefined,n.parent=!0,n.reactions.push(r),0!=n.state&&Z(this,n,!1),r.promise},"catch":function(e){return this.then(undefined,e)}}),o=function(){var e=new r,t=P(e);this.promise=e,this.resolve=ne(oe,e,t),this.reject=ne(re,e,t)},A.f=U=function(e){return e===F||e===i?new o(e):$(e)},u||"function"!=typeof f||(a=f.prototype.then,d(f.prototype,"then",(function(e,t){var n=this;return new F((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof Y&&c({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return C(F,Y.apply(s,arguments))}}))),c({global:!0,wrap:!0,forced:q},{Promise:F}),h(F,R,!1,!0),g(R),i=l(R),c({target:R,stat:!0,forced:q},{reject:function(e){var t=U(this);return t.reject.call(undefined,e),t.promise}}),c({target:R,stat:!0,forced:u||q},{resolve:function(e){return C(u&&this===i?F:this,e)}}),c({target:R,stat:!0,forced:G},{all:function(e){var t=this,n=U(t),r=n.resolve,o=n.reject,i=T((function(){var n=m(t.resolve),i=[],a=0,c=1;w(e,(function(e){var u=a++,s=!1;i.push(undefined),c++,n.call(t,e).then((function(e){s||(s=!0,i[u]=e,--c||r(i))}),o)})),--c||r(i)}));return i.error&&o(i.value),n.promise},race:function(e){var t=this,n=U(t),r=n.reject,o=T((function(){var o=m(t.resolve);w(e,(function(e){o.call(t,e).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},function(e,t,n){"use strict";var r=n(7);e.exports=function(e,t){var n=r.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},function(e,t,n){"use strict";var r=n(4),o=n(27),i=n(128),a=n(180),c=n(61);r({target:"Promise",stat:!0},{allSettled:function(e){var t=this,n=i.f(t),r=n.resolve,u=n.reject,s=a((function(){var n=o(t.resolve),i=[],a=0,u=1;c(e,(function(e){var o=a++,c=!1;i.push(undefined),u++,n.call(t,e).then((function(e){c||(c=!0,i[o]={status:"fulfilled",value:e},--u||r(i))}),(function(e){c||(c=!0,i[o]={status:"rejected",reason:e},--u||r(i))}))})),--u||r(i)}));return s.error&&u(s.value),n.promise}})},function(e,t,n){"use strict";var r=n(4),o=n(43),i=n(176),a=n(5),c=n(41),u=n(45),s=n(179),l=n(25);r({target:"Promise",proto:!0,real:!0,forced:!!i&&a((function(){i.prototype["finally"].call({then:function(){}},(function(){}))}))},{"finally":function(e){var t=u(this,c("Promise")),n="function"==typeof e;return this.then(n?function(n){return s(t,e()).then((function(){return n}))}:e,n?function(n){return s(t,e()).then((function(){throw n}))}:e)}}),o||"function"!=typeof i||i.prototype["finally"]||l(i.prototype,"finally",c("Promise").prototype["finally"])},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(27),a=n(11),c=n(5),u=o("Reflect","apply"),s=Function.apply;r({target:"Reflect",stat:!0,forced:!c((function(){u((function(){}))}))},{apply:function(e,t,n){return i(e),a(n),u?u(e,t,n):s.call(e,t,n)}})},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(27),a=n(11),c=n(8),u=n(48),s=n(169),l=n(5),f=o("Reflect","construct"),d=l((function(){function e(){}return!(f((function(){}),[],e)instanceof e)})),p=!l((function(){f((function(){}))})),h=d||p;r({target:"Reflect",stat:!0,forced:h,sham:h},{construct:function(e,t){i(e),a(t);var n=arguments.length<3?e:i(arguments[2]);if(p&&!d)return f(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return r.push.apply(r,t),new(s.apply(e,r))}var o=n.prototype,l=u(c(o)?o:Object.prototype),h=Function.apply.call(e,l,t);return c(h)?h:l}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(11),a=n(40),c=n(16);r({target:"Reflect",stat:!0,forced:n(5)((function(){Reflect.defineProperty(c.f({},1,{value:1}),1,{value:2})})),sham:!o},{defineProperty:function(e,t,n){i(e);var r=a(t,!0);i(n);try{return c.f(e,r,n),!0}catch(o){return!1}}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(23).f;r({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=i(o(e),t);return!(n&&!n.configurable)&&delete e[t]}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(11),a=n(20),c=n(23),u=n(42);r({target:"Reflect",stat:!0},{get:function s(e,t){var n,r,l=arguments.length<3?e:arguments[2];return i(e)===l?e[t]:(n=c.f(e,t))?a(n,"value")?n.value:n.get===undefined?undefined:n.get.call(l):o(r=u(e))?s(r,t,l):void 0}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(11),a=n(23);r({target:"Reflect",stat:!0,sham:!o},{getOwnPropertyDescriptor:function(e,t){return a.f(i(e),t)}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(42);r({target:"Reflect",stat:!0,sham:!n(122)},{getPrototypeOf:function(e){return i(o(e))}})},function(e,t,n){"use strict";n(4)({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=Object.isExtensible;r({target:"Reflect",stat:!0},{isExtensible:function(e){return o(e),!i||i(e)}})},function(e,t,n){"use strict";n(4)({target:"Reflect",stat:!0},{ownKeys:n(112)})},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(11);r({target:"Reflect",stat:!0,sham:!n(76)},{preventExtensions:function(e){i(e);try{var t=o("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(8),a=n(20),c=n(5),u=n(16),s=n(23),l=n(42),f=n(51);r({target:"Reflect",stat:!0,forced:c((function(){var e=u.f({},"a",{configurable:!0});return!1!==Reflect.set(l(e),"a",1,e)}))},{set:function d(e,t,n){var r,c,p=arguments.length<4?e:arguments[3],h=s.f(o(e),t);if(!h){if(i(c=l(e)))return d(c,t,n,p);h=f(0)}if(a(h,"value")){if(!1===h.writable||!i(p))return!1;if(r=s.f(p,t)){if(r.get||r.set||!1===r.writable)return!1;r.value=n,u.f(p,t,r)}else u.f(p,t,f(0,n));return!0}return h.set!==undefined&&(h.set.call(p,n),!0)}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(166),a=n(55);a&&r({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){o(e),i(t);try{return a(e,t),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var r=n(10),o=n(7),i=n(70),a=n(89),c=n(16).f,u=n(52).f,s=n(93),l=n(77),f=n(94),d=n(25),p=n(5),h=n(33).set,g=n(59),v=n(15)("match"),m=o.RegExp,y=m.prototype,b=/a/g,x=/a/g,w=new m(b)!==b,_=f.UNSUPPORTED_Y;if(r&&i("RegExp",!w||_||p((function(){return x[v]=!1,m(b)!=b||m(x)==x||"/a/i"!=m(b,"i")})))){for(var E=function(e,t){var n,r=this instanceof E,o=s(e),i=t===undefined;if(!r&&o&&e.constructor===E&&i)return e;w?o&&!i&&(e=e.source):e instanceof E&&(i&&(t=l.call(e)),e=e.source),_&&(n=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,""));var c=a(w?new m(e,t):m(e,t),r?this:y,E);return _&&n&&h(c,{sticky:n}),c},k=function(e){e in E||c(E,e,{configurable:!0,get:function(){return m[e]},set:function(t){m[e]=t}})},S=u(m),C=0;S.length>C;)k(S[C++]);y.constructor=E,E.prototype=y,d(o,"RegExp",E)}g("RegExp")},function(e,t,n){"use strict";var r=n(10),o=n(16),i=n(77),a=n(94).UNSUPPORTED_Y;r&&("g"!=/./g.flags||a)&&o.f(RegExp.prototype,"flags",{configurable:!0,get:i})},function(e,t,n){"use strict";var r=n(10),o=n(94).UNSUPPORTED_Y,i=n(16).f,a=n(33).get,c=RegExp.prototype;r&&o&&i(RegExp.prototype,"sticky",{configurable:!0,get:function(){if(this===c)return undefined;if(this instanceof RegExp)return!!a(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}})},function(e,t,n){"use strict";n(129);var r,o,i=n(4),a=n(8),c=(r=!1,(o=/[ac]/).exec=function(){return r=!0,/./.exec.apply(this,arguments)},!0===o.test("abc")&&r),u=/./.test;i({target:"RegExp",proto:!0,forced:!c},{test:function(e){if("function"!=typeof this.exec)return u.call(this,e);var t=this.exec(e);if(null!==t&&!a(t))throw new Error("RegExp exec method returned something other than an Object or null");return!!t}})},function(e,t,n){"use strict";var r=n(25),o=n(11),i=n(5),a=n(77),c=RegExp.prototype,u=c.toString,s=i((function(){return"/a/b"!=u.call({source:"a",flags:"b"})})),l="toString"!=u.name;(s||l)&&r(RegExp.prototype,"toString",(function(){var e=o(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(n===undefined&&e instanceof RegExp&&!("flags"in c)?a.call(e):n)}),{unsafe:!0})},function(e,t,n){"use strict";var r=n(88),o=n(170);e.exports=r("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),o)},function(e,t,n){"use strict";var r=n(4),o=n(130).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return o(this,e)}})},function(e,t,n){"use strict";var r,o=n(4),i=n(23).f,a=n(12),c=n(131),u=n(24),s=n(132),l=n(43),f="".endsWith,d=Math.min,p=s("endsWith");o({target:"String",proto:!0,forced:!!(l||p||(r=i(String.prototype,"endsWith"),!r||r.writable))&&!p},{endsWith:function(e){var t=String(u(this));c(e);var n=arguments.length>1?arguments[1]:undefined,r=a(t.length),o=n===undefined?r:d(a(n),r),i=String(e);return f?f.call(t,i,o):t.slice(o-i.length,o)===i}})},function(e,t,n){"use strict";var r=n(4),o=n(47),i=String.fromCharCode,a=String.fromCodePoint;r({target:"String",stat:!0,forced:!!a&&1!=a.length},{fromCodePoint:function(e){for(var t,n=[],r=arguments.length,a=0;r>a;){if(t=+arguments[a++],o(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?i(t):i(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){"use strict";var r=n(4),o=n(131),i=n(24);r({target:"String",proto:!0,forced:!n(132)("includes")},{includes:function(e){return!!~String(i(this)).indexOf(o(e),arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(130).charAt,o=n(33),i=n(121),a=o.set,c=o.getterFor("String Iterator");i(String,"String",(function(e){a(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=c(this),n=t.string,o=t.index;return o>=n.length?{value:undefined,done:!0}:(e=r(n,o),t.index+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var r=n(96),o=n(11),i=n(12),a=n(24),c=n(97),u=n(98);r("match",1,(function(e,t,n){return[function(t){var n=a(this),r=t==undefined?undefined:t[e];return r!==undefined?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var a=o(e),s=String(this);if(!a.global)return u(a,s);var l=a.unicode;a.lastIndex=0;for(var f,d=[],p=0;null!==(f=u(a,s));){var h=String(f[0]);d[p]=h,""===h&&(a.lastIndex=c(s,i(a.lastIndex),l)),p++}return 0===p?null:d}]}))},function(e,t,n){"use strict";var r=n(4),o=n(164),i=n(24),a=n(12),c=n(27),u=n(11),s=n(37),l=n(93),f=n(77),d=n(32),p=n(5),h=n(15),g=n(45),v=n(97),m=n(33),y=n(43),b=h("matchAll"),x=m.set,w=m.getterFor("RegExp String Iterator"),_=RegExp.prototype,E=_.exec,k="".matchAll,S=!!k&&!p((function(){"a".matchAll(/./)})),C=o((function(e,t,n,r){x(this,{type:"RegExp String Iterator",regexp:e,string:t,global:n,unicode:r,done:!1})}),"RegExp String",(function(){var e=w(this);if(e.done)return{value:undefined,done:!0};var t=e.regexp,n=e.string,r=function(e,t){var n,r=e.exec;if("function"==typeof r){if("object"!=typeof(n=r.call(e,t)))throw TypeError("Incorrect exec result");return n}return E.call(e,t)}(t,n);return null===r?{value:undefined,done:e.done=!0}:e.global?(""==String(r[0])&&(t.lastIndex=v(n,a(t.lastIndex),e.unicode)),{value:r,done:!1}):(e.done=!0,{value:r,done:!1})})),N=function(e){var t,n,r,o,i,c,s=u(this),l=String(e);return t=g(s,RegExp),(n=s.flags)===undefined&&s instanceof RegExp&&!("flags"in _)&&(n=f.call(s)),r=n===undefined?"":String(n),o=new t(t===RegExp?s.source:s,r),i=!!~r.indexOf("g"),c=!!~r.indexOf("u"),o.lastIndex=a(s.lastIndex),new C(o,l,i,c)};r({target:"String",proto:!0,forced:S},{matchAll:function(e){var t,n,r,o=i(this);if(null!=e){if(l(e)&&!~String(i("flags"in _?e.flags:f.call(e))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(S)return k.apply(o,arguments);if((n=e[b])===undefined&&y&&"RegExp"==s(e)&&(n=N),null!=n)return c(n).call(e,o)}else if(S)return k.apply(o,arguments);return t=String(o),r=new RegExp(e,"g"),y?N.call(r,t):r[b](t)}}),y||b in _||d(_,b,N)},function(e,t,n){"use strict";var r=n(4),o=n(124).end;r({target:"String",proto:!0,forced:n(181)},{padEnd:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(124).start;r({target:"String",proto:!0,forced:n(181)},{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(31),i=n(12);r({target:"String",stat:!0},{raw:function(e){for(var t=o(e.raw),n=i(t.length),r=arguments.length,a=[],c=0;n>c;)a.push(String(t[c++])),c]*>)/g,g=/\$([$&'`]|\d\d?)/g;r("replace",2,(function(e,t,n,r){var v=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=r.REPLACE_KEEPS_$0,y=v?"$":"$0";return[function(n,r){var o=u(this),i=n==undefined?undefined:n[e];return i!==undefined?i.call(n,o,r):t.call(String(o),n,r)},function(e,r){if(!v&&m||"string"==typeof r&&-1===r.indexOf(y)){var i=n(t,e,this,r);if(i.done)return i.value}var u=o(e),p=String(this),h="function"==typeof r;h||(r=String(r));var g=u.global;if(g){var x=u.unicode;u.lastIndex=0}for(var w=[];;){var _=l(u,p);if(null===_)break;if(w.push(_),!g)break;""===String(_[0])&&(u.lastIndex=s(p,a(u.lastIndex),x))}for(var E,k="",S=0,C=0;C=S&&(k+=p.slice(S,A)+L,S=A+N.length)}return k+p.slice(S)}];function b(e,n,r,o,a,c){var u=r+e.length,s=o.length,l=g;return a!==undefined&&(a=i(a),l=h),t.call(c,l,(function(t,i){var c;switch(i.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,r);case"'":return n.slice(u);case"<":c=a[i.slice(1,-1)];break;default:var l=+i;if(0===l)return t;if(l>s){var f=p(l/10);return 0===f?t:f<=s?o[f-1]===undefined?i.charAt(1):o[f-1]+i.charAt(1):t}c=o[l-1]}return c===undefined?"":c}))}}))},function(e,t,n){"use strict";var r=n(96),o=n(11),i=n(24),a=n(175),c=n(98);r("search",1,(function(e,t,n){return[function(t){var n=i(this),r=t==undefined?undefined:t[e];return r!==undefined?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var i=o(e),u=String(this),s=i.lastIndex;a(s,0)||(i.lastIndex=0);var l=c(i,u);return a(i.lastIndex,s)||(i.lastIndex=s),null===l?-1:l.index}]}))},function(e,t,n){"use strict";var r=n(96),o=n(93),i=n(11),a=n(24),c=n(45),u=n(97),s=n(12),l=n(98),f=n(95),d=n(5),p=[].push,h=Math.min,g=!d((function(){return!RegExp(4294967295,"y")}));r("split",2,(function(e,t,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var r=String(a(this)),i=n===undefined?4294967295:n>>>0;if(0===i)return[];if(e===undefined)return[r];if(!o(e))return t.call(r,e,i);for(var c,u,s,l=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),h=0,g=new RegExp(e.source,d+"g");(c=f.call(g,r))&&!((u=g.lastIndex)>h&&(l.push(r.slice(h,c.index)),c.length>1&&c.index=i));)g.lastIndex===c.index&&g.lastIndex++;return h===r.length?!s&&g.test("")||l.push(""):l.push(r.slice(h)),l.length>i?l.slice(0,i):l}:"0".split(undefined,0).length?function(e,n){return e===undefined&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var o=a(this),i=t==undefined?undefined:t[e];return i!==undefined?i.call(t,o,n):r.call(String(o),t,n)},function(e,o){var a=n(r,e,this,o,r!==t);if(a.done)return a.value;var f=i(e),d=String(this),p=c(f,RegExp),v=f.unicode,m=(f.ignoreCase?"i":"")+(f.multiline?"m":"")+(f.unicode?"u":"")+(g?"y":"g"),y=new p(g?f:"^(?:"+f.source+")",m),b=o===undefined?4294967295:o>>>0;if(0===b)return[];if(0===d.length)return null===l(y,d)?[d]:[];for(var x=0,w=0,_=[];w1?arguments[1]:undefined,t.length)),r=String(e);return f?f.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){"use strict";var r=n(4),o=n(62).trim;r({target:"String",proto:!0,forced:n(133)("trim")},{trim:function(){return o(this)}})},function(e,t,n){"use strict";var r=n(4),o=n(62).end,i=n(133)("trimEnd"),a=i?function(){return o(this)}:"".trimEnd;r({target:"String",proto:!0,forced:i},{trimEnd:a,trimRight:a})},function(e,t,n){"use strict";var r=n(4),o=n(62).start,i=n(133)("trimStart"),a=i?function(){return o(this)}:"".trimStart;r({target:"String",proto:!0,forced:i},{trimStart:a,trimLeft:a})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("anchor")},{anchor:function(e){return o(this,"a","name",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("big")},{big:function(){return o(this,"big","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("blink")},{blink:function(){return o(this,"blink","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("bold")},{bold:function(){return o(this,"b","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("fixed")},{fixed:function(){return o(this,"tt","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("fontcolor")},{fontcolor:function(e){return o(this,"font","color",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("fontsize")},{fontsize:function(e){return o(this,"font","size",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("italics")},{italics:function(){return o(this,"i","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("link")},{link:function(e){return o(this,"a","href",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("small")},{small:function(){return o(this,"small","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("strike")},{strike:function(){return o(this,"strike","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("sub")},{sub:function(){return o(this,"sub","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("sup")},{sup:function(){return o(this,"sup","","")}})},function(e,t,n){"use strict";n(46)("Float32",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";var r=n(38);e.exports=function(e){var t=r(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},function(e,t,n){"use strict";n(46)("Float64",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Int8",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Int16",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Int32",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}}),!0)},function(e,t,n){"use strict";n(46)("Uint16",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Uint32",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";var r=n(13),o=n(160),i=r.aTypedArray;(0,r.exportTypedArrayMethod)("copyWithin",(function(e,t){return o.call(i(this),e,t,arguments.length>2?arguments[2]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).every,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("every",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(117),i=r.aTypedArray;(0,r.exportTypedArrayMethod)("fill",(function(e){return o.apply(i(this),arguments)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).filter,i=n(45),a=r.aTypedArray,c=r.aTypedArrayConstructor;(0,r.exportTypedArrayMethod)("filter",(function(e){for(var t=o(a(this),e,arguments.length>1?arguments[1]:undefined),n=i(this,this.constructor),r=0,u=t.length,s=new(c(n))(u);u>r;)s[r]=t[r++];return s}))},function(e,t,n){"use strict";var r=n(13),o=n(21).find,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("find",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).findIndex,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("findIndex",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).forEach,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("forEach",(function(e){o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(134);(0,n(13).exportTypedArrayStaticMethod)("from",n(183),r)},function(e,t,n){"use strict";var r=n(13),o=n(69).includes,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("includes",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(69).indexOf,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("indexOf",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(7),o=n(13),i=n(163),a=n(15)("iterator"),c=r.Uint8Array,u=i.values,s=i.keys,l=i.entries,f=o.aTypedArray,d=o.exportTypedArrayMethod,p=c&&c.prototype[a],h=!!p&&("values"==p.name||p.name==undefined),g=function(){return u.call(f(this))};d("entries",(function(){return l.call(f(this))})),d("keys",(function(){return s.call(f(this))})),d("values",g,!h),d(a,g,!h)},function(e,t,n){"use strict";var r=n(13),o=r.aTypedArray,i=r.exportTypedArrayMethod,a=[].join;i("join",(function(e){return a.apply(o(this),arguments)}))},function(e,t,n){"use strict";var r=n(13),o=n(167),i=r.aTypedArray;(0,r.exportTypedArrayMethod)("lastIndexOf",(function(e){return o.apply(i(this),arguments)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).map,i=n(45),a=r.aTypedArray,c=r.aTypedArrayConstructor;(0,r.exportTypedArrayMethod)("map",(function(e){return o(a(this),e,arguments.length>1?arguments[1]:undefined,(function(e,t){return new(c(i(e,e.constructor)))(t)}))}))},function(e,t,n){"use strict";var r=n(13),o=n(134),i=r.aTypedArrayConstructor;(0,r.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(i(this))(t);t>e;)n[e]=arguments[e++];return n}),o)},function(e,t,n){"use strict";var r=n(13),o=n(86).left,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("reduce",(function(e){return o(i(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(86).right,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("reduceRight",(function(e){return o(i(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=r.aTypedArray,i=r.exportTypedArrayMethod,a=Math.floor;i("reverse",(function(){for(var e,t=o(this).length,n=a(t/2),r=0;r1?arguments[1]:undefined,1),n=this.length,r=a(e),c=o(r.length),s=0;if(c+t>n)throw RangeError("Wrong length");for(;si;)l[i]=n[i++];return l}),i((function(){new Int8Array(1).slice()})))},function(e,t,n){"use strict";var r=n(13),o=n(21).some,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("some",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=r.aTypedArray,i=r.exportTypedArrayMethod,a=[].sort;i("sort",(function(e){return a.call(o(this),e)}))},function(e,t,n){"use strict";var r=n(13),o=n(12),i=n(47),a=n(45),c=r.aTypedArray;(0,r.exportTypedArrayMethod)("subarray",(function(e,t){var n=c(this),r=n.length,u=i(e,r);return new(a(n,n.constructor))(n.buffer,n.byteOffset+u*n.BYTES_PER_ELEMENT,o((t===undefined?r:i(t,r))-u))}))},function(e,t,n){"use strict";var r=n(7),o=n(13),i=n(5),a=r.Int8Array,c=o.aTypedArray,u=o.exportTypedArrayMethod,s=[].toLocaleString,l=[].slice,f=!!a&&i((function(){s.call(new a(1))}));u("toLocaleString",(function(){return s.apply(f?l.call(c(this)):c(this),arguments)}),i((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!i((function(){a.prototype.toLocaleString.call([1,2])})))},function(e,t,n){"use strict";var r=n(13).exportTypedArrayMethod,o=n(5),i=n(7).Uint8Array,a=i&&i.prototype||{},c=[].toString,u=[].join;o((function(){c.call({})}))&&(c=function(){return u.call(this)});var s=a.toString!=c;r("toString",c,s)},function(e,t,n){"use strict";var r,o=n(7),i=n(75),a=n(56),c=n(88),u=n(184),s=n(8),l=n(33).enforce,f=n(151),d=!o.ActiveXObject&&"ActiveXObject"in o,p=Object.isExtensible,h=function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}},g=e.exports=c("WeakMap",h,u);if(f&&d){r=u.getConstructor(h,"WeakMap",!0),a.REQUIRED=!0;var v=g.prototype,m=v["delete"],y=v.has,b=v.get,x=v.set;i(v,{"delete":function(e){if(s(e)&&!p(e)){var t=l(this);return t.frozen||(t.frozen=new r),m.call(this,e)||t.frozen["delete"](e)}return m.call(this,e)},has:function(e){if(s(e)&&!p(e)){var t=l(this);return t.frozen||(t.frozen=new r),y.call(this,e)||t.frozen.has(e)}return y.call(this,e)},get:function(e){if(s(e)&&!p(e)){var t=l(this);return t.frozen||(t.frozen=new r),y.call(this,e)?b.call(this,e):t.frozen.get(e)}return b.call(this,e)},set:function(e,t){if(s(e)&&!p(e)){var n=l(this);n.frozen||(n.frozen=new r),y.call(this,e)?x.call(this,e,t):n.frozen.set(e,t)}else x.call(this,e,t);return this}})}},function(e,t,n){"use strict";n(88)("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),n(184))},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(127);r({global:!0,bind:!0,enumerable:!0,forced:!o.setImmediate||!o.clearImmediate},{setImmediate:i.set,clearImmediate:i.clear})},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(178),a=n(37),c=o.process,u="process"==a(c);r({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=u&&c.domain;i(t?t.bind(e):e)}})},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(83),a=[].slice,c=function(e){return function(t,n){var r=arguments.length>2,o=r?a.call(arguments,2):undefined;return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,n)}};r({global:!0,bind:!0,forced:/MSIE .\./.test(i)},{setTimeout:c(o.setTimeout),setInterval:c(o.setInterval)})},function(e,t,n){"use strict";var r=function(e){var t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(C){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new E(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=x(a,n);if(c){if(c===l)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=s(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===l)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(C){return{type:"throw",arg:C}}}e.wrap=u;var l={};function f(){}function d(){}function p(){}var h={};h[o]=function(){return this};var g=Object.getPrototypeOf,v=g&&g(g(k([])));v&&v!==t&&n.call(v,o)&&(h=v);var m=p.prototype=f.prototype=Object.create(h);function y(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){var r;this._invoke=function(o,i){function a(){return new t((function(r,a){!function c(r,o,i,a){var u=s(e[r],e,o);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==typeof f&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){c("next",e,i,a)}),(function(e){c("throw",e,i,a)})):t.resolve(f).then((function(e){l.value=e,i(l)}),(function(e){return c("throw",e,i,a)}))}a(u.arg)}(o,i,r,a)}))}return r=r?r.then(a,a):a()}}function x(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator["return"]&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function k(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),_(n),l}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;_(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:k(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}(e.exports);try{regeneratorRuntime=r}catch(o){Function("r","regeneratorRuntime = r")(r)}},function(e,t,n){"use strict";!function(t,n){var r,o,i=t.html5||{},a=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,c=/^(?: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,u=0,s={};function l(){var e=h.elements;return"string"==typeof e?e.split(" "):e}function f(e){var t=s[e._html5shiv];return t||(t={},u++,e._html5shiv=u,s[u]=t),t}function d(e,t,r){return t||(t=n),o?t.createElement(e):(r||(r=f(t)),!(i=r.cache[e]?r.cache[e].cloneNode():c.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e)).canHaveChildren||a.test(e)||i.tagUrn?i:r.frag.appendChild(i));var i}function p(e){e||(e=n);var t=f(e);return!h.shivCSS||r||t.hasCSS||(t.hasCSS=!!function(e,t){var n=e.createElement("p"),r=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),o||function(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return h.shivMethods?d(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/[\w\-:]+/g,(function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'}))+");return n}")(h,t.frag)}(e,t),e}!function(){try{var e=n.createElement("a");e.innerHTML="",r="hidden"in e,o=1==e.childNodes.length||function(){n.createElement("a");var e=n.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(t){r=!0,o=!0}}();var h={elements:i.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3",shivCSS:!1!==i.shivCSS,supportsUnknownElements:o,shivMethods:!1!==i.shivMethods,type:"default",shivDocument:p,createElement:d,createDocumentFragment:function(e,t){if(e||(e=n),o)return e.createDocumentFragment();for(var r=(t=t||f(e)).frag.cloneNode(),i=0,a=l(),c=a.length;i3?c(a):null,b=String(a.key),x=String(a.char),w=a.location,_=a.keyCode||(a.keyCode=b)&&b.charCodeAt(0)||0,E=a.charCode||(a.charCode=x)&&x.charCodeAt(0)||0,k=a.bubbles,S=a.cancelable,C=a.repeat,N=a.locale,A=a.view||e;if(a.which||(a.which=a.keyCode),"initKeyEvent"in d)d.initKeyEvent(t,k,S,A,p,g,h,v,_,E);else if(0>>0),t=Element.prototype,n=t.querySelector,r=t.querySelectorAll;function o(t,n,r){t.setAttribute(e,null);var o=n.call(t,String(r).replace(/(^|,\s*)(:scope([ >]|$))/g,(function(t,n,r,o){return n+"["+e+"]"+(o||" ")})));return t.removeAttribute(e),o}t.querySelector=function(e){return o(this,n,e)},t.querySelectorAll=function(e){return o(this,r,e)}}()}}(window),function(e){var t=e.WeakMap||function(){var e,t=0,n=!1,r=!1;function o(t,o,i){r=i,n=!1,e=undefined,t.dispatchEvent(o)}function i(e){this.value=e}function c(){t++,this.__ce__=new a("@DOMMap:"+t+Math.random())}return i.prototype.handleEvent=function(t){n=!0,r?t.currentTarget.removeEventListener(t.type,this,!1):e=this.value},c.prototype={constructor:c,"delete":function(e){return o(e,this.__ce__,!0),n},get:function(t){o(t,this.__ce__,!1);var n=e;return e=undefined,n},has:function(e){return o(e,this.__ce__,!1),n},set:function(e,t){return o(e,this.__ce__,!0),e.addEventListener(this.__ce__.type,new i(t),!1),this}},c}();function n(){}function r(e,t,n){function o(e){o.once&&(e.currentTarget.removeEventListener(e.type,t,o),o.removed=!0),o.passive&&(e.preventDefault=r.preventDefault),"function"==typeof o.callback?o.callback.call(this,e):o.callback&&o.callback.handleEvent(e),o.passive&&delete e.preventDefault}return o.type=e,o.callback=t,o.capture=!!n.capture,o.passive=!!n.passive,o.once=!!n.once,o.removed=!1,o}n.prototype=(Object.create||Object)(null),r.preventDefault=function(){};var o,i,a=e.CustomEvent,c=e.dispatchEvent,u=e.addEventListener,s=e.removeEventListener,l=0,f=function(){l++},d=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},p=function(e){return"".concat(e.capture?"1":"0",e.passive?"1":"0",e.once?"1":"0")};try{u("_",f,{once:!0}),c(new a("_")),c(new a("_")),s("_",f,{once:!0})}catch(h){}1!==l&&(i=new t,o=function(e){if(e){var t=e.prototype;t.addEventListener=function(e){return function(t,o,a){if(a&&"boolean"!=typeof a){var c,u,s,l=i.get(this),f=p(a);l||i.set(this,l=new n),t in l||(l[t]={handler:[],wrap:[]}),u=l[t],(c=d.call(u.handler,o))<0?(c=u.handler.push(o)-1,u.wrap[c]=s=new n):s=u.wrap[c],f in s||(s[f]=r(t,o,a),e.call(this,t,s[f],s[f].capture))}else e.call(this,t,o,a)}}(t.addEventListener),t.removeEventListener=function(e){return function(t,n,r){if(r&&"boolean"!=typeof r){var o,a,c,u,s=i.get(this);if(s&&t in s&&(c=s[t],-1<(a=d.call(c.handler,n))&&(o=p(r))in(u=c.wrap[a]))){for(o in e.call(this,t,u[o],u[o].capture),delete u[o],u)return;c.handler.splice(a,1),c.wrap.splice(a,1),0===c.handler.length&&delete s[t]}}else e.call(this,t,n,r)}}(t.removeEventListener)}},e.EventTarget?o(EventTarget):(o(e.Text),o(e.Element||e.HTMLElement),o(e.HTMLDocument),o(e.Window||{prototype:e}),o(e.XMLHttpRequest)))}(window)},function(e,t,n){"use strict";!function(e){if("undefined"!=typeof e.setAttribute){var t=function(e){return e.replace(/-[a-z]/g,(function(e){return e[1].toUpperCase()}))};e.setProperty=function(e,n){var r=t(e);if(!n)return this.removeAttribute(r);var o=String(n);return this.setAttribute(r,o)},e.getPropertyValue=function(e){var n=t(e);return this.getAttribute(n)||null},e.removeProperty=function(e){var n=t(e),r=this.getAttribute(n);return this.removeAttribute(n),r}}}(CSSStyleDeclaration.prototype)},function(e,t,n){"use strict";window.Int32Array||(window.Int32Array=Array)},,function(e,t,n){"use strict";t.__esModule=!0,t._CI=Ae,t._HI=B,t._M=Te,t._MCCC=Le,t._ME=Ie,t._MFCC=Ve,t._MP=Ce,t._MR=ye,t.__render=Fe,t.createComponentVNode=function(e,t,n,r,o){var a=new T(1,null,null,e=function(e,t){if(12&e)return e;if(t.prototype&&t.prototype.render)return 4;if(t.render)return 32776;return 8}(e,t),r,function(e,t,n){var r=(32768&e?t.render:t).defaultProps;if(i(r))return n;if(i(n))return l(r,null);return N(n,r)}(e,t,n),function(e,t,n){if(4&e)return n;var r=(32768&e?t.render:t).defaultHooks;if(i(r))return n;if(i(n))return r;return N(n,r)}(e,t,o),t);k.createVNode&&k.createVNode(a);return a},t.createFragment=M,t.createPortal=function(e,t){var n=B(e);return O(1024,1024,null,n,0,null,n.key,t)},t.createRef=function(){return{current:null}},t.createRenderer=function(e){return function(t,n,r,o){e||(e=t),je(n,e,r,o)}},t.createTextVNode=I,t.createVNode=O,t.directClone=L,t.findDOMfromVNode=b,t.forwardRef=function(e){return{render:e}},t.getFlagsForElementVnode=function(e){switch(e){case"svg":return 32;case"input":return 64;case"select":return 256;case"textarea":return 128;case"$F":return 8192;default:return 1}},t.linkEvent=function(e,t){if(c(t))return{data:e,event:t};return null},t.normalizeProps=function(e){var t=e.props;if(t){var n=e.flags;481&n&&(void 0!==t.children&&i(e.children)&&P(e,t.children),void 0!==t.className&&(e.className=t.className||null,t.className=undefined)),void 0!==t.key&&(e.key=t.key,t.key=undefined),void 0!==t.ref&&(e.ref=8&n?l(e.ref,t.ref):t.ref,t.ref=undefined)}return e},t.render=je,t.rerender=He,t.version=t.options=t.Fragment=t.EMPTY_OBJ=t.Component=void 0;var r=Array.isArray;function o(e){var t=typeof e;return"string"===t||"number"===t}function i(e){return null==e}function a(e){return null===e||!1===e||!0===e||void 0===e}function c(e){return"function"==typeof e}function u(e){return"string"==typeof e}function s(e){return null===e}function l(e,t){var n={};if(e)for(var r in e)n[r]=e[r];if(t)for(var o in t)n[o]=t[o];return n}function f(e){return!s(e)&&"object"==typeof e}var d={};t.EMPTY_OBJ=d;function p(e){return e.substr(2).toLowerCase()}function h(e,t){e.appendChild(t)}function g(e,t,n){s(n)?h(e,t):e.insertBefore(t,n)}function v(e,t){e.removeChild(t)}function m(e){for(var t=0;t0,h=s(d),g=u(d)&&"$"===d[0];p||h||g?(n=n||t.slice(0,l),(p||g)&&(f=L(f)),(h||g)&&(f.key="$"+l),n.push(f)):n&&n.push(f),f.flags|=65536}}i=0===(n=n||t).length?1:8}else(n=t).flags|=65536,81920&t.flags&&(n=L(t)),i=2;return e.children=n,e.childFlags=i,e}function B(e){return a(e)||o(e)?I(e,null):r(e)?M(e,0,null):16384&e.flags?L(e):e}var D="http://www.w3.org/1999/xlink",F="http://www.w3.org/XML/1998/namespace",j={"xlink:actuate":D,"xlink:arcrole":D,"xlink:href":D,"xlink:role":D,"xlink:show":D,"xlink:title":D,"xlink:type":D,"xml:base":F,"xml:lang":F,"xml:space":F};function K(e){return{onClick:e,onDblClick:e,onFocusIn:e,onFocusOut:e,onKeyDown:e,onKeyPress:e,onKeyUp:e,onMouseDown:e,onMouseMove:e,onMouseUp:e,onTouchEnd:e,onTouchMove:e,onTouchStart:e}}var z=K(0),Y=K(null),U=K(!0);function $(e,t){var n=t.$EV;return n||(n=t.$EV=K(null)),n[e]||1==++z[e]&&(Y[e]=function(e){var t="onClick"===e||"onDblClick"===e?function(e){return function(t){0===t.button?W(t,!0,e,Z(t)):t.stopPropagation()}}(e):function(e){return function(t){W(t,!1,e,Z(t))}}(e);return document.addEventListener(p(e),t),t}(e)),n}function H(e,t){var n=t.$EV;n&&n[e]&&(0==--z[e]&&(document.removeEventListener(p(e),Y[e]),Y[e]=null),n[e]=null)}function W(e,t,n,r){var o=function(e){return c(e.composedPath)?e.composedPath()[0]:e.target}(e);do{if(t&&o.disabled)return;var i=o.$EV;if(i){var a=i[n];if(a&&(r.dom=o,a.event?a.event(a.data,e):a(e),e.cancelBubble))return}o=o.parentNode}while(!s(o))}function q(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function G(){return this.defaultPrevented}function X(){return this.cancelBubble}function Z(e){var t={dom:document};return e.isDefaultPrevented=G,e.isPropagationStopped=X,e.stopPropagation=q,Object.defineProperty(e,"currentTarget",{configurable:!0,get:function(){return t.dom}}),t}function Q(e,t,n){if(e[t]){var r=e[t];r.event?r.event(r.data,n):r(n)}else{var o=t.toLowerCase();e[o]&&e[o](n)}}function J(e,t){var n=function(n){var r=this.$V;if(r){var o=r.props||d,i=r.dom;if(u(e))Q(o,e,n);else for(var a=0;a-1&&t.options[a]&&(c=t.options[a].value),n&&i(c)&&(c=e.defaultValue),ae(r,c)}}var se,le,fe=J("onInput",pe),de=J("onChange");function pe(e,t,n){var r=e.value,o=t.value;if(i(r)){if(n){var a=e.defaultValue;i(a)||a===o||(t.defaultValue=a,t.value=a)}}else o!==r&&(t.defaultValue=r,t.value=r)}function he(e,t,n,r,o,i){64&e?ie(r,n):256&e?ue(r,n,o,t):128&e&&pe(r,n,o),i&&(n.$V=t)}function ge(e,t,n){64&e?function(e,t){te(t.type)?(ee(e,"change",re),ee(e,"click",oe)):ee(e,"input",ne)}(t,n):256&e?function(e){ee(e,"change",ce)}(t):128&e&&function(e,t){ee(e,"input",fe),t.onChange&&ee(e,"change",de)}(t,n)}function ve(e){return e.type&&te(e.type)?!i(e.checked):!i(e.value)}function me(e){e&&!A(e,null)&&e.current&&(e.current=null)}function ye(e,t,n){e&&(c(e)||void 0!==e.current)&&n.push((function(){A(e,t)||void 0===e.current||(e.current=t)}))}function be(e,t){xe(e),x(e,t)}function xe(e){var t,n=e.flags,r=e.children;if(481&n){t=e.ref;var o=e.props;me(t);var a=e.childFlags;if(!s(o))for(var u=Object.keys(o),l=0,f=u.length;l0;for(var c in a&&(i=ve(n))&&ge(t,r,n),n)Se(c,null,n[c],r,o,i,null);a&&he(t,e,r,n,!0,i)}function Ne(e,t,n){var r=B(e.render(t,e.state,n)),o=n;return c(e.getChildContext)&&(o=l(n,e.getChildContext())),e.$CX=o,r}function Ae(e,t,n,r,o,i){var a=new t(n,r),u=a.$N=Boolean(t.getDerivedStateFromProps||a.getSnapshotBeforeUpdate);if(a.$SVG=o,a.$L=i,e.children=a,a.$BS=!1,a.context=r,a.props===d&&(a.props=n),u)a.state=_(a,n,a.state);else if(c(a.componentWillMount)){a.$BR=!0,a.componentWillMount();var l=a.$PS;if(!s(l)){var f=a.state;if(s(f))a.state=l;else for(var p in l)f[p]=l[p];a.$PS=null}a.$BR=!1}return a.$LI=Ne(a,n,r),a}function Te(e,t,n,r,o,i){var a=e.flags|=16384;481&a?Ie(e,t,n,r,o,i):4&a?function(e,t,n,r,o,i){var a=Ae(e,e.type,e.props||d,n,r,i);Te(a.$LI,t,a.$CX,r,o,i),Le(e.ref,a,i)}(e,t,n,r,o,i):8&a?(!function(e,t,n,r,o,i){Te(e.children=B(function(e,t){return 32768&e.flags?e.type.render(e.props||d,e.ref,t):e.type(e.props||d,t)}(e,n)),t,n,r,o,i)}(e,t,n,r,o,i),Ve(e,i)):512&a||16&a?Oe(e,t,o):8192&a?function(e,t,n,r,o,i){var a=e.children,c=e.childFlags;12&c&&0===a.length&&(c=e.childFlags=2,a=e.children=V());2===c?Te(a,n,o,r,o,i):Me(a,n,t,r,o,i)}(e,n,t,r,o,i):1024&a&&function(e,t,n,r,o){Te(e.children,e.ref,t,!1,null,o);var i=V();Oe(i,n,r),e.dom=i.dom}(e,n,t,o,i)}function Oe(e,t,n){var r=e.dom=document.createTextNode(e.children);s(t)||g(t,r,n)}function Ie(e,t,n,r,o,a){var c=e.flags,u=e.props,l=e.className,f=e.children,d=e.childFlags,p=e.dom=function(e,t){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}(e.type,r=r||(32&c)>0);if(i(l)||""===l||(r?p.setAttribute("class",l):p.className=l),16===d)S(p,f);else if(1!==d){var h=r&&"foreignObject"!==e.type;2===d?(16384&f.flags&&(e.children=f=L(f)),Te(f,p,n,h,null,a)):8!==d&&4!==d||Me(f,p,n,h,null,a)}s(t)||g(t,p,o),s(u)||Ce(e,c,u,p,r),ye(e.ref,p,a)}function Me(e,t,n,r,o,i){for(var a=0;a0,s!==l){var h=s||d;if((c=l||d)!==d)for(var g in(f=(448&o)>0)&&(p=ve(c)),c){var v=h[g],m=c[g];v!==m&&Se(g,v,m,u,r,p,e)}if(h!==d)for(var y in h)i(c[y])&&!i(h[y])&&Se(y,h[y],null,u,r,p,e)}var b=t.children,x=t.className;e.className!==x&&(i(x)?u.removeAttribute("class"):r?u.setAttribute("class",x):u.className=x);4096&o?function(e,t){e.textContent!==t&&(e.textContent=t)}(u,b):Pe(e.childFlags,t.childFlags,e.children,b,u,n,r&&"foreignObject"!==t.type,null,e,a);f&&he(o,t,u,c,!1,p);var w=t.ref,_=e.ref;_!==w&&(me(_),ye(w,u,a))}(e,t,r,o,p,f):4&p?function(e,t,n,r,o,i,a){var u=t.children=e.children;if(s(u))return;u.$L=a;var f=t.props||d,p=t.ref,h=e.ref,g=u.state;if(!u.$N){if(c(u.componentWillReceiveProps)){if(u.$BR=!0,u.componentWillReceiveProps(f,r),u.$UN)return;u.$BR=!1}s(u.$PS)||(g=l(g,u.$PS),u.$PS=null)}Be(u,g,f,n,r,o,!1,i,a),h!==p&&(me(h),ye(p,u,a))}(e,t,n,r,o,u,f):8&p?function(e,t,n,r,o,a,u){var s=!0,l=t.props||d,f=t.ref,p=e.props,h=!i(f),g=e.children;h&&c(f.onComponentShouldUpdate)&&(s=f.onComponentShouldUpdate(p,l));if(!1!==s){h&&c(f.onComponentWillUpdate)&&f.onComponentWillUpdate(p,l);var v=t.type,m=B(32768&t.flags?v.render(l,f,r):v(l,r));Re(g,m,n,r,o,a,u),t.children=m,h&&c(f.onComponentDidUpdate)&&f.onComponentDidUpdate(p,l)}else t.children=g}(e,t,n,r,o,u,f):16&p?function(e,t){var n=t.children,r=t.dom=e.dom;n!==e.children&&(r.nodeValue=n)}(e,t):512&p?t.dom=e.dom:8192&p?function(e,t,n,r,o,i){var a=e.children,c=t.children,u=e.childFlags,s=t.childFlags,l=null;12&s&&0===c.length&&(s=t.childFlags=2,c=t.children=V());var f=0!=(2&s);if(12&u){var d=a.length;(8&u&&8&s||f||!f&&c.length>d)&&(l=b(a[d-1],!1).nextSibling)}Pe(u,s,a,c,n,r,o,l,e,i)}(e,t,n,r,o,f):function(e,t,n,r){var o=e.ref,i=t.ref,c=t.children;if(Pe(e.childFlags,t.childFlags,e.children,c,o,n,!1,null,e,r),t.dom=e.dom,o!==i&&!a(c)){var u=c.dom;v(o,u),h(i,u)}}(e,t,r,f)}function Pe(e,t,n,r,o,i,a,c,u,s){switch(e){case 2:switch(t){case 2:Re(n,r,o,i,a,c,s);break;case 1:be(n,o);break;case 16:xe(n),S(o,r);break;default:!function(e,t,n,r,o,i){xe(e),Me(t,n,r,o,b(e,!0),i),x(e,n)}(n,r,o,i,a,s)}break;case 1:switch(t){case 2:Te(r,o,i,a,c,s);break;case 1:break;case 16:S(o,r);break;default:Me(r,o,i,a,c,s)}break;case 16:switch(t){case 16:!function(e,t,n){e!==t&&(""!==e?n.firstChild.nodeValue=t:S(n,t))}(n,r,o);break;case 2:_e(o),Te(r,o,i,a,c,s);break;case 1:_e(o);break;default:_e(o),Me(r,o,i,a,c,s)}break;default:switch(t){case 16:we(n),S(o,r);break;case 2:Ee(o,u,n),Te(r,o,i,a,c,s);break;case 1:Ee(o,u,n);break;default:var l=0|n.length,f=0|r.length;0===l?f>0&&Me(r,o,i,a,c,s):0===f?Ee(o,u,n):8===t&&8===e?function(e,t,n,r,o,i,a,c,u,s){var l,f,d=i-1,p=a-1,h=0,g=e[h],v=t[h];e:{for(;g.key===v.key;){if(16384&v.flags&&(t[h]=v=L(v)),Re(g,v,n,r,o,c,s),e[h]=v,++h>d||h>p)break e;g=e[h],v=t[h]}for(g=e[d],v=t[p];g.key===v.key;){if(16384&v.flags&&(t[p]=v=L(v)),Re(g,v,n,r,o,c,s),e[d]=v,d--,p--,h>d||h>p)break e;g=e[d],v=t[p]}}if(h>d){if(h<=p)for(f=(l=p+1)p)for(;h<=d;)be(e[h++],n);else!function(e,t,n,r,o,i,a,c,u,s,l,f,d){var p,h,g,v=0,m=c,y=c,x=i-c+1,_=a-c+1,E=new Int32Array(_+1),k=x===r,S=!1,C=0,N=0;if(o<4||(x|_)<32)for(v=m;v<=i;++v)if(p=e[v],N<_){for(c=y;c<=a;c++)if(h=t[c],p.key===h.key){if(E[c-y]=v+1,k)for(k=!1;mc?S=!0:C=c,16384&h.flags&&(t[c]=h=L(h)),Re(p,h,u,n,s,l,d),++N;break}!k&&c>a&&be(p,u)}else k||be(p,u);else{var A={};for(v=y;v<=a;++v)A[t[v].key]=v;for(v=m;v<=i;++v)if(p=e[v],N<_)if(void 0!==(c=A[p.key])){if(k)for(k=!1;v>m;)be(e[m++],u);E[c-y]=v+1,C>c?S=!0:C=c,16384&(h=t[c]).flags&&(t[c]=h=L(h)),Re(p,h,u,n,s,l,d),++N}else k||be(p,u);else k||be(p,u)}if(k)Ee(u,f,e),Me(t,u,n,s,l,d);else if(S){var T=function(e){var t=0,n=0,r=0,o=0,i=0,a=0,c=0,u=e.length;u>De&&(De=u,se=new Int32Array(u),le=new Int32Array(u));for(;n>1]]0&&(le[n]=se[i-1]),se[i]=n)}i=o+1;var s=new Int32Array(i);a=se[i-1];for(;i-- >0;)s[i]=a,a=le[a],se[i]=0;return s}(E);for(c=T.length-1,v=_-1;v>=0;v--)0===E[v]?(16384&(h=t[C=v+y]).flags&&(t[C]=h=L(h)),Te(h,u,n,s,(g=C+1)=0;v--)0===E[v]&&(16384&(h=t[C=v+y]).flags&&(t[C]=h=L(h)),Te(h,u,n,s,(g=C+1)a?a:i,d=0;da)for(d=f;d1)for(var n=1;n=0||(o[n]=e[n]);return o}(e,["className"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["BlockQuote",t])},n)))}},function(e,t,n){"use strict";var r,o;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=r,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(r||(t.VNodeFlags=r={})),t.ChildFlags=o,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(o||(t.ChildFlags=o={}))},function(e,t,n){"use strict";t.__esModule=!0,t.ByondUi=void 0;var r=n(0),o=n(6),i=n(466),a=n(29),c=n(17);function u(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var s=(0,a.createLogger)("ByondUi"),l=[];window.addEventListener("beforeunload",(function(){for(var e=0;e=0||(o[n]=e[n]);return o}(t,["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"]),v=this.state.viewBox,m=function(e,t,n,r){if(0===e.length)return[];var i=(0,o.zipWith)(Math.min).apply(void 0,e),a=(0,o.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(i[0]=n[0],a[0]=n[1]),r!==undefined&&(i[1]=r[0],a[1]=r[1]),(0,o.map)((function(e){return(0,o.zipWith)((function(e,t,n,r){return(e-t)/(n-t)*r}))(e,i,a,t)}))(e)}(i,v,c,u);if(m.length>0){var y=m[0],b=m[m.length-1];m.push([v[0]+h,b[1]]),m.push([v[0]+h,-h]),m.push([-h,-h]),m.push([-h,y[1]])}var x=function(e){for(var t="",n=0;n=0||(o[n]=e[n]);return o}(t,["children","color","title","buttons"]);return(0,r.createComponentVNode)(2,o.Box,{mb:1,children:[(0,r.createVNode)(1,"div","Table",[(0,r.createVNode)(1,"div","Table__cell",(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Button,Object.assign({fluid:!0,color:u,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},f,{children:s}))),2),l&&(0,r.createVNode)(1,"div","Table__cell Table__cell--collapsing",l,0)],0),n&&(0,r.createComponentVNode)(2,o.Box,{mt:1,children:a})]})},a}(r.Component);t.Collapsible=a},function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var r=n(0),o=n(6),i=n(17);var a=function(e){var t=e.content,n=(e.children,e.className),a=e.color,c=e.backgroundColor,u=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["content","children","className","color","backgroundColor"]);return u.color=t?null:"transparent",u.backgroundColor=a||c,(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["ColorBox",n,(0,i.computeBoxClassName)(u)]),t||".",0,Object.assign({},(0,i.computeBoxProps)(u))))};t.ColorBox=a,a.defaultHooks=o.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var r=n(0),o=n(6),i=n(17),a=n(103);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){var t,n;function u(t){var n;return(n=e.call(this,t)||this).state={selected:t.selected,open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=u.prototype;return s.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},s.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},s.setSelected=function(e){this.setState({selected:e}),this.setOpen(!1),this.props.onSelected(e)},s.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){return(0,r.createComponentVNode)(2,i.Box,{className:"Dropdown__menuentry",onClick:function(){e.setSelected(t)},children:t},t)}));return n.length?n:"No Options Found"},s.render=function(){var e=this,t=this.props,n=t.color,u=void 0===n?"default":n,s=t.over,l=t.noscroll,f=t.nochevron,d=t.width,p=(t.onClick,t.selected,t.disabled),h=c(t,["color","over","noscroll","nochevron","width","onClick","selected","disabled"]),g=h.className,v=c(h,["className"]),m=s?!this.state.open:this.state.open,y=this.state.open?(0,r.createVNode)(1,"div",(0,o.classes)([l?"Dropdown__menu-noscroll":"Dropdown__menu",s&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:d}},null,(function(t){e.menuRef=t})):null;return(0,r.createVNode)(1,"div","Dropdown",[(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({width:d,className:(0,o.classes)(["Dropdown__control","Button","Button--color--"+u,p&&"Button--disabled",g])},v,{onClick:function(){p&&!e.state.open||e.setOpen(!e.state.open)},children:[(0,r.createVNode)(1,"span","Dropdown__selected-text",this.state.selected,0),!!f||(0,r.createVNode)(1,"span","Dropdown__arrow-button",(0,r.createComponentVNode)(2,a.Icon,{name:m?"chevron-up":"chevron-down"}),2)]}))),y],0)},u}(r.Component);t.Dropdown=u},function(e,t,n){"use strict";t.__esModule=!0,t.GridColumn=t.Grid=void 0;var r=n(0),o=n(196),i=n(6);function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var c=function(e){var t=e.children,n=a(e,["children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Table,Object.assign({},n,{children:(0,r.createComponentVNode)(2,o.Table.Row,{children:t})})))};t.Grid=c,c.defaultHooks=i.pureComponentHooks;var u=function(e){var t=e.size,n=void 0===t?1:t,i=e.style,c=a(e,["size","style"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Table.Cell,Object.assign({style:Object.assign({width:n+"%"},i)},c)))};t.GridColumn=u,c.defaultHooks=i.pureComponentHooks,c.Column=u},function(e,t,n){"use strict";t.__esModule=!0,t.Knob=void 0;var r=n(0),o=n(9),i=n(6),a=n(17),c=n(139),u=n(140);t.Knob=function(e){if(Byond.IS_LTE_IE8)return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,s=e.maxValue,l=e.minValue,f=e.onChange,d=e.onDrag,p=e.step,h=e.stepPixelSize,g=e.suppressFlicker,v=e.unit,m=e.value,y=e.className,b=e.style,x=e.fillValue,w=e.color,_=e.ranges,E=void 0===_?{}:_,k=e.size,S=void 0===k?1:k,C=e.bipolar,N=(e.children,function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","style","fillValue","color","ranges","size","bipolar","children"]));return(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[0,-1]},{animated:t,format:n,maxValue:s,minValue:l,onChange:f,onDrag:d,step:p,stepPixelSize:h,suppressFlicker:g,unit:v,value:m},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,u=e.displayElement,f=e.inputElement,d=e.handleDragStart,p=(0,o.scale)(null!=x?x:c,l,s),h=(0,o.scale)(c,l,s),g=w||(0,o.keyOfMatchingRange)(null!=x?x:n,E)||"default",v=270*(h-.5);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,i.classes)(["Knob","Knob--color--"+g,C&&"Knob--bipolar",y,(0,a.computeBoxClassName)(N)]),[(0,r.createVNode)(1,"div","Knob__circle",(0,r.createVNode)(1,"div","Knob__cursorBox",(0,r.createVNode)(1,"div","Knob__cursor"),2,{style:{transform:"rotate("+v+"deg)"}}),2),t&&(0,r.createVNode)(1,"div","Knob__popupValue",u,0),(0,r.createVNode)(32,"svg","Knob__ring Knob__ringTrackPivot",(0,r.createVNode)(32,"circle","Knob__ringTrack",null,1,{cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),(0,r.createVNode)(32,"svg","Knob__ring Knob__ringFillPivot",(0,r.createVNode)(32,"circle","Knob__ringFill",null,1,{style:{"stroke-dashoffset":((C?2.75:2)-1.5*p)*Math.PI*50},cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),f],0,Object.assign({},(0,a.computeBoxProps)(Object.assign({style:Object.assign({"font-size":S+"em"},b)},N)),{onMouseDown:d})))}})))}},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledControls=void 0;var r=n(0),o=n(195);function i(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var a=function(e){var t=e.children,n=i(e,["children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Flex,Object.assign({mx:-.5,align:"stretch",justify:"space-between"},n,{children:t})))};t.LabeledControls=a;a.Item=function(e){var t=e.label,n=e.children,a=i(e,["label","children"]);return(0,r.createComponentVNode)(2,o.Flex.Item,{mx:1,children:(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Flex,Object.assign({minWidth:"52px",height:"100%",direction:"column",align:"center",textAlign:"center",justify:"space-between"},a,{children:[(0,r.createComponentVNode)(2,o.Flex.Item),(0,r.createComponentVNode)(2,o.Flex.Item,{children:n}),(0,r.createComponentVNode)(2,o.Flex.Item,{color:"label",children:t})]})))})}},function(e,t,n){"use strict";t.__esModule=!0,t.Modal=void 0;var r=n(0),o=n(6),i=n(17),a=n(193);t.Modal=function(e){var t=e.className,n=e.children,c=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","children"]);return(0,r.createComponentVNode)(2,a.Dimmer,{children:(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Modal",t,(0,i.computeBoxClassName)(c)]),n,0,Object.assign({},(0,i.computeBoxProps)(c))))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var r=n(0),o=n(6),i=n(17);var a=function(e){var t=e.className,n=e.color,a=e.info,c=(e.warning,e.success),u=e.danger,s=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","color","info","warning","success","danger"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["NoticeBox",n&&"NoticeBox--color--"+n,a&&"NoticeBox--type--info",c&&"NoticeBox--type--success",u&&"NoticeBox--type--danger",t])},s)))};t.NoticeBox=a,a.defaultHooks=o.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBar=void 0;var r=n(0),o=n(9),i=n(6),a=n(17);var c=function(e){var t=e.className,n=e.value,c=e.minValue,u=void 0===c?0:c,s=e.maxValue,l=void 0===s?1:s,f=e.color,d=e.ranges,p=void 0===d?{}:d,h=e.children,g=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","value","minValue","maxValue","color","ranges","children"]),v=(0,o.scale)(n,u,l),m=h!==undefined,y=f||(0,o.keyOfMatchingRange)(n,p)||"default";return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,i.classes)(["ProgressBar","ProgressBar--color--"+y,t,(0,a.computeBoxClassName)(g)]),[(0,r.createVNode)(1,"div","ProgressBar__fill ProgressBar__fill--animated",null,1,{style:{width:100*(0,o.clamp01)(v)+"%"}}),(0,r.createVNode)(1,"div","ProgressBar__content",m?h:(0,o.toFixed)(100*v)+"%",0)],4,Object.assign({},(0,a.computeBoxProps)(g))))};t.ProgressBar=c,c.defaultHooks=i.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var r=n(0),o=n(6),i=n(57),a=n(17);var c=function(e){var t,n;function c(t){var n;return(n=e.call(this,t)||this).ref=(0,r.createRef)(),n.scrollable=t.scrollable,n}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=c.prototype;return u.componentDidMount=function(){this.scrollable&&(0,i.addScrollableNode)(this.ref.current)},u.componentWillUnmount=function(){this.scrollable&&(0,i.removeScrollableNode)(this.ref.current)},u.render=function(){var e=this.props,t=e.className,n=e.title,i=e.level,c=void 0===i?1:i,u=e.buttons,s=e.fill,l=e.fitted,f=e.scrollable,d=e.children,p=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","title","level","buttons","fill","fitted","scrollable","children"]),h=(0,o.canRender)(n)||(0,o.canRender)(u),g=(0,o.canRender)(d);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Section","Section--level--"+c,Byond.IS_LTE_IE8&&"Section--iefix",s&&"Section--fill",l&&"Section--fitted",f&&"Section--scrollable",t].concat((0,a.computeBoxClassName)(p))),[h&&(0,r.createVNode)(1,"div","Section__title",[(0,r.createVNode)(1,"span","Section__titleText",n,0),(0,r.createVNode)(1,"div","Section__buttons",u,0)],4),l&&d||g&&(0,r.createVNode)(1,"div","Section__content",d,0)],0,Object.assign({},(0,a.computeBoxProps)(p)),null,this.ref))},c}(r.Component);t.Section=c},function(e,t,n){"use strict";t.__esModule=!0,t.Slider=void 0;var r=n(0),o=n(9),i=n(6),a=n(17),c=n(139),u=n(140);t.Slider=function(e){if(Byond.IS_LTE_IE8)return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,s=e.maxValue,l=e.minValue,f=e.onChange,d=e.onDrag,p=e.step,h=e.stepPixelSize,g=e.suppressFlicker,v=e.unit,m=e.value,y=e.className,b=e.fillValue,x=e.color,w=e.ranges,_=void 0===w?{}:w,E=e.children,k=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","fillValue","color","ranges","children"]),S=E!==undefined;return(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[1,0]},{animated:t,format:n,maxValue:s,minValue:l,onChange:f,onDrag:d,step:p,stepPixelSize:h,suppressFlicker:g,unit:v,value:m},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,u=e.displayElement,f=e.inputElement,d=e.handleDragStart,p=b!==undefined&&null!==b,h=((0,o.scale)(n,l,s),(0,o.scale)(null!=b?b:c,l,s)),g=(0,o.scale)(c,l,s),v=x||(0,o.keyOfMatchingRange)(null!=b?b:n,_)||"default";return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,i.classes)(["Slider","ProgressBar","ProgressBar--color--"+v,y,(0,a.computeBoxClassName)(k)]),[(0,r.createVNode)(1,"div",(0,i.classes)(["ProgressBar__fill",p&&"ProgressBar__fill--animated"]),null,1,{style:{width:100*(0,o.clamp01)(h)+"%",opacity:.4}}),(0,r.createVNode)(1,"div","ProgressBar__fill",null,1,{style:{width:100*(0,o.clamp01)(Math.min(h,g))+"%"}}),(0,r.createVNode)(1,"div","Slider__cursorOffset",[(0,r.createVNode)(1,"div","Slider__cursor"),(0,r.createVNode)(1,"div","Slider__pointer"),t&&(0,r.createVNode)(1,"div","Slider__popupValue",u,0)],0,{style:{width:100*(0,o.clamp01)(g)+"%"}}),(0,r.createVNode)(1,"div","ProgressBar__content",S?E:u,0),f],0,Object.assign({},(0,a.computeBoxProps)(k),{onMouseDown:d})))}})))}},function(e,t,n){"use strict";t.__esModule=!0,t.TextArea=void 0;var r=n(0),o=n(6),i=n(17),a=n(197),c=n(78);function u(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var s=function(e){var t,n;function s(t,n){var o;(o=e.call(this,t,n)||this).textareaRef=(0,r.createRef)(),o.fillerRef=(0,r.createRef)(),o.state={editing:!1};var i=t.dontUseTabForIndent,u=void 0!==i&&i;return o.handleOnInput=function(e){var t=o.state.editing,n=o.props.onInput;t||o.setEditing(!0),n&&n(e,e.target.value)},o.handleOnChange=function(e){var t=o.state.editing,n=o.props.onChange;t&&o.setEditing(!1),n&&n(e,e.target.value)},o.handleKeyPress=function(e){var t=o.state.editing,n=o.props.onKeyPress;t||o.setEditing(!0),n&&n(e,e.target.value)},o.handleKeyDown=function(e){var t=o.state.editing,n=o.props.onKeyDown;if(e.keyCode===c.KEY_ESCAPE)return o.setEditing(!1),e.target.value=(0,a.toInputValue)(o.props.value),void e.target.blur();if((t||o.setEditing(!0),!u)&&9===(e.keyCode||e.which)){e.preventDefault();var r=e.target,i=r.value,s=r.selectionStart,l=r.selectionEnd;e.target.value=i.substring(0,s)+"\t"+i.substring(l),e.target.selectionEnd=s+1}n&&n(e,e.target.value)},o.handleFocus=function(e){o.state.editing||o.setEditing(!0)},o.handleBlur=function(e){var t=o.state.editing,n=o.props.onChange;t&&(o.setEditing(!1),n&&n(e,e.target.value))},o}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var l=s.prototype;return l.componentDidMount=function(){var e=this.props.value,t=this.textareaRef.current;t&&(t.value=(0,a.toInputValue)(e))},l.componentDidUpdate=function(e,t){var n=this.state.editing,r=e.value,o=this.props.value,i=this.textareaRef.current;i&&!n&&r!==o&&(i.value=(0,a.toInputValue)(o))},l.setEditing=function(e){this.setState({editing:e})},l.getValue=function(){return this.textareaRef.current&&this.textareaRef.current.value},l.render=function(){var e=this.props,t=(e.onChange,e.onKeyDown,e.onKeyPress,e.onInput,e.onFocus,e.onBlur,e.onEnter,e.value,e.placeholder),n=u(e,["onChange","onKeyDown","onKeyPress","onInput","onFocus","onBlur","onEnter","value","placeholder"]),a=n.className,c=n.fluid,s=u(n,["className","fluid"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["TextArea",c&&"TextArea--fluid",a])},s,{children:(0,r.createVNode)(128,"textarea","TextArea__textarea",null,1,{placeholder:t,onChange:this.handleOnChange,onKeyDown:this.handleKeyDown,onKeyPress:this.handleKeyPress,onInput:this.handleOnInput,onFocus:this.handleFocus,onBlur:this.handleBlur},null,this.textareaRef)})))},s}(r.Component);t.TextArea=s},function(e,t,n){"use strict";t.__esModule=!0,t.Tabs=void 0;var r=n(0),o=n(6),i=n(17),a=n(103);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){var t=e.className,n=e.vertical,a=e.fluid,u=e.children,s=c(e,["className","vertical","fluid","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",a&&"Tabs--fluid",t,(0,i.computeBoxClassName)(s)]),u,0,Object.assign({},(0,i.computeBoxProps)(s))))};t.Tabs=u;u.Tab=function(e){var t=e.className,n=e.selected,u=e.color,s=e.icon,l=e.leftSlot,f=e.rightSlot,d=e.children,p=c(e,["className","selected","color","icon","leftSlot","rightSlot","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Tab","Tabs__Tab","Tab--color--"+u,n&&"Tab--selected",t].concat((0,i.computeBoxClassName)(p))),[(0,o.canRender)(l)&&(0,r.createVNode)(1,"div","Tab__left",l,0)||!!s&&(0,r.createVNode)(1,"div","Tab__left",(0,r.createComponentVNode)(2,a.Icon,{name:s}),2),(0,r.createVNode)(1,"div","Tab__text",d,0),(0,o.canRender)(f)&&(0,r.createVNode)(1,"div","Tab__right",f,0)],0,Object.assign({},(0,i.computeBoxProps)(p))))}},function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=void 0;var r=n(9),o=n(0);var i=function(e){return"number"==typeof e&&Number.isFinite(e)&&!Number.isNaN(e)},a=function(e){var t,n;function o(t){var n;return(n=e.call(this,t)||this).timer=null,n.last_seen_value=undefined,n.state={value:0},i(t.value)&&(n.state.value=Number(t.value),n.last_seen_value=Number(t.value)),n}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=o.prototype;return a.componentDidUpdate=function(){var e=this;this.props.auto!==undefined&&(clearInterval(this.timer),this.timer=setInterval((function(){return e.tick()}),1e3))},a.tick=function(){var e=Number(this.state.value);this.props.value!==this.last_seen_value&&(this.last_seen_value=this.props.value,e=this.props.value);var t="up"===this.props.auto?10:-10,n=Math.max(0,e+t);this.setState({value:n})},a.componentDidMount=function(){var e=this;this.props.auto!==undefined&&(this.timer=setInterval((function(){return e.tick()}),1e3))},a.componentWillUnmount=function(){clearInterval(this.timer)},a.render=function(){var e=this.state.value;if(!i(e))return this.state.value||null;var t=(0,r.toFixed)(Math.floor(e/10%60)).padStart(2,"0"),n=(0,r.toFixed)(Math.floor(e/600%60)).padStart(2,"0");return(0,r.toFixed)(Math.floor(e/36e3%24)).padStart(2,"0")+":"+n+":"+t},o}(o.Component);t.TimeDisplay=a},function(e,t,n){"use strict";t.__esModule=!0,t.NtosWindow=void 0;var r=n(0),o=n(63),i=n(2),a=n(1),c=n(199),u=function(e,t){var n=e.title,u=e.width,s=void 0===u?575:u,l=e.height,f=void 0===l?700:l,d=e.resizable,p=e.theme,h=void 0===p?"ntos":p,g=e.children,v=(0,i.useBackend)(t),m=v.act,y=v.data,b=y.PC_device_theme,x=y.PC_batteryicon,w=y.PC_showbatteryicon,_=y.PC_batterypercent,E=y.PC_ntneticon,k=y.PC_apclinkicon,S=y.PC_stationtime,C=y.PC_programheaders,N=void 0===C?[]:C,A=y.PC_showexitprogram;return(0,r.createComponentVNode)(2,c.Window,{title:n,width:s,height:f,theme:h,resizable:d,children:(0,r.createVNode)(1,"div","NtosWindow",[(0,r.createVNode)(1,"div","NtosWindow__header NtosHeader",[(0,r.createVNode)(1,"div","NtosHeader__left",[(0,r.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:2,children:S}),(0,r.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,mr:2,opacity:.33,children:["ntos"===b&&"NtOS","syndicate"===b&&"Syndix"]})],4),(0,r.createVNode)(1,"div","NtosHeader__right",[N.map((function(e){return(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(e.icon)})},e.icon)})),(0,r.createComponentVNode)(2,a.Box,{inline:!0,children:E&&(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(E)})}),!!w&&x&&(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:[x&&(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(x)}),_&&_]}),k&&(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(k)})}),!!A&&(0,r.createComponentVNode)(2,a.Button,{width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-minimize-o",tooltip:"Minimize",tooltipPosition:"bottom",onClick:function(){return m("PC_minimize")}}),!!A&&(0,r.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-close-o",tooltip:"Close",tooltipPosition:"bottom-left",onClick:function(){return m("PC_exit")}}),!A&&(0,r.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"power-off",tooltip:"Power off",tooltipPosition:"bottom-left",onClick:function(){return m("PC_shutdown")}})],0)],4),g],0)})};t.NtosWindow=u;u.Content=function(e){return(0,r.createVNode)(1,"div","NtosWindow__content",(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.Window.Content,Object.assign({},e))),2)}},function(e,t,n){"use strict";t.__esModule=!0,t.Pane=void 0;var r=n(0),o=n(6),i=n(2),a=n(1),c=n(137),u=n(141);function s(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var l=function(e,t){var n=e.theme,l=e.children,f=e.className,d=s(e,["theme","children","className"]),p=(0,i.useBackend)(t).suspended,h=(0,c.useDebug)(t).debugLayout;return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.Layout,Object.assign({className:(0,o.classes)(["Window",f]),theme:n},d,{children:(0,r.createComponentVNode)(2,a.Box,{fillPositionedParent:!0,className:h&&"debug-layout",children:!p&&l})})))};t.Pane=l;l.Content=function(e){var t=e.className,n=e.fitted,i=e.children,a=s(e,["className","fitted","children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.Layout.Content,Object.assign({className:(0,o.classes)(["Window__content",t])},a,{children:n&&i||(0,r.createVNode)(1,"div","Window__contentPadding",i,0)})))}},function(e,t,n){"use strict";t.__esModule=!0,t.relayMiddleware=t.debugMiddleware=void 0;var r=n(78),o=n(57),i=n(135),a=n(200),c=["backend/update","chat/message"];t.debugMiddleware=function(e){return(0,i.acquireHotKey)(r.KEY_F11),(0,i.acquireHotKey)(r.KEY_F12),o.globalEvents.on("keydown",(function(t){t.code===r.KEY_F11&&e.dispatch((0,a.toggleDebugLayout)()),t.code===r.KEY_F12&&e.dispatch((0,a.toggleKitchenSink)()),t.ctrl&&t.alt&&t.code===r.KEY_BACKSPACE&&setTimeout((function(){throw new Error("OOPSIE WOOPSIE!! UwU We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!")}))})),function(e){return function(t){return e(t)}}};t.relayMiddleware=function(e){var t=n(100),u="?external"===location.search;return u?t.subscribe((function(t){var n=t.type,r=t.payload;"relay"===n&&r.windowId===window.__windowId__&&e.dispatch(Object.assign({},r.action,{relayed:!0}))})):((0,i.acquireHotKey)(r.KEY_F10),o.globalEvents.on("keydown",(function(t){t===r.KEY_F10&&e.dispatch((0,a.openExternalBrowser)())}))),function(e){return function(n){var r=n.type,o=(n.payload,n.relayed);if(r!==a.openExternalBrowser.type)return!c.includes(r)||o||u||t.sendMessage({type:"relay",payload:{windowId:window.__windowId__,action:n}}),e(n);window.open(location.href+"?external","_blank")}}}},function(e,t,n){"use strict";t.__esModule=!0,t.debugReducer=void 0;t.debugReducer=function(e,t){void 0===e&&(e={});var n=t.type;t.payload;return"debug/toggleKitchenSink"===n?Object.assign({},e,{kitchenSink:!e.kitchenSink}):"debug/toggleDebugLayout"===n?Object.assign({},e,{debugLayout:!e.debugLayout}):e}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";e.exports=function(){var e=Object.hasOwnProperty,t=Object.setPrototypeOf,n=Object.isFrozen,r=Object.freeze,o=Object.seal,i=Object.create,a="undefined"!=typeof Reflect&&Reflect,c=a.apply,u=a.construct;c||(c=function(e,t,n){return e.apply(t,n)}),r||(r=function(e){return e}),o||(o=function(e){return e}),u||(u=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?n-1:0),o=1;o/gm),V=o(/^data-[\-\w.\u00B7-\uFFFF]/),R=o(/^aria-[\-\w]+$/),P=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),B=o(/^(?:\w+script|data):/i),D=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function j(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&arguments[0]!==undefined?arguments[0]:K(),t=function(e){return Y(e)};if(t.version="2.2.2",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,o=e.document,i=e.DocumentFragment,a=e.HTMLTemplateElement,c=e.Node,u=e.NodeFilter,s=e.NamedNodeMap,x=s===undefined?e.NamedNodeMap||e.MozNamedAttrMap:s,U=e.Text,$=e.Comment,H=e.DOMParser,W=e.trustedTypes;if("function"==typeof a){var q=o.createElement("template");q.content&&q.content.ownerDocument&&(o=q.content.ownerDocument)}var G=z(W,n),X=G&&Ae?G.createHTML(""):"",Z=o,Q=Z.implementation,J=Z.createNodeIterator,ee=Z.getElementsByTagName,te=Z.createDocumentFragment,ne=n.importNode,re={};try{re=_(o).documentMode?o.documentMode:{}}catch(Qe){}var oe={};t.isSupported=Q&&"undefined"!=typeof Q.createHTMLDocument&&9!==re;var ie=M,ae=L,ce=V,ue=R,se=B,le=D,fe=P,de=null,pe=w({},[].concat(j(E),j(k),j(S),j(C),j(N))),he=null,ge=w({},[].concat(j(A),j(T),j(O),j(I))),ve=null,me=null,ye=!0,be=!0,xe=!1,we=!1,_e=!1,Ee=!1,ke=!1,Se=!1,Ce=!1,Ne=!0,Ae=!1,Te=!0,Oe=!0,Ie=!1,Me={},Le=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ve=null,Re=w({},["audio","video","img","source","image","track"]),Pe=null,Be=w({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),De=null,Fe=o.createElement("form"),je=function(e){De&&De===e||(e&&"object"===(void 0===e?"undefined":F(e))||(e={}),e=_(e),de="ALLOWED_TAGS"in e?w({},e.ALLOWED_TAGS):pe,he="ALLOWED_ATTR"in e?w({},e.ALLOWED_ATTR):ge,Pe="ADD_URI_SAFE_ATTR"in e?w(_(Be),e.ADD_URI_SAFE_ATTR):Be,Ve="ADD_DATA_URI_TAGS"in e?w(_(Re),e.ADD_DATA_URI_TAGS):Re,ve="FORBID_TAGS"in e?w({},e.FORBID_TAGS):{},me="FORBID_ATTR"in e?w({},e.FORBID_ATTR):{},Me="USE_PROFILES"in e&&e.USE_PROFILES,ye=!1!==e.ALLOW_ARIA_ATTR,be=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,we=e.SAFE_FOR_TEMPLATES||!1,_e=e.WHOLE_DOCUMENT||!1,Se=e.RETURN_DOM||!1,Ce=e.RETURN_DOM_FRAGMENT||!1,Ne=!1!==e.RETURN_DOM_IMPORT,Ae=e.RETURN_TRUSTED_TYPE||!1,ke=e.FORCE_BODY||!1,Te=!1!==e.SANITIZE_DOM,Oe=!1!==e.KEEP_CONTENT,Ie=e.IN_PLACE||!1,fe=e.ALLOWED_URI_REGEXP||fe,we&&(be=!1),Ce&&(Se=!0),Me&&(de=w({},[].concat(j(N))),he=[],!0===Me.html&&(w(de,E),w(he,A)),!0===Me.svg&&(w(de,k),w(he,T),w(he,I)),!0===Me.svgFilters&&(w(de,S),w(he,T),w(he,I)),!0===Me.mathMl&&(w(de,C),w(he,O),w(he,I))),e.ADD_TAGS&&(de===pe&&(de=_(de)),w(de,e.ADD_TAGS)),e.ADD_ATTR&&(he===ge&&(he=_(he)),w(he,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&w(Pe,e.ADD_URI_SAFE_ATTR),Oe&&(de["#text"]=!0),_e&&w(de,["html","head","body"]),de.table&&(w(de,["tbody"]),delete ve.tbody),r&&r(e),De=e)},Ke=function(e){d(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(Qe){e.outerHTML=X}},ze=function(e,n){try{d(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(Qe){d(t.removed,{attribute:null,from:n})}n.removeAttribute(e)},Ye=function(e){var t=void 0,n=void 0;if(ke)e=""+e;else{var r=h(e,/^[\r\n\t ]+/);n=r&&r[0]}var i=G?G.createHTML(e):e;try{t=(new H).parseFromString(i,"text/html")}catch(Qe){}if(!t||!t.documentElement){var a=(t=Q.createHTMLDocument("")).body;a.parentNode.removeChild(a.parentNode.firstElementChild),a.outerHTML=i}return e&&n&&t.body.insertBefore(o.createTextNode(n),t.body.childNodes[0]||null),ee.call(t,_e?"html":"body")[0]},Ue=function(e){return J.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,(function(){return u.FILTER_ACCEPT}),!1)},$e=function(e){return!(e instanceof U||e instanceof $||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof x&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI)},He=function(e){return"object"===(void 0===c?"undefined":F(c))?e instanceof c:e&&"object"===(void 0===e?"undefined":F(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},We=function(e,n,r){oe[e]&&l(oe[e],(function(e){e.call(t,n,r,De)}))},qe=function(e){var n=void 0;if(We("beforeSanitizeElements",e,null),$e(e))return Ke(e),!0;if(h(e.nodeName,/[\u0080-\uFFFF]/))return Ke(e),!0;var r=p(e.nodeName);if(We("uponSanitizeElement",e,{tagName:r,allowedTags:de}),("svg"===r||"math"===r)&&0!==e.querySelectorAll("p, br, form, table").length)return Ke(e),!0;if(!He(e.firstElementChild)&&(!He(e.content)||!He(e.content.firstElementChild))&&y(/<[!/\w]/g,e.innerHTML)&&y(/<[!/\w]/g,e.textContent))return Ke(e),!0;if(!de[r]||ve[r]){if(Oe&&!Le[r]&&"function"==typeof e.insertAdjacentHTML)try{var o=e.innerHTML;e.insertAdjacentHTML("AfterEnd",G?G.createHTML(o):o)}catch(Qe){}return Ke(e),!0}return"noscript"!==r&&"noembed"!==r||!y(/<\/no(script|embed)/i,e.innerHTML)?(we&&3===e.nodeType&&(n=e.textContent,n=g(n,ie," "),n=g(n,ae," "),e.textContent!==n&&(d(t.removed,{element:e.cloneNode()}),e.textContent=n)),We("afterSanitizeElements",e,null),!1):(Ke(e),!0)},Ge=function(e,t,n){if(Te&&("id"===t||"name"===t)&&(n in o||n in Fe))return!1;if(be&&y(ce,t));else if(ye&&y(ue,t));else{if(!he[t]||me[t])return!1;if(Pe[t]);else if(y(fe,g(n,le,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==v(n,"data:")||!Ve[e])if(xe&&!y(se,g(n,le,"")));else if(n)return!1}return!0},Xe=function(e){var n=void 0,r=void 0,o=void 0,i=void 0;We("beforeSanitizeAttributes",e,null);var a=e.attributes;if(a){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:he};for(i=a.length;i--;){var u=n=a[i],s=u.name,l=u.namespaceURI;if(r=m(n.value),o=p(s),c.attrName=o,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=undefined,We("uponSanitizeAttribute",e,c),r=c.attrValue,!c.forceKeepAttr&&(ze(s,e),c.keepAttr))if(y(/\/>/i,r))ze(s,e);else{we&&(r=g(r,ie," "),r=g(r,ae," "));var d=e.nodeName.toLowerCase();if(Ge(d,o,r))try{l?e.setAttributeNS(l,s,r):e.setAttribute(s,r),f(t.removed)}catch(Qe){}}}We("afterSanitizeAttributes",e,null)}},Ze=function Je(e){var t=void 0,n=Ue(e);for(We("beforeSanitizeShadowDOM",e,null);t=n.nextNode();)We("uponSanitizeShadowNode",t,null),qe(t)||(t.content instanceof i&&Je(t.content),Xe(t));We("afterSanitizeShadowDOM",e,null)};return t.sanitize=function(r,o){var a=void 0,u=void 0,s=void 0,l=void 0,f=void 0;if(r||(r="\x3c!--\x3e"),"string"!=typeof r&&!He(r)){if("function"!=typeof r.toString)throw b("toString is not a function");if("string"!=typeof(r=r.toString()))throw b("dirty is not a string, aborting")}if(!t.isSupported){if("object"===F(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof r)return e.toStaticHTML(r);if(He(r))return e.toStaticHTML(r.outerHTML)}return r}if(Ee||je(o),t.removed=[],"string"==typeof r&&(Ie=!1),Ie);else if(r instanceof c)1===(u=(a=Ye("\x3c!----\x3e")).ownerDocument.importNode(r,!0)).nodeType&&"BODY"===u.nodeName||"HTML"===u.nodeName?a=u:a.appendChild(u);else{if(!Se&&!we&&!_e&&-1===r.indexOf("<"))return G&&Ae?G.createHTML(r):r;if(!(a=Ye(r)))return Se?null:X}a&&ke&&Ke(a.firstChild);for(var d=Ue(Ie?r:a);s=d.nextNode();)3===s.nodeType&&s===l||qe(s)||(s.content instanceof i&&Ze(s.content),Xe(s),l=s);if(l=null,Ie)return r;if(Se){if(Ce)for(f=te.call(a.ownerDocument);a.firstChild;)f.appendChild(a.firstChild);else f=a;return Ne&&(f=ne.call(n,f,!0)),f}var p=_e?a.outerHTML:a.innerHTML;return we&&(p=g(p,ie," "),p=g(p,ae," ")),G&&Ae?G.createHTML(p):p},t.setConfig=function(e){je(e),Ee=!0},t.clearConfig=function(){De=null,Ee=!1},t.isValidAttribute=function(e,t,n){De||je({});var r=p(e),o=p(t);return Ge(r,o,n)},t.addHook=function(e,t){"function"==typeof t&&(oe[e]=oe[e]||[],d(oe[e],t))},t.removeHook=function(e){oe[e]&&f(oe[e])},t.removeHooks=function(e){oe[e]&&(oe[e]=[])},t.removeAllHooks=function(){oe={}},t}()}()},function(e,t,n){"use strict";e.exports=function(){function e(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=e[Symbol.iterator]()).next.bind(r)}var r=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}})),o=(r.defaults,r.getDefaults,r.changeDefaults,/[&<>"']/),i=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,c=/[<>"']|&(?!#?\w+;)/g,u={"&":"&","<":"<",">":">",'"':""","'":"'"},s=function(e){return u[e]},l=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function f(e){return e.replace(l,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var d=/(^|[^\[])\^/g,p=/[^\w:]/g,h=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i,g={},v=/^[^:]+:\/*[^/]*$/,m=/^([^:]+:)[\s\S]*$/,y=/^([^:]+:\/*[^/]*)[\s\S]*$/;function b(e,t){g[" "+e]||(v.test(e)?g[" "+e]=e+"/":g[" "+e]=x(e,"/",!0));var n=-1===(e=g[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(m,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(y,"$1")+t:e+t}function x(e,t,n){var r=e.length;if(0===r)return"";for(var o=0;o=0&&"\\"===n[o];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length1?{type:"space",raw:t[0]}:{raw:"\n"}},t.code=function(e,t){var n=this.rules.block.code.exec(e);if(n){var r=t[t.length-1];if(r&&"paragraph"===r.type)return{raw:n[0],text:n[0].trimRight()};var o=n[0].replace(/^ {4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?o:E(o,"\n")}}},t.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],r=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var r=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=r.length?e.slice(r.length):e})).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:r}}},t.heading=function(e){var t=this.rules.block.heading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[1].length,text:t[2]}},t.nptable=function(e){var t=this.rules.block.nptable.exec(e);if(t){var n={type:"table",header:k(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(n.header.length===n.align.length){var r,o=n.align.length;for(r=0;r ?/gm,"");return{type:"blockquote",raw:t[0],text:n}}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){for(var n,r,o,i,a,c,u,s=t[0],l=t[2],f=l.length>1,d=")"===l[l.length-1],p={type:"list",raw:s,ordered:f,start:f?+l.slice(0,-1):"",loose:!1,items:[]},h=t[0].match(this.rules.block.item),g=!1,v=h.length,m=0;m1||this.options.smartLists&&o!==l)&&(i=h.slice(m+1).join("\n"),p.raw=p.raw.substring(0,p.raw.length-i.length),m=v-1)),a=g||/\n\n(?!\s*$)/.test(n),m!==v-1&&(g="\n"===n.charAt(n.length-1),a||(a=g)),a&&(p.loose=!0),c=/^\[[ xX]\] /.test(n),u=undefined,c&&(u=" "!==n[1],n=n.replace(/^\[[ xX]\] +/,"")),p.items.push({type:"list_item",raw:s,task:c,checked:u,loose:a,text:n});return p}},t.html=function(e){var t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):S(t[0]):t[0]}},t.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}},t.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:k(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var r,o=n.align.length;for(r=0;r/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):S(r[0]):r[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=C(t[2],"()");if(n>-1){var r=(0===t[0].indexOf("!")?5:4)+t[1].length+n;t[2]=t[2].substring(0,n),t[0]=t[0].substring(0,r).trim(),t[3]=""}var o=t[2],i="";if(this.options.pedantic){var a=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(o);a?(o=a[1],i=a[3]):i=""}else i=t[3]?t[3].slice(1,-1):"";return N(t,{href:(o=o.trim().replace(/^<([\s\S]*)>$/,"$1"))?o.replace(this.rules.inline._escapes,"$1"):o,title:i?i.replace(this.rules.inline._escapes,"$1"):i},t[0])}},t.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var r=(n[2]||n[1]).replace(/\s+/g," ");if(!(r=t[r.toLowerCase()])||!r.href){var o=n[0].charAt(0);return{type:"text",raw:o,text:o}}return N(n,r,n[0])}},t.strong=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.strong.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var o,i="**"===r[0]?this.rules.inline.strong.endAst:this.rules.inline.strong.endUnd;for(i.lastIndex=0;null!=(r=i.exec(t));)if(o=this.rules.inline.strong.middle.exec(t.slice(0,r.index+3)))return{type:"strong",raw:e.slice(0,o[0].length),text:e.slice(2,o[0].length-2)}}},t.em=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.em.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var o,i="*"===r[0]?this.rules.inline.em.endAst:this.rules.inline.em.endUnd;for(i.lastIndex=0;null!=(r=i.exec(t));)if(o=this.rules.inline.em.middle.exec(t.slice(0,r.index+2)))return{type:"em",raw:e.slice(0,o[0].length),text:e.slice(1,o[0].length-1)}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),r=/[^ ]/.test(n),o=n.startsWith(" ")&&n.endsWith(" ");return r&&o&&(n=n.substring(1,n.length-1)),n=S(n,!0),{type:"codespan",raw:t[0],text:n}}},t.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},t.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[1]}},t.autolink=function(e,t){var n,r,o=this.rules.inline.autolink.exec(e);if(o)return r="@"===o[2]?"mailto:"+(n=S(this.options.mangle?t(o[1]):o[1])):n=S(o[1]),{type:"link",raw:o[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}},t.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var r,o;if("@"===n[2])o="mailto:"+(r=S(this.options.mangle?t(n[0]):n[0]));else{var i;do{i=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(i!==n[0]);r=S(n[0]),o="www."===n[1]?"http://"+r:r}return{type:"link",raw:n[0],text:r,href:o,tokens:[{type:"text",raw:r,text:r}]}}},t.inlineText=function(e,t,n){var r,o=this.rules.inline.text.exec(e);if(o)return r=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):S(o[0]):o[0]:S(this.options.smartypants?n(o[0]):o[0]),{type:"text",raw:o[0],text:r}},e}(),T=w.noopTest,O=w.edit,I=w.merge,M={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:T,table:T,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};M.def=O(M.def).replace("label",M._label).replace("title",M._title).getRegex(),M.bullet=/(?:[*+-]|\d{1,9}[.)])/,M.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,M.item=O(M.item,"gm").replace(/bull/g,M.bullet).getRegex(),M.list=O(M.list).replace(/bull/g,M.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+M.def.source+")").getRegex(),M._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",M._comment=//,M.html=O(M.html,"i").replace("comment",M._comment).replace("tag",M._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),M.paragraph=O(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.blockquote=O(M.blockquote).replace("paragraph",M.paragraph).getRegex(),M.normal=I({},M),M.gfm=I({},M.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n *([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n *\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),M.gfm.nptable=O(M.gfm.nptable).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.gfm.table=O(M.gfm.table).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.pedantic=I({},M.normal,{html:O("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",M._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:T,paragraph:O(M.normal._paragraph).replace("hr",M.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",M.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var L={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:T,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",strong:{start:/^(?:(\*\*(?=[*punctuation]))|\*\*)(?![\s])|__/,middle:/^\*\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*\*$|^__(?![\s])((?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?)__$/,endAst:/[^punctuation\s]\*\*(?!\*)|[punctuation]\*\*(?!\*)(?:(?=[punctuation\s]|$))/,endUnd:/[^\s]__(?!_)(?:(?=[punctuation\s])|$)/},em:{start:/^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,middle:/^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,endAst:/[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation\s]|$))/,endUnd:/[^\s]_(?!_)(?:(?=[punctuation\s])|$)/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:T,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};L.punctuation=O(L.punctuation).replace(/punctuation/g,L._punctuation).getRegex(),L._blockSkip="\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>",L._overlapSkip="__[^_]*?__|\\*\\*\\[^\\*\\]*?\\*\\*",L.em.start=O(L.em.start).replace(/punctuation/g,L._punctuation).getRegex(),L.em.middle=O(L.em.middle).replace(/punctuation/g,L._punctuation).replace(/overlapSkip/g,L._overlapSkip).getRegex(),L.em.endAst=O(L.em.endAst,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.em.endUnd=O(L.em.endUnd,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.strong.start=O(L.strong.start).replace(/punctuation/g,L._punctuation).getRegex(),L.strong.middle=O(L.strong.middle).replace(/punctuation/g,L._punctuation).replace(/blockSkip/g,L._blockSkip).getRegex(),L.strong.endAst=O(L.strong.endAst,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.strong.endUnd=O(L.strong.endUnd,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.blockSkip=O(L._blockSkip,"g").getRegex(),L.overlapSkip=O(L._overlapSkip,"g").getRegex(),L._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,L._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,L._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,L.autolink=O(L.autolink).replace("scheme",L._scheme).replace("email",L._email).getRegex(),L._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,L.tag=O(L.tag).replace("comment",M._comment).replace("attribute",L._attribute).getRegex(),L._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,L._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,L._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,L.link=O(L.link).replace("label",L._label).replace("href",L._href).replace("title",L._title).getRegex(),L.reflink=O(L.reflink).replace("label",L._label).getRegex(),L.reflinkSearch=O(L.reflinkSearch,"g").replace("reflink",L.reflink).replace("nolink",L.nolink).getRegex(),L.normal=I({},L),L.pedantic=I({},L.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:O(/^!?\[(label)\]\((.*?)\)/).replace("label",L._label).getRegex(),reflink:O(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",L._label).getRegex()}),L.gfm=I({},L.normal,{escape:O(L.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var j=function(){function t(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||R,this.options.tokenizer=this.options.tokenizer||new A,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var t={block:P.normal,inline:B.normal};this.options.pedantic?(t.block=P.pedantic,t.inline=B.pedantic):this.options.gfm&&(t.block=P.gfm,this.options.breaks?t.inline=B.breaks:t.inline=B.gfm),this.tokenizer.rules=t}t.lex=function(e,n){return new t(n).lex(e)};var n,r,o,i=t.prototype;return i.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens},i.blockTokens=function(e,t,n){var r,o,i,a;for(void 0===t&&(t=[]),void 0===n&&(n=!0),e=e.replace(/^ +$/gm,"");e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e,t))e=e.substring(r.raw.length),r.type?t.push(r):((a=t[t.length-1]).raw+="\n"+r.raw,a.text+="\n"+r.text);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(c));)u.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;e;)if(i=this.tokenizer.escape(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.tag(e,n,r))e=e.substring(i.raw.length),n=i.inLink,r=i.inRawBlock,t.push(i);else if(i=this.tokenizer.link(e))e=e.substring(i.raw.length),"link"===i.type&&(i.tokens=this.inlineTokens(i.text,[],!0,r)),t.push(i);else if(i=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(i.raw.length),"link"===i.type&&(i.tokens=this.inlineTokens(i.text,[],!0,r)),t.push(i);else if(i=this.tokenizer.strong(e,c,o))e=e.substring(i.raw.length),i.tokens=this.inlineTokens(i.text,[],n,r),t.push(i);else if(i=this.tokenizer.em(e,c,o))e=e.substring(i.raw.length),i.tokens=this.inlineTokens(i.text,[],n,r),t.push(i);else if(i=this.tokenizer.codespan(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.br(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.del(e))e=e.substring(i.raw.length),i.tokens=this.inlineTokens(i.text,[],n,r),t.push(i);else if(i=this.tokenizer.autolink(e,F))e=e.substring(i.raw.length),t.push(i);else if(n||!(i=this.tokenizer.url(e,F))){if(i=this.tokenizer.inlineText(e,r,D))e=e.substring(i.raw.length),o=i.raw.slice(-1),t.push(i);else if(e){var s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(s)}}else e=e.substring(i.raw.length),t.push(i);return t},n=t,o=[{key:"rules",get:function(){return{block:P,inline:B}}}],(r=null)&&e(n.prototype,r),o&&e(n,o),t}(),K=r.defaults,z=w.cleanUrl,Y=w.escape,U=function(){function e(e){this.options=e||K}var t=e.prototype;return t.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var o=this.options.highlight(e,r);null!=o&&o!==e&&(n=!0,e=o)}return r?'
'+(n?e:Y(e,!0))+"
\n":"
"+(n?e:Y(e,!0))+"
\n"},t.blockquote=function(e){return"
\n"+e+"
\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
\n":"
\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},t.listitem=function(e){return"
  • "+e+"
  • \n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return"

    "+e+"

    \n"},t.table=function(e,t){return t&&(t="
    \n\n"+e+"\n"+t+"
    \n"},t.tablerow=function(e){return"\n"+e+"\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+""},t.br=function(){return this.options.xhtml?"
    ":"
    "},t.del=function(e){return""+e+""},t.link=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='"},t.image=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"},t.text=function(e){return e},e}(),$=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),H=function(){function e(){this.seen={}}return e.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do{this.seen[n]++,t=n+"-"+this.seen[n]}while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},e}(),W=r.defaults,q=w.unescape,G=function(){function e(e){this.options=e||W,this.options.renderer=this.options.renderer||new U,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new $,this.slugger=new H}e.parse=function(t,n){return new e(n).parse(t)};var t=e.prototype;return t.parse=function(e,t){void 0===t&&(t=!0);var n,r,o,i,a,c,u,s,l,f,d,p,h,g,v,m,y,b,x="",w=e.length;for(n=0;n0&&"text"===v.tokens[0].type?(v.tokens[0].text=b+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=b+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:b}):g+=b),g+=this.parse(v.tokens,h),l+=this.renderer.listitem(g,y,m);x+=this.renderer.list(l,d,p);continue;case"html":x+=this.renderer.html(f.text);continue;case"paragraph":x+=this.renderer.paragraph(this.parseInline(f.tokens));continue;case"text":for(l=f.tokens?this.parseInline(f.tokens):f.text;n+1An error occurred:

    "+Q(u.message+"",!0)+"
    ";throw u}}return ne.options=ne.setOptions=function(e){return X(ne.defaults,e),ee(ne.defaults),ne},ne.getDefaults=J,ne.defaults=te,ne.use=function(e){var t=X({},e);if(e.renderer&&function(){var n=ne.defaults.renderer||new U,r=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,i=new Array(o),a=0;a=0||(o[n]=e[n]);return o}(t,["payload"]),o=Object.assign({tgui:1,window_id:window.__windowId__},r);null!==n&&n!==undefined&&(o.payload=JSON.stringify(n)),Byond.topic(o)};t.sendMessage=p;var h=function(e,t){void 0===t&&(t={}),"object"!=typeof t||null===t||Array.isArray(t)?u.error("Payload for act() must be an object, got this:",t):p({type:"act/"+e,payload:t})};t.sendAct=h;var g=function(e){return e.backend||{}};t.selectBackend=g;t.useBackend=function(e){var t=e.store,n=g(t.getState());return Object.assign({},n,{act:h})};t.useLocalState=function(e,t,n){var r,o=e.store,i=null!=(r=g(o.getState()).shared)?r:{},a=t in i?i[t]:n;return[a,function(e){o.dispatch(l(t,"function"==typeof e?e(a):e))}]};t.useSharedState=function(e,t,n){var r,o=e.store,i=null!=(r=g(o.getState()).shared)?r:{},a=t in i?i[t]:n;return[a,function(e){p({type:"setSharedState",key:t,value:JSON.stringify("function"==typeof e?e(a):e)||""})}]}}).call(this,n(101).setImmediate)},function(e,t,n){"use strict";t.__esModule=!0,t.Window=t.Pane=t.NtosWindow=t.Layout=void 0;var r=n(141);t.Layout=r.Layout;var o=n(482);t.NtosWindow=o.NtosWindow;var i=n(483);t.Pane=i.Pane;var a=n(199);t.Window=a.Window},function(e,t,n){"use strict";var r=n(7),o=n(23).f,i=n(32),a=n(25),c=n(109),u=n(152),s=n(70);e.exports=function(e,t){var n,l,f,d,p,h=e.target,g=e.global,v=e.stat;if(n=g?r:v?r[h]||c(h,{}):(r[h]||{}).prototype)for(l in t){if(d=t[l],f=e.noTargetGet?(p=o(n,l))&&p.value:n[l],!s(g?l:h+(v?".":"#")+l,e.forced)&&f!==undefined){if(typeof d==typeof f)continue;u(d,f)}(e.sham||f&&f.sham)&&i(d,"sham",!0),a(n,l,d,e)}}},function(e,t,n){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){"use strict";t.__esModule=!0,t.canRender=t.pureComponentHooks=t.shallowDiffers=t.normalizeChildren=t.classes=void 0;t.classes=function(e){for(var t="",n=0;nn?n:e};t.clamp01=function(e){return e<0?0:e>1?1:e};t.scale=function(e,t,n){return(e-t)/(n-t)};t.round=function(e,t){return!e||isNaN(e)?e:(t|=0,i=(e*=n=Math.pow(10,t))>0|-(e<0),o=Math.abs(e%1)>=.4999999999854481,r=Math.floor(e),o&&(e=r+(i>0)),(o?e:Math.round(e))/n);var n,r,o,i};t.toFixed=function(e,t){return void 0===t&&(t=0),Number(e).toFixed(Math.max(t,0))};var r=function(e,t){return t&&e>=t[0]&&e<=t[1]};t.inRange=r;t.keyOfMatchingRange=function(e,t){for(var n=0,o=Object.keys(t);n0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";var r,o=n(123),i=n(10),a=n(7),c=n(8),u=n(20),s=n(84),l=n(32),f=n(25),d=n(16).f,p=n(42),h=n(55),g=n(15),v=n(67),m=a.Int8Array,y=m&&m.prototype,b=a.Uint8ClampedArray,x=b&&b.prototype,w=m&&p(m),_=y&&p(y),E=Object.prototype,k=E.isPrototypeOf,S=g("toStringTag"),C=v("TYPED_ARRAY_TAG"),N=o&&!!h&&"Opera"!==s(a.opera),A=!1,T={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},O=function(e){var t=s(e);return"DataView"===t||u(T,t)},I=function(e){return c(e)&&u(T,s(e))};for(r in T)a[r]||(N=!1);if((!N||"function"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError("Incorrect invocation")},N))for(r in T)a[r]&&h(a[r],w);if((!N||!_||_===E)&&(_=w.prototype,N))for(r in T)a[r]&&h(a[r].prototype,_);if(N&&p(x)!==_&&h(x,_),i&&!u(_,S))for(r in A=!0,d(_,S,{get:function(){return c(this)?this[C]:undefined}}),T)a[r]&&l(a[r],C,r);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:N,TYPED_ARRAY_TAG:A&&C,aTypedArray:function(e){if(I(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(h){if(k.call(w,e))return e}else for(var t in T)if(u(T,r)){var n=a[t];if(n&&(e===n||k.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n){if(i){if(n)for(var r in T){var o=a[r];o&&u(o.prototype,e)&&delete o.prototype[e]}_[e]&&!n||f(_,e,n?t:N&&y[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var r,o;if(i){if(h){if(n)for(r in T)(o=a[r])&&u(o,e)&&delete o[e];if(w[e]&&!n)return;try{return f(w,e,n?t:N&&m[e]||t)}catch(c){}}for(r in T)!(o=a[r])||o[e]&&!n||f(o,e,t)}},isView:O,isTypedArray:I,TypedArray:w,TypedArrayPrototype:_}},function(e,t,n){"use strict";t.__esModule=!0,t.zipWith=t.zip=t.uniqBy=t.reduce=t.sortBy=t.map=t.filter=t.toKeyedArray=t.toArray=void 0;t.toArray=function(e){if(Array.isArray(e))return e;if("object"==typeof e){var t=Object.prototype.hasOwnProperty,n=[];for(var r in e)t.call(e,r)&&n.push(e[r]);return n}return[]};t.toKeyedArray=function(e,t){return void 0===t&&(t="key"),r((function(e,n){var r;return Object.assign(((r={})[t]=n,r),e)}))(e)};t.filter=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],r=0;rc)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&(t.style=u),t};t.computeBoxProps=v;var m=function(e){var t=e.textColor||e.color,n=e.backgroundColor;return(0,r.classes)([s(t)&&"color-"+t,s(n)&&"color-bg-"+n])};t.computeBoxClassName=m;var y=function(e){var t=e.as,n=void 0===t?"div":t,r=e.className,a=e.children,c=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["as","className","children"]);if("function"==typeof a)return a(v(e));var u="string"==typeof r?r+" "+m(c):m(c),s=v(c);return(0,o.createVNode)(i.VNodeFlags.HtmlElement,n,u,a,i.ChildFlags.UnknownChildren,s)};t.Box=y,y.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";var r=n(24);e.exports=function(e){return Object(r(e))}},function(e,t,n){"use strict";function r(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",apos:"'"};return e.replace(/
    /gi,"\n").replace(/<\/?[a-z0-9-_]+[^>]*>/gi,"").replace(/&(nbsp|amp|quot|lt|gt|apos);/g,(function(e,n){return t[n]})).replace(/&#?([0-9]+);/gi,(function(e,t){var n=parseInt(t,10);return String.fromCharCode(n)})).replace(/&#x?([0-9a-f]+);/gi,(function(e,t){var n=parseInt(t,16);return String.fromCharCode(n)}))};t.buildQueryString=function(e){return Object.keys(e).map((function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])})).join("&")}},function(e,t,n){"use strict";var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,n){"use strict";var r=n(53),o=n(66),i=n(18),a=n(12),c=n(72),u=[].push,s=function(e){var t=1==e,n=2==e,s=3==e,l=4==e,f=6==e,d=5==e||f;return function(p,h,g,v){for(var m,y,b=i(p),x=o(b),w=r(h,g,3),_=a(x.length),E=0,k=v||c,S=t?k(p,_):n?k(p,0):undefined;_>E;E++)if((d||E in x)&&(y=w(m=x[E],E,b),e))if(t)S[E]=y;else if(y)switch(e){case 3:return!0;case 5:return m;case 6:return E;case 2:u.call(S,m)}else if(l)return!1;return f?-1:s||l?l:S}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6)}},function(e,t,n){"use strict";t.__esModule=!0,t.useSelector=t.useDispatch=t.createAction=t.combineReducers=t.applyMiddleware=t.createStore=void 0;var r=n(30);function o(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?o-1:0),a=1;a1?t-1:0),r=1;r2?n-2:0),o=2;o=i){var a=[t].concat(r).map((function(e){return"string"==typeof e?e:e instanceof Error?e.stack||String(e):JSON.stringify(e)})).filter((function(e){return e})).join(" ")+"\nUser Agent: "+navigator.userAgent;Byond.topic({tgui:1,window_id:window.__windowId__,type:"log",ns:t,message:a})}},s=function(e){return{debug:function(){for(var t=arguments.length,n=new Array(t),o=0;o=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?o-1:0),c=1;c1?r-1:0),i=1;i"+a+""}},function(e,t,n){"use strict";var r=n(5);e.exports=function(e){return r((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},function(e,t,n){"use strict";t.__esModule=!0,t.getGasColor=t.getGasLabel=t.RADIO_CHANNELS=t.CSS_COLORS=t.COLORS=t.UI_CLOSE=t.UI_DISABLED=t.UI_UPDATE=t.UI_INTERACTIVE=void 0;t.UI_INTERACTIVE=2;t.UI_UPDATE=1;t.UI_DISABLED=0;t.UI_CLOSE=-1;t.COLORS={department:{captain:"#c06616",security:"#e74c3c",medbay:"#3498db",science:"#9b59b6",engineering:"#f1c40f",cargo:"#f39c12",centcom:"#00c100",other:"#c38312"},damageType:{oxy:"#3498db",toxin:"#2ecc71",burn:"#e67e22",brute:"#e74c3c"}};t.CSS_COLORS=["black","white","red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey","good","average","bad","label"];t.RADIO_CHANNELS=[{name:"Syndicate",freq:1213,color:"#a52a2a"},{name:"Red Team",freq:1215,color:"#ff4444"},{name:"Blue Team",freq:1217,color:"#3434fd"},{name:"CentCom",freq:1337,color:"#2681a5"},{name:"Supply",freq:1347,color:"#b88646"},{name:"Service",freq:1349,color:"#6ca729"},{name:"Science",freq:1351,color:"#c68cfa"},{name:"Command",freq:1353,color:"#5177ff"},{name:"Medical",freq:1355,color:"#57b8f0"},{name:"Engineering",freq:1357,color:"#f37746"},{name:"Security",freq:1359,color:"#dd3535"},{name:"AI Private",freq:1447,color:"#d65d95"},{name:"Common",freq:1459,color:"#1ecc43"}];var r=[{id:"o2",name:"Oxygen",label:"O\u2082",color:"blue"},{id:"n2",name:"Nitrogen",label:"N\u2082",color:"red"},{id:"co2",name:"Carbon Dioxide",label:"CO\u2082",color:"grey"},{id:"plasma",name:"Plasma",label:"Plasma",color:"pink"},{id:"water_vapor",name:"Water Vapor",label:"H\u2082O",color:"grey"},{id:"nob",name:"Hyper-noblium",label:"Hyper-nob",color:"teal"},{id:"n2o",name:"Nitrous Oxide",label:"N\u2082O",color:"red"},{id:"no2",name:"Nitryl",label:"NO\u2082",color:"brown"},{id:"tritium",name:"Tritium",label:"Tritium",color:"green"},{id:"bz",name:"BZ",label:"BZ",color:"purple"},{id:"stim",name:"Stimulum",label:"Stimulum",color:"purple"},{id:"pluox",name:"Pluoxium",label:"Pluoxium",color:"blue"},{id:"miasma",name:"Miasma",label:"Miasma",color:"olive"},{id:"hydrogen",name:"Hydrogen",label:"H\u2082",color:"white"}];t.getGasLabel=function(e,t){var n=String(e).toLowerCase(),o=r.find((function(e){return e.id===n||e.name.toLowerCase()===n}));return o&&o.label||t||e};t.getGasColor=function(e){var t=String(e).toLowerCase(),n=r.find((function(e){return e.id===t||e.name.toLowerCase()===t}));return n&&n.color}},function(e,t,n){"use strict";var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,n){"use strict";var r=Math.ceil,o=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?o:r)(e)}},function(e,t,n){"use strict";t.__esModule=!0,t.formatDb=t.formatMoney=t.formatPower=t.formatSiUnit=void 0;var r=n(9),o=["f","p","n","\u03bc","m"," ","k","M","G","T","P","E","Z","Y"],i=o.indexOf(" "),a=function(e,t,n){if(void 0===t&&(t=-i),void 0===n&&(n=""),"number"!=typeof e||!Number.isFinite(e))return e;var a=Math.floor(Math.log10(e)),c=Math.floor(Math.max(3*t,a)),u=Math.floor(a/3),s=Math.floor(c/3),l=(0,r.clamp)(i+s,0,o.length),f=o[l],d=e/Math.pow(1e3,s),p=u>t?2+3*s-c:0;return((0,r.toFixed)(d,p)+" "+f+n).trim()};t.formatSiUnit=a;t.formatPower=function(e,t){return void 0===t&&(t=0),a(e,t,"W")};t.formatMoney=function(e,t){if(void 0===t&&(t=0),!Number.isFinite(e))return e;var n=(0,r.round)(e,t);t>0&&(n=(0,r.toFixed)(e,t));var o=(n=String(n)).length,i=n.indexOf(".");-1===i&&(i=o);for(var a="",c=0;c0&&c=0?"+":t<0?"\u2013":"",o=Math.abs(t);return n+(o=o===Infinity?"Inf":(0,r.toFixed)(o,2))+" dB"}},function(e,t,n){"use strict";var r=n(8);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){"use strict";var r=n(153),o=n(7),i=function(e){return"function"==typeof e?e:undefined};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t,n){"use strict";var r=n(20),o=n(18),i=n(82),a=n(122),c=i("IE_PROTO"),u=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=o(e),r(e,c)?e[c]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?u:null}},function(e,t,n){"use strict";e.exports=!1},function(e,t,n){"use strict";var r=n(5);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},function(e,t,n){"use strict";var r=n(11),o=n(27),i=n(15)("species");e.exports=function(e,t){var n,a=r(e).constructor;return a===undefined||(n=r(a)[i])==undefined?t:o(n)}},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(10),a=n(134),c=n(13),u=n(87),s=n(60),l=n(51),f=n(32),d=n(12),p=n(168),h=n(182),g=n(40),v=n(20),m=n(84),y=n(8),b=n(48),x=n(55),w=n(52).f,_=n(183),E=n(21).forEach,k=n(59),S=n(16),C=n(23),N=n(33),A=n(89),T=N.get,O=N.set,I=S.f,M=C.f,L=Math.round,V=o.RangeError,R=u.ArrayBuffer,P=u.DataView,B=c.NATIVE_ARRAY_BUFFER_VIEWS,D=c.TYPED_ARRAY_TAG,F=c.TypedArray,j=c.TypedArrayPrototype,K=c.aTypedArrayConstructor,z=c.isTypedArray,Y=function(e,t){for(var n=0,r=t.length,o=new(K(e))(r);r>n;)o[n]=t[n++];return o},U=function(e,t){I(e,t,{get:function(){return T(this)[t]}})},$=function(e){var t;return e instanceof R||"ArrayBuffer"==(t=m(e))||"SharedArrayBuffer"==t},H=function(e,t){return z(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},W=function(e,t){return H(e,t=g(t,!0))?l(2,e[t]):M(e,t)},q=function(e,t,n){return!(H(e,t=g(t,!0))&&y(n)&&v(n,"value"))||v(n,"get")||v(n,"set")||n.configurable||v(n,"writable")&&!n.writable||v(n,"enumerable")&&!n.enumerable?I(e,t,n):(e[t]=n.value,e)};i?(B||(C.f=W,S.f=q,U(j,"buffer"),U(j,"byteOffset"),U(j,"byteLength"),U(j,"length")),r({target:"Object",stat:!0,forced:!B},{getOwnPropertyDescriptor:W,defineProperty:q}),e.exports=function(e,t,n){var i=e.match(/\d+$/)[0]/8,c=e+(n?"Clamped":"")+"Array",u="get"+e,l="set"+e,g=o[c],v=g,m=v&&v.prototype,S={},C=function(e,t){I(e,t,{get:function(){return function(e,t){var n=T(e);return n.view[u](t*i+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,r){var o=T(e);n&&(r=(r=L(r))<0?0:r>255?255:255&r),o.view[l](t*i+o.byteOffset,r,!0)}(this,t,e)},enumerable:!0})};B?a&&(v=t((function(e,t,n,r){return s(e,v,c),A(y(t)?$(t)?r!==undefined?new g(t,h(n,i),r):n!==undefined?new g(t,h(n,i)):new g(t):z(t)?Y(v,t):_.call(v,t):new g(p(t)),e,v)})),x&&x(v,F),E(w(g),(function(e){e in v||f(v,e,g[e])})),v.prototype=m):(v=t((function(e,t,n,r){s(e,v,c);var o,a,u,l=0,f=0;if(y(t)){if(!$(t))return z(t)?Y(v,t):_.call(v,t);o=t,f=h(n,i);var g=t.byteLength;if(r===undefined){if(g%i)throw V("Wrong length");if((a=g-f)<0)throw V("Wrong length")}else if((a=d(r)*i)+f>g)throw V("Wrong length");u=a/i}else u=p(t),o=new R(a=u*i);for(O(e,{buffer:o,byteOffset:f,byteLength:a,length:u,view:new P(o)});l"+e+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(o){}var e,t;h=r?function(e){e.write(p("")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=s("iframe")).style.display="none",u.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};c[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(d.prototype=o(e),n=new d,d.prototype=null,n[f]=e):n=h(),t===undefined?n:i(n,t)}},function(e,t,n){"use strict";var r=n(16).f,o=n(20),i=n(15)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){"use strict";var r=n(15),o=n(48),i=n(16),a=r("unscopables"),c=Array.prototype;c[a]==undefined&&i.f(c,a,{configurable:!0,value:o(null)}),e.exports=function(e){c[a][e]=!0}},function(e,t,n){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){"use strict";var r=n(154),o=n(113).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){"use strict";var r=n(27);e.exports=function(e,t,n){if(r(e),t===undefined)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){"use strict";var r=n(40),o=n(16),i=n(51);e.exports=function(e,t,n){var a=r(t);a in e?o.f(e,a,i(0,n)):e[a]=n}},function(e,t,n){"use strict";var r=n(11),o=n(166);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),t=n instanceof Array}catch(i){}return function(n,i){return r(n),o(i),t?e.call(n,i):n.__proto__=i,n}}():undefined)},function(e,t,n){"use strict";var r=n(68),o=n(8),i=n(20),a=n(16).f,c=n(67),u=n(76),s=c("meta"),l=0,f=Object.isExtensible||function(){return!0},d=function(e){a(e,s,{value:{objectID:"O"+ ++l,weakData:{}}})},p=e.exports={REQUIRED:!1,fastKey:function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!i(e,s)){if(!f(e))return"F";if(!t)return"E";d(e)}return e[s].objectID},getWeakData:function(e,t){if(!i(e,s)){if(!f(e))return!0;if(!t)return!1;d(e)}return e[s].weakData},onFreeze:function(e){return u&&p.REQUIRED&&f(e)&&!i(e,s)&&d(e),e}};r[s]=!0},function(e,t,n){"use strict";t.__esModule=!0,t.removeScrollableNode=t.addScrollableNode=t.canStealFocus=t.setupGlobalEvents=t.globalEvents=void 0;var r=n(185),o=n(78),i=(n(29),new r.EventEmitter);t.globalEvents=i;var a,c=!1;t.setupGlobalEvents=function(e){void 0===e&&(e={}),c=!!e.ignoreWindowFocus};var u=!0,s=function y(e,t){c?u=!0:(a&&(clearTimeout(a),a=null),t?a=setTimeout((function(){return y(e)})):u!==e&&(u=e,i.emit(e?"window-focus":"window-blur"),i.emit("window-focus-change",e)))},l=null,f=function(e){var t=String(e.tagName).toLowerCase();return"input"===t||"textarea"===t};t.canStealFocus=f;var d=function b(){l&&(l.removeEventListener("blur",b),l=null)},p=null,h=null,g=[];t.addScrollableNode=function(e){g.push(e)};t.removeScrollableNode=function(e){var t=g.indexOf(e);t>=0&&g.splice(t,1)};window.addEventListener("mousemove",(function(e){var t=e.target;t!==h&&(h=t,function(e){if(!l&&u)for(var t=document.body;e&&e!==t;){if(g.includes(e)){if(e.contains(p))return;return p=e,void e.focus()}e=e.parentNode}}(t))})),window.addEventListener("focusin",(function(e){if(h=null,p=e.target,s(!0),f(e.target))return t=e.target,d(),void(l=t).addEventListener("blur",d);var t})),window.addEventListener("focusout",(function(e){h=null,s(!1,!0)})),window.addEventListener("blur",(function(e){h=null,s(!1,!0)})),window.addEventListener("beforeunload",(function(e){s(!1)}));var v={},m=function(){function e(e,t,n){this.event=e,this.type=t,this.code=window.event?e.which:e.keyCode,this.ctrl=e.ctrlKey,this.shift=e.shiftKey,this.alt=e.altKey,this.repeat=!!n}var t=e.prototype;return t.hasModifierKeys=function(){return this.ctrl||this.alt||this.shift},t.isModifierKey=function(){return this.code===o.KEY_CTRL||this.code===o.KEY_SHIFT||this.code===o.KEY_ALT},t.isDown=function(){return"keydown"===this.type},t.isUp=function(){return"keyup"===this.type},t.toString=function(){return this._str||(this._str="",this.ctrl&&(this._str+="Ctrl+"),this.alt&&(this._str+="Alt+"),this.shift&&(this._str+="Shift+"),this.code>=48&&this.code<=90?this._str+=String.fromCharCode(this.code):this.code>=o.KEY_F1&&this.code<=o.KEY_F12?this._str+="F"+(this.code-111):this._str+="["+this.code+"]"),this._str},e}();document.addEventListener("keydown",(function(e){if(!f(e.target)){var t=e.keyCode,n=new m(e,"keydown",v[t]);i.emit("keydown",n),i.emit("key",n),v[t]=!0}})),document.addEventListener("keyup",(function(e){if(!f(e.target)){var t=e.keyCode,n=new m(e,"keyup");i.emit("keyup",n),i.emit("key",n),v[t]=!1}}))},function(e,t,n){"use strict";var r=n(37);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){"use strict";var r=n(41),o=n(16),i=n(15),a=n(10),c=i("species");e.exports=function(e){var t=r(e),n=o.f;a&&t&&!t[c]&&n(t,c,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},function(e,t,n){"use strict";var r=n(11),o=n(118),i=n(12),a=n(53),c=n(119),u=n(162),s=function(e,t){this.stopped=e,this.result=t};(e.exports=function(e,t,n,l,f){var d,p,h,g,v,m,y,b=a(t,n,l?2:1);if(f)d=e;else{if("function"!=typeof(p=c(e)))throw TypeError("Target is not iterable");if(o(p)){for(h=0,g=i(e.length);g>h;h++)if((v=l?b(r(y=e[h])[0],y[1]):b(e[h]))&&v instanceof s)return v;return new s(!1)}d=p.call(e)}for(m=d.next;!(y=m.call(d)).done;)if("object"==typeof(v=u(d,b,y.value,l))&&v&&v instanceof s)return v;return new s(!1)}).stop=function(e){return new s(!0,e)}},function(e,t,n){"use strict";var r=n(24),o="["+n(91)+"]",i=RegExp("^"+o+o+"*"),a=RegExp(o+o+"*$"),c=function(e){return function(t){var n=String(r(t));return 1&e&&(n=n.replace(i,"")),2&e&&(n=n.replace(a,"")),n}};e.exports={start:c(1),end:c(2),trim:c(3)}},function(e,t,n){"use strict";t.__esModule=!0,t.assetMiddleware=t.resolveAsset=void 0;var r=[/v4shim/i],o={};t.resolveAsset=function(e){return o[e]||e};t.assetMiddleware=function(e){return function(e){return function(t){var n=t.type,i=t.payload;if("asset/stylesheet"!==n)if("asset/mappings"!==n)e(t);else for(var a=function(){var e=u[c];if(r.some((function(t){return t.test(e)})))return"continue";var t=i[e],n=e.split(".").pop();o[e]=t,"css"===n&&Byond.loadCss(t),"js"===n&&Byond.loadJs(t)},c=0,u=Object.keys(i);cl;)if((c=u[l++])!=c)return!0}else for(;s>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},function(e,t,n){"use strict";var r=n(5),o=/#|\.prototype\./,i=function(e,t){var n=c[a(e)];return n==s||n!=u&&("function"==typeof t?r(t):!!t)},a=i.normalize=function(e){return String(e).replace(o,".").toLowerCase()},c=i.data={},u=i.NATIVE="N",s=i.POLYFILL="P";e.exports=i},function(e,t,n){"use strict";var r=n(154),o=n(113);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){"use strict";var r=n(8),o=n(58),i=n(15)("species");e.exports=function(e,t){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)?r(n)&&null===(n=n[i])&&(n=undefined):n=undefined),new(n===undefined?Array:n)(0===t?0:t)}},function(e,t,n){"use strict";var r=n(5),o=n(15),i=n(116),a=o("species");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var r=n(25);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){"use strict";var r=n(5);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(e,t,n){"use strict";var r=n(11);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){"use strict";t.__esModule=!0,t.KEY_QUOTE=t.KEY_RIGHT_BRACKET=t.KEY_BACKSLASH=t.KEY_LEFT_BRACKET=t.KEY_SLASH=t.KEY_PERIOD=t.KEY_MINUS=t.KEY_COMMA=t.KEY_EQUAL=t.KEY_SEMICOLON=t.KEY_F12=t.KEY_F11=t.KEY_F10=t.KEY_F9=t.KEY_F8=t.KEY_F7=t.KEY_F6=t.KEY_F5=t.KEY_F4=t.KEY_F3=t.KEY_F2=t.KEY_F1=t.KEY_Z=t.KEY_Y=t.KEY_X=t.KEY_W=t.KEY_V=t.KEY_U=t.KEY_T=t.KEY_S=t.KEY_R=t.KEY_Q=t.KEY_P=t.KEY_O=t.KEY_N=t.KEY_M=t.KEY_L=t.KEY_K=t.KEY_J=t.KEY_I=t.KEY_H=t.KEY_G=t.KEY_F=t.KEY_E=t.KEY_D=t.KEY_C=t.KEY_B=t.KEY_A=t.KEY_9=t.KEY_8=t.KEY_7=t.KEY_6=t.KEY_5=t.KEY_4=t.KEY_3=t.KEY_2=t.KEY_1=t.KEY_0=t.KEY_DELETE=t.KEY_INSERT=t.KEY_DOWN=t.KEY_RIGHT=t.KEY_UP=t.KEY_LEFT=t.KEY_HOME=t.KEY_END=t.KEY_PAGEDOWN=t.KEY_PAGEUP=t.KEY_SPACE=t.KEY_ESCAPE=t.KEY_CAPSLOCK=t.KEY_PAUSE=t.KEY_ALT=t.KEY_CTRL=t.KEY_SHIFT=t.KEY_ENTER=t.KEY_TAB=t.KEY_BACKSPACE=void 0;t.KEY_BACKSPACE=8;t.KEY_TAB=9;t.KEY_ENTER=13;t.KEY_SHIFT=16;t.KEY_CTRL=17;t.KEY_ALT=18;t.KEY_PAUSE=19;t.KEY_CAPSLOCK=20;t.KEY_ESCAPE=27;t.KEY_SPACE=32;t.KEY_PAGEUP=33;t.KEY_PAGEDOWN=34;t.KEY_END=35;t.KEY_HOME=36;t.KEY_LEFT=37;t.KEY_UP=38;t.KEY_RIGHT=39;t.KEY_DOWN=40;t.KEY_INSERT=45;t.KEY_DELETE=46;t.KEY_0=48;t.KEY_1=49;t.KEY_2=50;t.KEY_3=51;t.KEY_4=52;t.KEY_5=53;t.KEY_6=54;t.KEY_7=55;t.KEY_8=56;t.KEY_9=57;t.KEY_A=65;t.KEY_B=66;t.KEY_C=67;t.KEY_D=68;t.KEY_E=69;t.KEY_F=70;t.KEY_G=71;t.KEY_H=72;t.KEY_I=73;t.KEY_J=74;t.KEY_K=75;t.KEY_L=76;t.KEY_M=77;t.KEY_N=78;t.KEY_O=79;t.KEY_P=80;t.KEY_Q=81;t.KEY_R=82;t.KEY_S=83;t.KEY_T=84;t.KEY_U=85;t.KEY_V=86;t.KEY_W=87;t.KEY_X=88;t.KEY_Y=89;t.KEY_Z=90;t.KEY_F1=112;t.KEY_F2=113;t.KEY_F3=114;t.KEY_F4=115;t.KEY_F5=116;t.KEY_F6=117;t.KEY_F7=118;t.KEY_F8=119;t.KEY_F9=120;t.KEY_F10=121;t.KEY_F11=122;t.KEY_F12=123;t.KEY_SEMICOLON=186;t.KEY_EQUAL=187;t.KEY_COMMA=188;t.KEY_MINUS=189;t.KEY_PERIOD=190;t.KEY_SLASH=191;t.KEY_LEFT_BRACKET=219;t.KEY_BACKSLASH=220;t.KEY_RIGHT_BRACKET=221;t.KEY_QUOTE=222},function(e,t,n){"use strict";function r(e,t,n,r,o,i,a){try{var c=e[i](a),u=c.value}catch(s){return void n(s)}c.done?t(u):Promise.resolve(u).then(r,o)}function o(e){return function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function c(e){r(a,o,i,c,u,"next",e)}function u(e){r(a,o,i,c,u,"throw",e)}c(undefined)}))}}t.__esModule=!0,t.storage=t.IMPL_INDEXED_DB=t.IMPL_LOCAL_STORAGE=t.IMPL_MEMORY=void 0;t.IMPL_MEMORY=0;t.IMPL_LOCAL_STORAGE=1;t.IMPL_INDEXED_DB=2;var i=function(e){return function(){try{return Boolean(e())}catch(t){return!1}}},a=i((function(){return window.localStorage&&window.localStorage.getItem})),c=i((function(){return(window.indexedDB||window.msIndexedDB)&&(window.IDBTransaction||window.msIDBTransaction)})),u=function(){function e(){this.impl=0,this.store={}}var t=e.prototype;return t.get=function(e){return this.store[e]},t.set=function(e,t){this.store[e]=t},t.remove=function(e){this.store[e]=undefined},t.clear=function(){this.store={}},e}(),s=function(){function e(){this.impl=1}var t=e.prototype;return t.get=function(e){var t=localStorage.getItem(e);if("string"==typeof t)return JSON.parse(t)},t.set=function(e,t){localStorage.setItem(e,JSON.stringify(t))},t.remove=function(e){localStorage.removeItem(e)},t.clear=function(){localStorage.clear()},e}(),l=function(){function e(){this.impl=2,this.dbPromise=new Promise((function(e,t){var n=(window.indexedDB||window.msIndexedDB).open("tgui-citadel-main",1);n.onupgradeneeded=function(){try{n.result.createObjectStore("storage-v1")}catch(e){t(new Error("Failed to upgrade IDB: "+n.error))}},n.onsuccess=function(){return e(n.result)},n.onerror=function(){t(new Error("Failed to open IDB: "+n.error))}}))}var t=e.prototype;return t.getStore=function(e){return this.dbPromise.then((function(t){return t.transaction("storage-v1",e).objectStore("storage-v1")}))},t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore("readonly");case 2:return n=t.sent,t.abrupt("return",new Promise((function(t,r){var o=n.get(e);o.onsuccess=function(){return t(o.result)},o.onerror=function(){return r(o.error)}})));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return null===n&&(n=undefined),t.next=3,this.getStore("readwrite");case 3:t.sent.put(n,e);case 5:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.getStore("readwrite");case 2:t.sent["delete"](e);case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getStore("readwrite");case 2:e.sent.clear();case 4:case"end":return e.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),f=new(function(){function e(){this.backendPromise=o(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!c()){e.next=10;break}return e.prev=1,t=new l,e.next=5,t.dbPromise;case 5:return e.abrupt("return",t);case 8:e.prev=8,e.t0=e["catch"](1);case 10:if(!a()){e.next=12;break}return e.abrupt("return",new s);case 12:return e.abrupt("return",new u);case 13:case"end":return e.stop()}}),e,null,[[1,8]])})))()}var t=e.prototype;return t.get=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.get(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.set=function(){var e=o(regeneratorRuntime.mark((function t(e,n){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return r=t.sent,t.abrupt("return",r.set(e,n));case 4:case"end":return t.stop()}}),t,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.remove=function(){var e=o(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return n=t.sent,t.abrupt("return",n.remove(e));case 4:case"end":return t.stop()}}),t,this)})));return function(t){return e.apply(this,arguments)}}(),t.clear=function(){var e=o(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.backendPromise;case 2:return e=t.sent,t.abrupt("return",e.clear());case 4:case"end":return t.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}());t.storage=f},,function(e,t,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);t.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:r},function(e,t,n){"use strict";var r=n(111),o=n(67),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},function(e,t,n){"use strict";var r=n(41);e.exports=r("navigator","userAgent")||""},function(e,t,n){"use strict";var r=n(120),o=n(37),i=n(15)("toStringTag"),a="Arguments"==o(function(){return arguments}());e.exports=r?o:function(e){var t,n,r;return e===undefined?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),i))?n:a?o(t):"Object"==(r=o(t))&&"function"==typeof t.callee?"Arguments":r}},function(e,t,n){"use strict";var r=n(15)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},"return":function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(c){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(c){}return n}},function(e,t,n){"use strict";var r=n(27),o=n(18),i=n(66),a=n(12),c=function(e){return function(t,n,c,u){r(n);var s=o(t),l=i(s),f=a(s.length),d=e?f-1:0,p=e?-1:1;if(c<2)for(;;){if(d in l){u=l[d],d+=p;break}if(d+=p,e?d<0:f<=d)throw TypeError("Reduce of empty array with no initial value")}for(;e?d>=0:f>d;d+=p)d in l&&(u=n(u,l[d],d,s));return u}};e.exports={left:c(!1),right:c(!0)}},function(e,t,n){"use strict";var r=n(7),o=n(10),i=n(123),a=n(32),c=n(75),u=n(5),s=n(60),l=n(38),f=n(12),d=n(168),p=n(268),h=n(42),g=n(55),v=n(52).f,m=n(16).f,y=n(117),b=n(49),x=n(33),w=x.get,_=x.set,E=r.ArrayBuffer,k=E,S=r.DataView,C=S&&S.prototype,N=Object.prototype,A=r.RangeError,T=p.pack,O=p.unpack,I=function(e){return[255&e]},M=function(e){return[255&e,e>>8&255]},L=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},V=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},R=function(e){return T(e,23,4)},P=function(e){return T(e,52,8)},B=function(e,t){m(e.prototype,t,{get:function(){return w(this)[t]}})},D=function(e,t,n,r){var o=d(n),i=w(e);if(o+t>i.byteLength)throw A("Wrong index");var a=w(i.buffer).bytes,c=o+i.byteOffset,u=a.slice(c,c+t);return r?u:u.reverse()},F=function(e,t,n,r,o,i){var a=d(n),c=w(e);if(a+t>c.byteLength)throw A("Wrong index");for(var u=w(c.buffer).bytes,s=a+c.byteOffset,l=r(+o),f=0;fY;)(j=z[Y++])in k||a(k,j,E[j]);K.constructor=k}g&&h(C)!==N&&g(C,N);var U=new S(new k(2)),$=C.setInt8;U.setInt8(0,2147483648),U.setInt8(1,2147483649),!U.getInt8(0)&&U.getInt8(1)||c(C,{setInt8:function(e,t){$.call(this,e,t<<24>>24)},setUint8:function(e,t){$.call(this,e,t<<24>>24)}},{unsafe:!0})}else k=function(e){s(this,k,"ArrayBuffer");var t=d(e);_(this,{bytes:y.call(new Array(t),0),byteLength:t}),o||(this.byteLength=t)},S=function(e,t,n){s(this,S,"DataView"),s(e,k,"DataView");var r=w(e).byteLength,i=l(t);if(i<0||i>r)throw A("Wrong offset");if(i+(n=n===undefined?r-i:f(n))>r)throw A("Wrong length");_(this,{buffer:e,byteLength:n,byteOffset:i}),o||(this.buffer=e,this.byteLength=n,this.byteOffset=i)},o&&(B(k,"byteLength"),B(S,"buffer"),B(S,"byteLength"),B(S,"byteOffset")),c(S.prototype,{getInt8:function(e){return D(this,1,e)[0]<<24>>24},getUint8:function(e){return D(this,1,e)[0]},getInt16:function(e){var t=D(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=D(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return V(D(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return V(D(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return O(D(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return O(D(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){F(this,1,e,I,t)},setUint8:function(e,t){F(this,1,e,I,t)},setInt16:function(e,t){F(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){F(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){F(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){F(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){F(this,4,e,R,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){F(this,8,e,P,t,arguments.length>2?arguments[2]:undefined)}});b(k,"ArrayBuffer"),b(S,"DataView"),e.exports={ArrayBuffer:k,DataView:S}},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(70),a=n(25),c=n(56),u=n(61),s=n(60),l=n(8),f=n(5),d=n(85),p=n(49),h=n(89);e.exports=function(e,t,n){var g=-1!==e.indexOf("Map"),v=-1!==e.indexOf("Weak"),m=g?"set":"add",y=o[e],b=y&&y.prototype,x=y,w={},_=function(e){var t=b[e];a(b,e,"add"==e?function(e){return t.call(this,0===e?0:e),this}:"delete"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return v&&!l(e)?undefined:t.call(this,0===e?0:e)}:"has"==e?function(e){return!(v&&!l(e))&&t.call(this,0===e?0:e)}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(i(e,"function"!=typeof y||!(v||b.forEach&&!f((function(){(new y).entries().next()})))))x=n.getConstructor(t,e,g,m),c.REQUIRED=!0;else if(i(e,!0)){var E=new x,k=E[m](v?{}:-0,1)!=E,S=f((function(){E.has(1)})),C=d((function(e){new y(e)})),N=!v&&f((function(){for(var e=new y,t=5;t--;)e[m](t,t);return!e.has(-0)}));C||((x=t((function(t,n){s(t,x,e);var r=h(new y,t,x);return n!=undefined&&u(n,r[m],r,g),r}))).prototype=b,b.constructor=x),(S||N)&&(_("delete"),_("has"),g&&_("get")),(N||k)&&_(m),v&&b.clear&&delete b.clear}return w[e]=x,r({global:!0,forced:x!=y},w),p(x,e),v||n.setStrong(x,e,g),x}},function(e,t,n){"use strict";var r=n(8),o=n(55);e.exports=function(e,t,n){var i,a;return o&&"function"==typeof(i=t.constructor)&&i!==n&&r(a=i.prototype)&&a!==n.prototype&&o(e,a),e}},function(e,t,n){"use strict";var r=Math.expm1,o=Math.exp;e.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:o(e)-1}:r},function(e,t,n){"use strict";e.exports="\t\n\x0B\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},function(e,t,n){"use strict";var r=n(43),o=n(7),i=n(5);e.exports=r||!i((function(){var e=Math.random();__defineSetter__.call(null,e,(function(){})),delete o[e]}))},function(e,t,n){"use strict";var r=n(8),o=n(37),i=n(15)("match");e.exports=function(e){var t;return r(e)&&((t=e[i])!==undefined?!!t:"RegExp"==o(e))}},function(e,t,n){"use strict";var r=n(5);function o(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=r((function(){var e=o("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=r((function(){var e=o("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},function(e,t,n){"use strict";var r,o,i=n(77),a=n(94),c=RegExp.prototype.exec,u=String.prototype.replace,s=c,l=(r=/a/,o=/b*/g,c.call(r,"a"),c.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),f=a.UNSUPPORTED_Y||a.BROKEN_CARET,d=/()??/.exec("")[1]!==undefined;(l||d||f)&&(s=function(e){var t,n,r,o,a=this,s=f&&a.sticky,p=i.call(a),h=a.source,g=0,v=e;return s&&(-1===(p=p.replace("y","")).indexOf("g")&&(p+="g"),v=String(e).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==e[a.lastIndex-1])&&(h="(?: "+h+")",v=" "+v,g++),n=new RegExp("^(?:"+h+")",p)),d&&(n=new RegExp("^"+h+"$(?!\\s)",p)),l&&(t=a.lastIndex),r=c.call(s?n:a,v),s?r?(r.input=r.input.slice(g),r[0]=r[0].slice(g),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:l&&r&&(a.lastIndex=a.global?r.index+r[0].length:t),d&&r&&r.length>1&&u.call(r[0],n,(function(){for(o=1;o")})),l="$0"==="a".replace(/./,"$0"),f=i("replace"),d=!!/./[f]&&""===/./[f]("a","$0"),p=!o((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,f){var h=i(e),g=!o((function(){var t={};return t[h]=function(){return 7},7!=""[e](t)})),v=g&&!o((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[u]=function(){return n},n.flags="",n[h]=/./[h]),n.exec=function(){return t=!0,null},n[h](""),!t}));if(!g||!v||"replace"===e&&(!s||!l||d)||"split"===e&&!p){var m=/./[h],y=n(h,""[e],(function(e,t,n,r,o){return t.exec===a?g&&!o?{done:!0,value:m.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:l,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:d}),b=y[0],x=y[1];r(String.prototype,e,b),r(RegExp.prototype,h,2==t?function(e,t){return x.call(e,this,t)}:function(e){return x.call(e,this)})}f&&c(RegExp.prototype[h],"sham",!0)}},function(e,t,n){"use strict";var r=n(130).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},function(e,t,n){"use strict";var r=n(37),o=n(95);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(e))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(e,t)}},function(e,t,n){"use strict";var r;t.__esModule=!0,t.perf=void 0;null==(r=window.performance)||r.now;var o={mark:function(e,t){0},measure:function(e,t){}};t.perf=o},function(e,t,n){"use strict";t.__esModule=!0,t.setupHotReloading=t.sendLogEntry=t.sendMessage=t.subscribe=void 0;var r=[];t.subscribe=function(e){return r.push(e)};t.sendMessage=function(e){};t.sendLogEntry=function(e,t){};t.setupHotReloading=function(){0}},function(e,t,n){"use strict";(function(e){var r=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},t.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n(459),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||void 0,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||void 0}).call(this,n(107))},function(e,t,n){"use strict";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=void 0;var r=n(14),o=function(e,t){return e+t},i=function(e,t){return e-t},a=function(e,t){return e*t},c=function(e,t){return e/t};t.vecAdd=function(){for(var e=arguments.length,t=new Array(e),n=0;n=0||(o[n]=e[n]);return o}(e,["name","size","spin","className","style","rotation"]);n&&(l["font-size"]=100*n+"%"),"number"==typeof f&&(l.transform="rotate("+f+"deg)");var p=a.test(t),h=t.replace(a,"");return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({as:"i",className:(0,o.classes)([u,p?"far":"fas","fa-"+h,c&&"fa-spin"]),style:l},d)))};t.Icon=c,c.defaultHooks=o.pureComponentHooks},,,,function(e,t,n){"use strict";var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(o){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,n){"use strict";var r=n(7),o=n(8),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t,n){"use strict";var r=n(7),o=n(32);e.exports=function(e,t){try{o(r,e,t)}catch(n){r[e]=t}return t}},function(e,t,n){"use strict";var r=n(150),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return o.call(e)}),e.exports=r.inspectSource},function(e,t,n){"use strict";var r=n(43),o=n(150);(e.exports=function(e,t){return o[e]||(o[e]=t!==undefined?t:{})})("versions",[]).push({version:"3.6.5",mode:r?"pure":"global",copyright:"\xa9 2020 Denis Pushkarev (zloirock.ru)"})},function(e,t,n){"use strict";var r=n(41),o=n(52),i=n(114),a=n(11);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(a(e)),n=i.f;return n?t.concat(n(e)):t}},function(e,t,n){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){"use strict";t.f=Object.getOwnPropertySymbols},function(e,t,n){"use strict";var r=n(5);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},function(e,t,n){"use strict";var r,o,i=n(7),a=n(83),c=i.process,u=c&&c.versions,s=u&&u.v8;s?o=(r=s.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=r[1]),e.exports=o&&+o},function(e,t,n){"use strict";var r=n(18),o=n(47),i=n(12);e.exports=function(e){for(var t=r(this),n=i(t.length),a=arguments.length,c=o(a>1?arguments[1]:undefined,n),u=a>2?arguments[2]:undefined,s=u===undefined?n:o(u,n);s>c;)t[c++]=e;return t}},function(e,t,n){"use strict";var r=n(15),o=n(74),i=r("iterator"),a=Array.prototype;e.exports=function(e){return e!==undefined&&(o.Array===e||a[i]===e)}},function(e,t,n){"use strict";var r=n(84),o=n(74),i=n(15)("iterator");e.exports=function(e){if(e!=undefined)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){"use strict";var r={};r[n(15)("toStringTag")]="z",e.exports="[object z]"===String(r)},function(e,t,n){"use strict";var r=n(4),o=n(164),i=n(42),a=n(55),c=n(49),u=n(32),s=n(25),l=n(15),f=n(43),d=n(74),p=n(165),h=p.IteratorPrototype,g=p.BUGGY_SAFARI_ITERATORS,v=l("iterator"),m=function(){return this};e.exports=function(e,t,n,l,p,y,b){o(n,t,l);var x,w,_,E=function(e){if(e===p&&A)return A;if(!g&&e in C)return C[e];switch(e){case"keys":case"values":case"entries":return function(){return new n(this,e)}}return function(){return new n(this)}},k=t+" Iterator",S=!1,C=e.prototype,N=C[v]||C["@@iterator"]||p&&C[p],A=!g&&N||E(p),T="Array"==t&&C.entries||N;if(T&&(x=i(T.call(new e)),h!==Object.prototype&&x.next&&(f||i(x)===h||(a?a(x,h):"function"!=typeof x[v]&&u(x,v,m)),c(x,k,!0,!0),f&&(d[k]=m))),"values"==p&&N&&"values"!==N.name&&(S=!0,A=function(){return N.call(this)}),f&&!b||C[v]===A||u(C,v,A),d[t]=A,p)if(w={values:E("values"),keys:y?A:E("keys"),entries:E("entries")},b)for(_ in w)(g||S||!(_ in C))&&s(C,_,w[_]);else r({target:t,proto:!0,forced:g||S},w);return w}},function(e,t,n){"use strict";var r=n(5);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},function(e,t,n){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(e,t,n){"use strict";var r=n(12),o=n(125),i=n(24),a=Math.ceil,c=function(e){return function(t,n,c){var u,s,l=String(i(t)),f=l.length,d=c===undefined?" ":String(c),p=r(n);return p<=f||""==d?l:(u=p-f,(s=o.call(d,a(u/d.length))).length>u&&(s=s.slice(0,u)),e?l+s:s+l)}};e.exports={start:c(!1),end:c(!0)}},function(e,t,n){"use strict";var r=n(38),o=n(24);e.exports="".repeat||function(e){var t=String(o(this)),n="",i=r(e);if(i<0||i==Infinity)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n}},function(e,t,n){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(e,t,n){"use strict";var r,o,i,a=n(7),c=n(5),u=n(37),s=n(53),l=n(157),f=n(108),d=n(177),p=a.location,h=a.setImmediate,g=a.clearImmediate,v=a.process,m=a.MessageChannel,y=a.Dispatch,b=0,x={},w=function(e){if(x.hasOwnProperty(e)){var t=x[e];delete x[e],t()}},_=function(e){return function(){w(e)}},E=function(e){w(e.data)},k=function(e){a.postMessage(e+"",p.protocol+"//"+p.host)};h&&g||(h=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return x[++b]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},r(b),b},g=function(e){delete x[e]},"process"==u(v)?r=function(e){v.nextTick(_(e))}:y&&y.now?r=function(e){y.now(_(e))}:m&&!d?(i=(o=new m).port2,o.port1.onmessage=E,r=s(i.postMessage,i,1)):!a.addEventListener||"function"!=typeof postMessage||a.importScripts||c(k)||"file:"===p.protocol?r="onreadystatechange"in f("script")?function(e){l.appendChild(f("script")).onreadystatechange=function(){l.removeChild(this),w(e)}}:function(e){setTimeout(_(e),0)}:(r=k,a.addEventListener("message",E,!1))),e.exports={set:h,clear:g}},function(e,t,n){"use strict";var r=n(27),o=function(e){var t,n;this.promise=new e((function(e,r){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},function(e,t,n){"use strict";var r=n(4),o=n(95);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},function(e,t,n){"use strict";var r=n(38),o=n(24),i=function(e){return function(t,n){var i,a,c=String(o(t)),u=r(n),s=c.length;return u<0||u>=s?e?"":undefined:(i=c.charCodeAt(u))<55296||i>56319||u+1===s||(a=c.charCodeAt(u+1))<56320||a>57343?e?c.charAt(u):i:e?c.slice(u,u+2):a-56320+(i-55296<<10)+65536}};e.exports={codeAt:i(!1),charAt:i(!0)}},function(e,t,n){"use strict";var r=n(93);e.exports=function(e){if(r(e))throw TypeError("The method doesn't accept regular expressions");return e}},function(e,t,n){"use strict";var r=n(15)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(o){}}return!1}},function(e,t,n){"use strict";var r=n(5),o=n(91);e.exports=function(e){return r((function(){return!!o[e]()||"\u200b\x85\u180e"!="\u200b\x85\u180e"[e]()||o[e].name!==e}))}},function(e,t,n){"use strict";var r=n(7),o=n(5),i=n(85),a=n(13).NATIVE_ARRAY_BUFFER_VIEWS,c=r.ArrayBuffer,u=r.Int8Array;e.exports=!a||!o((function(){u(1)}))||!o((function(){new u(-1)}))||!i((function(e){new u,new u(null),new u(1.5),new u(e)}),!0)||o((function(){return 1!==new u(new c(2),1,undefined).length}))},function(e,t,n){"use strict";t.__esModule=!0,t.setupHotKeys=t.releaseHeldKeys=t.releaseHotKey=t.acquireHotKey=void 0;var r=n(78),o=n(57),i=(0,n(29).createLogger)("hotkeys"),a={},c=[r.KEY_ESCAPE,r.KEY_ENTER,r.KEY_SPACE,r.KEY_TAB,r.KEY_CTRL,r.KEY_SHIFT,r.KEY_F5],u={},s=function(e){if(!e.ctrl||e.code!==r.KEY_F5&&e.code!==r.KEY_R){if(!(e.ctrl&&e.code===r.KEY_F||e.event.defaultPrevented||e.isModifierKey()||c.includes(e.code))){var t,n=16===(t=e.code)?"Shift":17===t?"Ctrl":18===t?"Alt":33===t?"Northeast":34===t?"Southeast":35===t?"Southwest":36===t?"Northwest":37===t?"West":38===t?"North":39===t?"East":40===t?"South":45===t?"Insert":46===t?"Delete":t>=48&&t<=57||t>=65&&t<=90?String.fromCharCode(t):t>=96&&t<=105?"Numpad"+(t-96):t>=112&&t<=123?"F"+(t-111):188===t?",":189===t?"-":190===t?".":void 0;if(n){var o=a[n];if(o)return i.debug("macro",o),Byond.command(o);if(e.isDown()&&!u[n]){u[n]=!0;var s='KeyDown "'+n+'"';return i.debug(s),Byond.command(s)}if(e.isUp()&&u[n]){u[n]=!1;var l='KeyUp "'+n+'"';return i.debug(l),Byond.command(l)}}}}else location.reload()};t.acquireHotKey=function(e){c.push(e)};t.releaseHotKey=function(e){var t=c.indexOf(e);t>=0&&c.splice(t,1)};var l=function(){for(var e=0,t=Object.keys(u);e0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props,r=t.value,o=t.dragMatrix;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:c(e,o),value:r,internalValue:r}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,r=t.dragging,o=t.value,i=n.props.onDrag;r&&i&&i(e,o)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,r=t.minValue,i=t.maxValue,a=t.step,u=t.stepPixelSize,s=t.dragMatrix;n.setState((function(t){var n=Object.assign({},t),l=c(e,s)-n.origin;if(t.dragging){var f=Number.isFinite(r)?r%a:0;n.internalValue=(0,o.clamp)(n.internalValue+l*a/u,r-a,i+a),n.value=(0,o.clamp)(n.internalValue-n.internalValue%a+f,r,i),n.origin=c(e,s)}else Math.abs(l)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,r=t.onChange,o=t.onDrag,i=n.state,a=i.dragging,c=i.value,u=i.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!a,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),a)n.suppressFlicker(),r&&r(e,c),o&&o(e,c);else if(n.inputRef){var s=n.inputRef.current;s.value=u;try{s.focus(),s.select()}catch(l){}}},n}return n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,i.prototype.render=function(){var e=this,t=this.state,n=t.dragging,i=t.editing,c=t.value,u=t.suppressingFlicker,s=this.props,l=s.animated,f=s.value,d=s.unit,p=s.minValue,h=s.maxValue,g=s.format,v=s.onChange,m=s.onDrag,y=s.children,b=s.height,x=s.lineHeight,w=s.fontSize,_=f;(n||u)&&(_=c);var E=function(e){return e+(d?" "+d:"")},k=l&&!n&&!u&&(0,r.createComponentVNode)(2,a.AnimatedNumber,{value:_,format:g,children:E})||E(g?g(_):_),S=(0,r.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:i?undefined:"none",height:b,"line-height":x,"font-size":w},onBlur:function(t){if(i){var n=(0,o.clamp)(parseFloat(t.target.value),p,h);Number.isNaN(n)?e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),v&&v(t,n),m&&m(t,n))}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,o.clamp)(parseFloat(t.target.value),p,h);return Number.isNaN(n)?void e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),v&&v(t,n),void(m&&m(t,n)))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef);return y({dragging:n,editing:i,value:f,displayValue:_,displayElement:k,inputElement:S,handleDragStart:this.handleDragStart})},i}(r.Component);t.DraggableControl=u,u.defaultHooks=i.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50,dragMatrix:[1,0]}},function(e,t,n){"use strict";t.__esModule=!0,t.NumberInput=void 0;var r=n(0),o=n(9),i=n(6),a=n(138),c=n(17);var u=function(e){var t,n;function u(t){var n;n=e.call(this,t)||this;var i=t.value;return n.inputRef=(0,r.createRef)(),n.state={value:i,dragging:!1,editing:!1,internalValue:null,origin:null,suppressingFlicker:!1},n.flickerTimer=null,n.suppressFlicker=function(){var e=n.props.suppressFlicker;e>0&&(n.setState({suppressingFlicker:!0}),clearTimeout(n.flickerTimer),n.flickerTimer=setTimeout((function(){return n.setState({suppressingFlicker:!1})}),e))},n.handleDragStart=function(e){var t=n.props.value;n.state.editing||(document.body.style["pointer-events"]="none",n.ref=e.target,n.setState({dragging:!1,origin:e.screenY,value:t,internalValue:t}),n.timer=setTimeout((function(){n.setState({dragging:!0})}),250),n.dragInterval=setInterval((function(){var t=n.state,r=t.dragging,o=t.value,i=n.props.onDrag;r&&i&&i(e,o)}),n.props.updateRate||400),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd))},n.handleDragMove=function(e){var t=n.props,r=t.minValue,i=t.maxValue,a=t.step,c=t.stepPixelSize;n.setState((function(t){var n=Object.assign({},t),u=n.origin-e.screenY;if(t.dragging){var s=Number.isFinite(r)?r%a:0;n.internalValue=(0,o.clamp)(n.internalValue+u*a/c,r-a,i+a),n.value=(0,o.clamp)(n.internalValue-n.internalValue%a+s,r,i),n.origin=e.screenY}else Math.abs(u)>4&&(n.dragging=!0);return n}))},n.handleDragEnd=function(e){var t=n.props,r=t.onChange,o=t.onDrag,i=n.state,a=i.dragging,c=i.value,u=i.internalValue;if(document.body.style["pointer-events"]="auto",clearTimeout(n.timer),clearInterval(n.dragInterval),n.setState({dragging:!1,editing:!a,origin:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),a)n.suppressFlicker(),r&&r(e,c),o&&o(e,c);else if(n.inputRef){var s=n.inputRef.current;s.value=u;try{s.focus(),s.select()}catch(l){}}},n}return n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,u.prototype.render=function(){var e=this,t=this.state,n=t.dragging,u=t.editing,s=t.value,l=t.suppressingFlicker,f=this.props,d=f.className,p=f.fluid,h=f.animated,g=f.value,v=f.unit,m=f.minValue,y=f.maxValue,b=f.height,x=f.width,w=f.lineHeight,_=f.fontSize,E=f.format,k=f.onChange,S=f.onDrag,C=g;(n||l)&&(C=s);var N=function(e){return(0,r.createVNode)(1,"div","NumberInput__content",e+(v?" "+v:""),0,{unselectable:Byond.IS_LTE_IE8})},A=h&&!n&&!l&&(0,r.createComponentVNode)(2,a.AnimatedNumber,{value:C,format:E,children:N})||N(E?E(C):C);return(0,r.createComponentVNode)(2,c.Box,{className:(0,i.classes)(["NumberInput",p&&"NumberInput--fluid",d]),minWidth:x,minHeight:b,lineHeight:w,fontSize:_,onMouseDown:this.handleDragStart,children:[(0,r.createVNode)(1,"div","NumberInput__barContainer",(0,r.createVNode)(1,"div","NumberInput__bar",null,1,{style:{height:(0,o.clamp)((C-m)/(y-m)*100,0,100)+"%"}}),2),A,(0,r.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:u?undefined:"none",height:b,"line-height":w,"font-size":_},onBlur:function(t){if(u){var n=(0,o.clamp)(parseFloat(t.target.value),m,y);Number.isNaN(n)?e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),S&&S(t,n))}},onKeyDown:function(t){if(13===t.keyCode){var n=(0,o.clamp)(parseFloat(t.target.value),m,y);return Number.isNaN(n)?void e.setState({editing:!1}):(e.setState({editing:!1,value:n}),e.suppressFlicker(),k&&k(t,n),void(S&&S(t,n)))}27!==t.keyCode||e.setState({editing:!1})}},null,this.inputRef)]})},u}(r.Component);t.NumberInput=u,u.defaultHooks=i.pureComponentHooks,u.defaultProps={minValue:-Infinity,maxValue:+Infinity,step:1,stepPixelSize:1,suppressFlicker:50}},function(e,t,n){"use strict";t.__esModule=!0,t.Layout=void 0;var r=n(0),o=n(6),i=n(17),a=n(57);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){var t=e.className,n=e.theme,a=void 0===n?"nanotrasen":n,u=e.children,s=c(e,["className","theme","children"]);return(0,r.createVNode)(1,"div","theme-"+a,(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Layout",t].concat((0,i.computeBoxClassName)(s))),u,0,Object.assign({},(0,i.computeBoxProps)(s)))),2)};t.Layout=u;var s=function(e){var t=e.className,n=e.scrollable,a=e.children,u=c(e,["className","scrollable","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Layout__content",n&&"Layout__content--scrollable",t].concat((0,i.computeBoxClassName)(u))),a,0,Object.assign({},(0,i.computeBoxProps)(u))))};s.defaultHooks={onComponentDidMount:function(e){return(0,a.addScrollableNode)(e)},onComponentWillUnmount:function(e){return(0,a.removeScrollableNode)(e)}},u.Content=s},,,,,,,function(e,t,n){"use strict";n(223),n(224),n(225),n(226),n(227),n(228),n(229),n(230),n(231),n(232),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(247),n(249),n(251),n(252),n(253),n(163),n(254),n(255),n(256),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(269),n(270),n(271),n(272),n(273),n(275),n(276),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(285),n(286),n(287),n(288),n(289),n(290),n(291),n(292),n(293),n(295),n(296),n(297),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(309),n(310),n(311),n(312),n(313),n(314),n(316),n(317),n(319),n(321),n(322),n(323),n(324),n(325),n(326),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(342),n(343),n(345),n(346),n(347),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(129),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(376),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414),n(415),n(416),n(417),n(418),n(419),n(420),n(421),n(422),n(423),n(424),n(425),n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438),n(439),n(440),n(441),n(442),n(443),n(444),n(445),n(446)},function(e,t,n){"use strict";var r=n(10),o=n(5),i=n(108);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var r=n(7),o=n(109),i=r["__core-js_shared__"]||o("__core-js_shared__",{});e.exports=i},function(e,t,n){"use strict";var r=n(7),o=n(110),i=r.WeakMap;e.exports="function"==typeof i&&/native code/.test(o(i))},function(e,t,n){"use strict";var r=n(20),o=n(112),i=n(23),a=n(16);e.exports=function(e,t){for(var n=o(t),c=a.f,u=i.f,s=0;su;)r(c,n=t[u++])&&(~i(s,n)||s.push(n));return s}},function(e,t,n){"use strict";var r=n(115);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(e,t,n){"use strict";var r=n(10),o=n(16),i=n(11),a=n(71);e.exports=r?Object.defineProperties:function(e,t){i(e);for(var n,r=a(t),c=r.length,u=0;c>u;)o.f(e,n=r[u++],t[n]);return e}},function(e,t,n){"use strict";var r=n(41);e.exports=r("document","documentElement")},function(e,t,n){"use strict";var r=n(31),o=n(52).f,i={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&"[object Window]"==i.call(e)?function(e){try{return o(e)}catch(t){return a.slice()}}(e):o(r(e))}},function(e,t,n){"use strict";var r=n(15);t.f=r},function(e,t,n){"use strict";var r=n(18),o=n(47),i=n(12),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),c=i(n.length),u=o(e,c),s=o(t,c),l=arguments.length>2?arguments[2]:undefined,f=a((l===undefined?c:o(l,c))-s,c-u),d=1;for(s0;)s in n?n[u]=n[s]:delete n[u],u+=d,s+=d;return n}},function(e,t,n){"use strict";var r=n(58),o=n(12),i=n(53);e.exports=function a(e,t,n,c,u,s,l,f){for(var d,p=u,h=0,g=!!l&&i(l,f,3);h0&&r(d))p=a(e,t,d,o(d.length),p,s-1)-1;else{if(p>=9007199254740991)throw TypeError("Exceed the acceptable array length");e[p]=d}p++}h++}return p}},function(e,t,n){"use strict";var r=n(11);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(a){var i=e["return"];throw i!==undefined&&r(i.call(e)),a}}},function(e,t,n){"use strict";var r=n(31),o=n(50),i=n(74),a=n(33),c=n(121),u=a.set,s=a.getterFor("Array Iterator");e.exports=c(Array,"Array",(function(e,t){u(this,{type:"Array Iterator",target:r(e),index:0,kind:t})}),(function(){var e=s(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=undefined,{value:undefined,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},function(e,t,n){"use strict";var r=n(165).IteratorPrototype,o=n(48),i=n(51),a=n(49),c=n(74),u=function(){return this};e.exports=function(e,t,n){var s=t+" Iterator";return e.prototype=o(r,{next:i(1,n)}),a(e,s,!1,!0),c[s]=u,e}},function(e,t,n){"use strict";var r,o,i,a=n(42),c=n(32),u=n(20),s=n(15),l=n(43),f=s("iterator"),d=!1;[].keys&&("next"in(i=[].keys())?(o=a(a(i)))!==Object.prototype&&(r=o):d=!0),r==undefined&&(r={}),l||u(r,f)||c(r,f,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},function(e,t,n){"use strict";var r=n(8);e.exports=function(e){if(!r(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},function(e,t,n){"use strict";var r=n(31),o=n(38),i=n(12),a=n(44),c=n(28),u=Math.min,s=[].lastIndexOf,l=!!s&&1/[1].lastIndexOf(1,-0)<0,f=a("lastIndexOf"),d=c("indexOf",{ACCESSORS:!0,1:0}),p=l||!f||!d;e.exports=p?function(e){if(l)return s.apply(this,arguments)||0;var t=r(this),n=i(t.length),a=n-1;for(arguments.length>1&&(a=u(a,o(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:s},function(e,t,n){"use strict";var r=n(38),o=n(12);e.exports=function(e){if(e===undefined)return 0;var t=r(e),n=o(t);if(t!==n)throw RangeError("Wrong length or index");return n}},function(e,t,n){"use strict";var r=n(27),o=n(8),i=[].slice,a={},c=function(e,t,n){if(!(t in a)){for(var r=[],o=0;o1?arguments[1]:undefined,3);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!m(this,e)}}),i(l.prototype,n?{get:function(e){var t=m(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),f&&r(l.prototype,"size",{get:function(){return p(this).size}}),l},setStrong:function(e,t,n){var r=t+" Iterator",o=g(t),i=g(r);s(e,t,(function(e,t){h(this,{type:r,target:e,state:o(e),kind:t,last:undefined})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),l(t)}}},function(e,t,n){"use strict";var r=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:r(1+e)}},function(e,t,n){"use strict";var r=n(8),o=Math.floor;e.exports=function(e){return!r(e)&&isFinite(e)&&o(e)===e}},function(e,t,n){"use strict";var r=n(7),o=n(62).trim,i=n(91),a=r.parseInt,c=/^[+-]?0[Xx]/,u=8!==a(i+"08")||22!==a(i+"0x16");e.exports=u?function(e,t){var n=o(String(e));return a(n,t>>>0||(c.test(n)?16:10))}:a},function(e,t,n){"use strict";var r=n(10),o=n(71),i=n(31),a=n(81).f,c=function(e){return function(t){for(var n,c=i(t),u=o(c),s=u.length,l=0,f=[];s>l;)n=u[l++],r&&!a.call(c,n)||f.push(e?[n,c[n]]:c[n]);return f}};e.exports={entries:c(!0),values:c(!1)}},function(e,t,n){"use strict";e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},function(e,t,n){"use strict";var r=n(7);e.exports=r.Promise},function(e,t,n){"use strict";var r=n(83);e.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},function(e,t,n){"use strict";var r,o,i,a,c,u,s,l,f=n(7),d=n(23).f,p=n(37),h=n(127).set,g=n(177),v=f.MutationObserver||f.WebKitMutationObserver,m=f.process,y=f.Promise,b="process"==p(m),x=d(f,"queueMicrotask"),w=x&&x.value;w||(r=function(){var e,t;for(b&&(e=m.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(n){throw o?a():i=undefined,n}}i=undefined,e&&e.enter()},b?a=function(){m.nextTick(r)}:v&&!g?(c=!0,u=document.createTextNode(""),new v(r).observe(u,{characterData:!0}),a=function(){u.data=c=!c}):y&&y.resolve?(s=y.resolve(undefined),l=s.then,a=function(){l.call(s,r)}):a=function(){h.call(f,r)}),e.exports=w||function(e){var t={fn:e,next:undefined};i&&(i.next=t),o||(o=t,a()),i=t}},function(e,t,n){"use strict";var r=n(11),o=n(8),i=n(128);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(t){return{error:!0,value:t}}}},function(e,t,n){"use strict";var r=n(83);e.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(r)},function(e,t,n){"use strict";var r=n(402);e.exports=function(e,t){var n=r(e);if(n%t)throw RangeError("Wrong offset");return n}},function(e,t,n){"use strict";var r=n(18),o=n(12),i=n(119),a=n(118),c=n(53),u=n(13).aTypedArrayConstructor;e.exports=function(e){var t,n,s,l,f,d,p=r(e),h=arguments.length,g=h>1?arguments[1]:undefined,v=g!==undefined,m=i(p);if(m!=undefined&&!a(m))for(d=(f=m.call(p)).next,p=[];!(l=d.call(f)).done;)p.push(l.value);for(v&&h>2&&(g=c(g,arguments[2],2)),n=o(p.length),s=new(u(this))(n),t=0;n>t;t++)s[t]=v?g(p[t],t):p[t];return s}},function(e,t,n){"use strict";var r=n(75),o=n(56).getWeakData,i=n(11),a=n(8),c=n(60),u=n(61),s=n(21),l=n(20),f=n(33),d=f.set,p=f.getterFor,h=s.find,g=s.findIndex,v=0,m=function(e){return e.frozen||(e.frozen=new y)},y=function(){this.entries=[]},b=function(e,t){return h(e.entries,(function(e){return e[0]===t}))};y.prototype={get:function(e){var t=b(this,e);if(t)return t[1]},has:function(e){return!!b(this,e)},set:function(e,t){var n=b(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=g(this.entries,(function(t){return t[0]===e}));return~t&&this.entries.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,s){var f=e((function(e,r){c(e,f,t),d(e,{type:t,id:v++,frozen:undefined}),r!=undefined&&u(r,e[s],e,n)})),h=p(t),g=function(e,t,n){var r=h(e),a=o(i(t),!0);return!0===a?m(r).set(t,n):a[r.id]=n,e};return r(f.prototype,{"delete":function(e){var t=h(this);if(!a(e))return!1;var n=o(e);return!0===n?m(t)["delete"](e):n&&l(n,t.id)&&delete n[t.id]},has:function(e){var t=h(this);if(!a(e))return!1;var n=o(e);return!0===n?m(t).has(e):n&&l(n,t.id)}}),r(f.prototype,n?{get:function(e){var t=h(this);if(a(e)){var n=o(e);return!0===n?m(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return g(this,e,t)}}:{add:function(e){return g(this,e,!0)}}),f}}},function(e,t,n){"use strict";t.__esModule=!0,t.EventEmitter=void 0;var r=function(){function e(){this.listeners={}}var t=e.prototype;return t.on=function(e,t){this.listeners[e]=this.listeners[e]||[],this.listeners[e].push(t)},t.off=function(e,t){var n=this.listeners[e];if(!n)throw new Error('There is no listeners for "'+e+'"');this.listeners[e]=n.filter((function(e){return e!==t}))},t.emit=function(e){var t=this.listeners[e];if(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;ou&&(o[a]=u-t[a],i=!0)}return[i,o]};t.dragStartHandler=function(e){d.log("drag start"),h=!0,u=[window.screenLeft-e.screenX,window.screenTop-e.screenY],document.addEventListener("mousemove",T),document.addEventListener("mouseup",A),T(e)};var A=function M(e){d.log("drag end"),T(e),document.removeEventListener("mousemove",T),document.removeEventListener("mouseup",M),h=!1,k()},T=function(e){h&&(e.preventDefault(),b((0,o.vecAdd)([e.screenX,e.screenY],u)))};t.resizeStartHandler=function(e,t){return function(n){s=[e,t],d.log("resize start",s),g=!0,u=[window.screenLeft-n.screenX,window.screenTop-n.screenY],l=[window.innerWidth,window.innerHeight],document.addEventListener("mousemove",I),document.addEventListener("mouseup",O),I(n)}};var O=function L(e){d.log("resize end",f),I(e),document.removeEventListener("mousemove",I),document.removeEventListener("mouseup",L),g=!1,k()},I=function(e){g&&(e.preventDefault(),(f=(0,o.vecAdd)(l,(0,o.vecMultiply)(s,(0,o.vecAdd)([e.screenX,e.screenY],(0,o.vecInverse)([window.screenLeft,window.screenTop]),u,[1,1]))))[0]=Math.max(f[0],150),f[1]=Math.max(f[1],50),x(f))}},function(e,t,n){"use strict";t.__esModule=!0,t.focusWindow=t.focusMap=void 0;t.focusMap=function(){Byond.winset("mapwindow.map",{focus:!0})};t.focusWindow=function(){Byond.winset(window.__windowId__,{focus:!0})}},function(e,t,n){"use strict";t.__esModule=!0,t.selectDebug=void 0;t.selectDebug=function(e){return e.debug}},function(e,t,n){"use strict";t.__esModule=!0,t.ButtonInput=t.ButtonConfirm=t.ButtonCheckbox=t.Button=void 0;var r=n(0),o=n(6),i=n(135),a=n(29),c=n(17),u=n(103),s=n(192);function l(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function f(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var d=(0,a.createLogger)("Button"),p=function(e){var t=e.className,n=e.fluid,a=e.icon,l=e.iconRotation,p=e.iconSpin,h=e.color,g=e.disabled,v=e.selected,m=e.tooltip,y=e.tooltipPosition,b=e.ellipsis,x=e.compact,w=e.circular,_=e.content,E=e.children,k=e.onclick,S=e.onClick,C=f(e,["className","fluid","icon","iconRotation","iconSpin","color","disabled","selected","tooltip","tooltipPosition","ellipsis","compact","circular","content","children","onclick","onClick"]),N=!(!_&&!E);return k&&d.warn("Lowercase 'onclick' is not supported on Button and lowercase prop names are discouraged in general. Please use a camelCase'onClick' instead and read: https://infernojs.org/docs/guides/event-handling"),(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.Box,Object.assign({className:(0,o.classes)(["Button",n&&"Button--fluid",g&&"Button--disabled",v&&"Button--selected",N&&"Button--hasContent",b&&"Button--ellipsis",w&&"Button--circular",x&&"Button--compact",h&&"string"==typeof h?"Button--color--"+h:"Button--color--default",t]),tabIndex:!g&&"0",unselectable:Byond.IS_LTE_IE8,onClick:function(e){!g&&S&&S(e)},onKeyDown:function(e){var t=window.event?e.which:e.keyCode;if(t===i.KEY_SPACE||t===i.KEY_ENTER)return e.preventDefault(),void(!g&&S&&S(e));t!==i.KEY_ESCAPE||e.preventDefault()}},C,{children:[a&&(0,r.createComponentVNode)(2,u.Icon,{name:a,rotation:l,spin:p}),_,E,m&&(0,r.createComponentVNode)(2,s.Tooltip,{content:m,position:y})]})))};t.Button=p,p.defaultHooks=o.pureComponentHooks;var h=function(e){var t=e.checked,n=f(e,["checked"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,p,Object.assign({color:"transparent",icon:t?"check-square-o":"square-o",selected:t},n)))};t.ButtonCheckbox=h,p.Checkbox=h;var g=function(e){function t(){var t;return(t=e.call(this)||this).state={clickedOnce:!1},t.handleClick=function(){t.state.clickedOnce&&t.setClickedOnce(!1)},t}l(t,e);var n=t.prototype;return n.setClickedOnce=function(e){var t=this;this.setState({clickedOnce:e}),e?setTimeout((function(){return window.addEventListener("click",t.handleClick)})):window.removeEventListener("click",this.handleClick)},n.render=function(){var e=this,t=this.props,n=t.confirmContent,o=void 0===n?"Confirm?":n,i=t.confirmColor,a=void 0===i?"bad":i,c=t.confirmIcon,u=t.icon,s=t.color,l=t.content,d=t.onClick,h=f(t,["confirmContent","confirmColor","confirmIcon","icon","color","content","onClick"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,p,Object.assign({content:this.state.clickedOnce?o:l,icon:this.state.clickedOnce?c:u,color:this.state.clickedOnce?a:s,onClick:function(){return e.state.clickedOnce?d():e.setClickedOnce(!0)}},h)))},t}(r.Component);t.ButtonConfirm=g,p.Confirm=g;var v=function(e){function t(){var t;return(t=e.call(this)||this).inputRef=(0,r.createRef)(),t.state={inInput:!1},t}l(t,e);var n=t.prototype;return n.setInInput=function(e){if(this.setState({inInput:e}),this.inputRef){var t=this.inputRef.current;if(e){t.value=this.props.currentValue||"";try{t.focus(),t.select()}catch(n){}}}},n.commitResult=function(e){if(this.inputRef){var t=this.inputRef.current;if(""!==t.value)return void this.props.onCommit(e,t.value);if(!this.props.defaultValue)return;this.props.onCommit(e,this.props.defaultValue)}},n.render=function(){var e=this,t=this.props,n=t.fluid,a=t.content,l=t.icon,d=t.iconRotation,p=t.iconSpin,h=t.tooltip,g=t.tooltipPosition,v=t.color,m=void 0===v?"default":v,y=(t.placeholder,t.maxLength,f(t,["fluid","content","icon","iconRotation","iconSpin","tooltip","tooltipPosition","color","placeholder","maxLength"]));return(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.Box,Object.assign({className:(0,o.classes)(["Button",n&&"Button--fluid","Button--color--"+m])},y,{onClick:function(){return e.setInInput(!0)},children:[l&&(0,r.createComponentVNode)(2,u.Icon,{name:l,rotation:d,spin:p}),(0,r.createVNode)(1,"div",null,a,0),(0,r.createVNode)(64,"input","NumberInput__input",null,1,{style:{display:this.state.inInput?undefined:"none","text-align":"left"},onBlur:function(t){e.state.inInput&&(e.setInInput(!1),e.commitResult(t))},onKeyDown:function(t){if(t.keyCode===i.KEY_ENTER)return e.setInInput(!1),void e.commitResult(t);t.keyCode===i.KEY_ESCAPE&&e.setInInput(!1)}},null,this.inputRef),h&&(0,r.createComponentVNode)(2,s.Tooltip,{content:h,position:g})]})))},t}(r.Component);t.ButtonInput=v,p.Input=v},function(e,t,n){"use strict";t.__esModule=!0,t.Tooltip=void 0;var r=n(0),o=n(6);t.Tooltip=function(e){var t=e.content,n=e.position,i=void 0===n?"bottom":n,a="string"==typeof t&&t.length>35;return(0,r.createVNode)(1,"div",(0,o.classes)(["Tooltip",a&&"Tooltip--long",i&&"Tooltip--"+i]),null,1,{"data-tooltip":t})}},function(e,t,n){"use strict";t.__esModule=!0,t.Dimmer=void 0;var r=n(0),o=n(6),i=n(17);t.Dimmer=function(e){var t=e.className,n=e.children,a=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["Dimmer"].concat(t))},a,{children:(0,r.createVNode)(1,"div","Dimmer__inner",n,0)})))}},function(e,t,n){"use strict";t.__esModule=!0,t.Divider=void 0;var r=n(0),o=n(6);t.Divider=function(e){var t=e.vertical,n=e.hidden;return(0,r.createVNode)(1,"div",(0,o.classes)(["Divider",n&&"Divider--hidden",t?"Divider--vertical":"Divider--horizontal"]))}},function(e,t,n){"use strict";t.__esModule=!0,t.FlexItem=t.computeFlexItemProps=t.Flex=t.computeFlexProps=void 0;var r=n(0),o=n(6),i=n(17);function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var c=function(e){var t=e.className,n=e.direction,r=e.wrap,i=e.align,c=e.justify,u=e.inline,s=e.spacing,l=void 0===s?0:s,f=a(e,["className","direction","wrap","align","justify","inline","spacing"]);return Object.assign({className:(0,o.classes)(["Flex",Byond.IS_LTE_IE10&&("column"===n?"Flex--iefix--column":"Flex--iefix"),u&&"Flex--inline",l>0&&"Flex--spacing--"+l,t]),style:Object.assign({},f.style,{"flex-direction":n,"flex-wrap":r,"align-items":i,"justify-content":c})},f)};t.computeFlexProps=c;var u=function(e){return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({},c(e))))};t.Flex=u,u.defaultHooks=o.pureComponentHooks;var s=function(e){var t=e.className,n=e.style,r=e.grow,c=e.order,u=e.shrink,s=e.basis,l=void 0===s?e.width:s,f=e.align,d=a(e,["className","style","grow","order","shrink","basis","align"]);return Object.assign({className:(0,o.classes)(["Flex__item",Byond.IS_LTE_IE10&&"Flex__item--iefix",Byond.IS_LTE_IE10&&r>0&&"Flex__item--iefix--grow",t]),style:Object.assign({},n,{"flex-grow":r,"flex-shrink":u,"flex-basis":(0,i.unit)(l),order:c,"align-self":f})},d)};t.computeFlexItemProps=s;var l=function(e){return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({},s(e))))};t.FlexItem=l,l.defaultHooks=o.pureComponentHooks,u.Item=l},function(e,t,n){"use strict";t.__esModule=!0,t.TableCell=t.TableRow=t.Table=void 0;var r=n(0),o=n(6),i=n(17);function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var c=function(e){var t=e.className,n=e.collapsing,c=e.children,u=a(e,["className","collapsing","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"table",(0,o.classes)(["Table",n&&"Table--collapsing",t,(0,i.computeBoxClassName)(u)]),(0,r.createVNode)(1,"tbody",null,c,0),2,Object.assign({},(0,i.computeBoxProps)(u))))};t.Table=c,c.defaultHooks=o.pureComponentHooks;var u=function(e){var t=e.className,n=e.header,c=a(e,["className","header"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"tr",(0,o.classes)(["Table__row",n&&"Table__row--header",t,(0,i.computeBoxClassName)(e)]),null,1,Object.assign({},(0,i.computeBoxProps)(c))))};t.TableRow=u,u.defaultHooks=o.pureComponentHooks;var s=function(e){var t=e.className,n=e.collapsing,c=e.header,u=a(e,["className","collapsing","header"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"td",(0,o.classes)(["Table__cell",n&&"Table__cell--collapsing",c&&"Table__cell--header",t,(0,i.computeBoxClassName)(e)]),null,1,Object.assign({},(0,i.computeBoxProps)(u))))};t.TableCell=s,s.defaultHooks=o.pureComponentHooks,c.Row=u,c.Cell=s},function(e,t,n){"use strict";t.__esModule=!0,t.Input=t.toInputValue=void 0;var r=n(0),o=n(6),i=n(17),a=n(78);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){return"number"!=typeof e&&"string"!=typeof e?"":String(e)};t.toInputValue=u;var s=function(e){var t,n;function s(){var t;return(t=e.call(this)||this).inputRef=(0,r.createRef)(),t.state={editing:!1},t.handleInput=function(e){var n=t.state.editing,r=t.props.onInput;n||t.setEditing(!0),r&&r(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,r=t.props.onChange;n&&(t.setEditing(!1),r&&r(e,e.target.value))},t.handleKeyDown=function(e){var n=t.props,r=n.onInput,o=n.onChange,i=n.onEnter;return e.keyCode===a.KEY_ENTER?(t.setEditing(!1),o&&o(e,e.target.value),r&&r(e,e.target.value),i&&i(e,e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):e.keyCode===a.KEY_ESCAPE?(t.setEditing(!1),e.target.value=u(t.props.value),void e.target.blur()):void 0},t}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var l=s.prototype;return l.componentDidMount=function(){var e=this.props.value,t=this.inputRef.current;t&&(t.value=u(e)),this.props.autoFocus&&setTimeout((function(){return t.focus()}),1)},l.componentDidUpdate=function(e,t){var n=this.state.editing,r=e.value,o=this.props.value,i=this.inputRef.current;i&&!n&&r!==o&&(i.value=u(o))},l.setEditing=function(e){this.setState({editing:e})},l.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,a=c(e,["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder"]),u=a.className,s=a.fluid,l=a.monospace,f=c(a,["className","fluid","monospace"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["Input",s&&"Input--fluid",l&&"Input--monospace",u])},f,{children:[(0,r.createVNode)(1,"div","Input__baseline",".",16),(0,r.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t},null,this.inputRef)]})))},s}(r.Component);t.Input=s},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledListDivider=t.LabeledListItem=t.LabeledList=void 0;var r=n(0),o=n(6),i=n(17),a=n(194),c=function(e){var t=e.children;return(0,r.createVNode)(1,"table","LabeledList",t,0)};t.LabeledList=c,c.defaultHooks=o.pureComponentHooks;var u=function(e){var t=e.className,n=e.label,a=e.labelColor,c=void 0===a?"label":a,u=e.color,s=e.textAlign,l=e.buttons,f=e.content,d=e.children;return(0,r.createVNode)(1,"tr",(0,o.classes)(["LabeledList__row",t]),[(0,r.createComponentVNode)(2,i.Box,{as:"td",color:c,className:(0,o.classes)(["LabeledList__cell","LabeledList__label"]),children:n?n+":":null}),(0,r.createComponentVNode)(2,i.Box,{as:"td",color:u,textAlign:s,className:(0,o.classes)(["LabeledList__cell","LabeledList__content"]),colSpan:l?undefined:2,children:[f,d]}),l&&(0,r.createVNode)(1,"td","LabeledList__cell LabeledList__buttons",l,0)],0)};t.LabeledListItem=u,u.defaultHooks=o.pureComponentHooks;var s=function(e){var t=e.size?(0,i.unit)(Math.max(0,e.size-1)):0;return(0,r.createVNode)(1,"tr","LabeledList__row",(0,r.createVNode)(1,"td",null,(0,r.createComponentVNode)(2,a.Divider),2,{colSpan:3,style:{"padding-top":t,"padding-bottom":t}}),2)};t.LabeledListDivider=s,s.defaultHooks=o.pureComponentHooks,c.Item=u,c.Divider=s},function(e,t,n){"use strict";t.__esModule=!0,t.Window=void 0;var r=n(0),o=n(6),i=n(22),a=n(19),c=n(2),u=n(1),s=n(36),l=n(137),f=(n(200),n(188)),d=n(29),p=n(141);var h=(0,d.createLogger)("Window"),g=[400,600],v=function(e){var t,n;function u(){return e.apply(this,arguments)||this}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var d=u.prototype;return d.componentDidMount=function(){var e,t=(0,c.useBackend)(this.context),n=t.config;if(!t.suspended){h.log("mounting");var r=Object.assign({size:g},n.window);this.props.width&&this.props.height&&(r.size=[this.props.width,this.props.height]),(null==(e=n.window)?void 0:e.key)&&(0,f.setWindowKey)(n.window.key),(0,f.recallWindowGeometry)(r)}},d.render=function(){var e,t=this.props,n=t.resizable,u=t.theme,d=t.title,g=t.children,v=(0,c.useBackend)(this.context),m=v.config,b=v.suspended,x=(0,l.useDebug)(this.context).debugLayout,w=(0,i.useDispatch)(this.context),_=null==(e=m.window)?void 0:e.fancy,E=m.user&&(m.user.observer?m.status=0||(o[n]=e[n]);return o}(e,["className","fitted","children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,p.Layout.Content,Object.assign({className:(0,o.classes)(["Window__content",t])},a,{children:n&&i||(0,r.createVNode)(1,"div","Window__contentPadding",i,0)})))};var m=function(e){switch(e){case s.UI_INTERACTIVE:return"good";case s.UI_UPDATE:return"average";case s.UI_DISABLED:default:return"bad"}},y=function(e,t){var n=e.className,c=e.title,s=e.status,l=e.fancy,f=e.onDragStart,d=e.onClose;(0,i.useDispatch)(t);return(0,r.createVNode)(1,"div",(0,o.classes)(["TitleBar",n]),[s===undefined&&(0,r.createComponentVNode)(2,u.Icon,{className:"TitleBar__statusIcon",name:"tools",opacity:.5})||(0,r.createComponentVNode)(2,u.Icon,{className:"TitleBar__statusIcon",color:m(s),name:"eye"}),(0,r.createVNode)(1,"div","TitleBar__title","string"==typeof c&&c===c.toLowerCase()&&(0,a.toTitleCase)(c)||c,0),(0,r.createVNode)(1,"div","TitleBar__dragZone",null,1,{onMousedown:function(e){return l&&f(e)}}),!1,!!l&&(0,r.createVNode)(1,"div","TitleBar__close TitleBar__clickable",Byond.IS_LTE_IE8?"x":"\xd7",0,{onclick:d})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.openExternalBrowser=t.toggleDebugLayout=t.toggleKitchenSink=void 0;var r=n(22),o=(0,r.createAction)("debug/toggleKitchenSink");t.toggleKitchenSink=o;var i=(0,r.createAction)("debug/toggleDebugLayout");t.toggleDebugLayout=i;var a=(0,r.createAction)("debug/openExternalBrowser");t.openExternalBrowser=a},,,,function(e,t,n){"use strict";t.__esModule=!0,t.createUuid=void 0;t.createUuid=function(){var e=(new Date).getTime();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(t){var n=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===t?n:3&n|8).toString(16)}))}},,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(41),a=n(43),c=n(10),u=n(115),s=n(155),l=n(5),f=n(20),d=n(58),p=n(8),h=n(11),g=n(18),v=n(31),m=n(40),y=n(51),b=n(48),x=n(71),w=n(52),_=n(158),E=n(114),k=n(23),S=n(16),C=n(81),N=n(32),A=n(25),T=n(111),O=n(82),I=n(68),M=n(67),L=n(15),V=n(159),R=n(26),P=n(49),B=n(33),D=n(21).forEach,F=O("hidden"),j=L("toPrimitive"),K=B.set,z=B.getterFor("Symbol"),Y=Object.prototype,U=o.Symbol,$=i("JSON","stringify"),H=k.f,W=S.f,q=_.f,G=C.f,X=T("symbols"),Z=T("op-symbols"),Q=T("string-to-symbol-registry"),J=T("symbol-to-string-registry"),ee=T("wks"),te=o.QObject,ne=!te||!te.prototype||!te.prototype.findChild,re=c&&l((function(){return 7!=b(W({},"a",{get:function(){return W(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=H(Y,t);r&&delete Y[t],W(e,t,n),r&&e!==Y&&W(Y,t,r)}:W,oe=function(e,t){var n=X[e]=b(U.prototype);return K(n,{type:"Symbol",tag:e,description:t}),c||(n.description=t),n},ie=s?function(e){return"symbol"==typeof e}:function(e){return Object(e)instanceof U},ae=function(e,t,n){e===Y&&ae(Z,t,n),h(e);var r=m(t,!0);return h(n),f(X,r)?(n.enumerable?(f(e,F)&&e[F][r]&&(e[F][r]=!1),n=b(n,{enumerable:y(0,!1)})):(f(e,F)||W(e,F,y(1,{})),e[F][r]=!0),re(e,r,n)):W(e,r,n)},ce=function(e,t){h(e);var n=v(t),r=x(n).concat(de(n));return D(r,(function(t){c&&!se.call(n,t)||ae(e,t,n[t])})),e},ue=function(e,t){return t===undefined?b(e):ce(b(e),t)},se=function(e){var t=m(e,!0),n=G.call(this,t);return!(this===Y&&f(X,t)&&!f(Z,t))&&(!(n||!f(this,t)||!f(X,t)||f(this,F)&&this[F][t])||n)},le=function(e,t){var n=v(e),r=m(t,!0);if(n!==Y||!f(X,r)||f(Z,r)){var o=H(n,r);return!o||!f(X,r)||f(n,F)&&n[F][r]||(o.enumerable=!0),o}},fe=function(e){var t=q(v(e)),n=[];return D(t,(function(e){f(X,e)||f(I,e)||n.push(e)})),n},de=function(e){var t=e===Y,n=q(t?Z:v(e)),r=[];return D(n,(function(e){!f(X,e)||t&&!f(Y,e)||r.push(X[e])})),r};(u||(A((U=function(){if(this instanceof U)throw TypeError("Symbol is not a constructor");var e=arguments.length&&arguments[0]!==undefined?String(arguments[0]):undefined,t=M(e),n=function r(e){this===Y&&r.call(Z,e),f(this,F)&&f(this[F],t)&&(this[F][t]=!1),re(this,t,y(1,e))};return c&&ne&&re(Y,t,{configurable:!0,set:n}),oe(t,e)}).prototype,"toString",(function(){return z(this).tag})),A(U,"withoutSetter",(function(e){return oe(M(e),e)})),C.f=se,S.f=ae,k.f=le,w.f=_.f=fe,E.f=de,V.f=function(e){return oe(L(e),e)},c&&(W(U.prototype,"description",{configurable:!0,get:function(){return z(this).description}}),a||A(Y,"propertyIsEnumerable",se,{unsafe:!0}))),r({global:!0,wrap:!0,forced:!u,sham:!u},{Symbol:U}),D(x(ee),(function(e){R(e)})),r({target:"Symbol",stat:!0,forced:!u},{"for":function(e){var t=String(e);if(f(Q,t))return Q[t];var n=U(t);return Q[t]=n,J[n]=t,n},keyFor:function(e){if(!ie(e))throw TypeError(e+" is not a symbol");if(f(J,e))return J[e]},useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),r({target:"Object",stat:!0,forced:!u,sham:!c},{create:ue,defineProperty:ae,defineProperties:ce,getOwnPropertyDescriptor:le}),r({target:"Object",stat:!0,forced:!u},{getOwnPropertyNames:fe,getOwnPropertySymbols:de}),r({target:"Object",stat:!0,forced:l((function(){E.f(1)}))},{getOwnPropertySymbols:function(e){return E.f(g(e))}}),$)&&r({target:"JSON",stat:!0,forced:!u||l((function(){var e=U();return"[null]"!=$([e])||"{}"!=$({a:e})||"{}"!=$(Object(e))}))},{stringify:function(e,t,n){for(var r,o=[e],i=1;arguments.length>i;)o.push(arguments[i++]);if(r=t,(p(t)||e!==undefined)&&!ie(e))return d(t)||(t=function(e,t){if("function"==typeof r&&(t=r.call(this,e,t)),!ie(t))return t}),o[1]=t,$.apply(null,o)}});U.prototype[j]||N(U.prototype,j,U.prototype.valueOf),P(U,"Symbol"),I[F]=!0},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(7),a=n(20),c=n(8),u=n(16).f,s=n(152),l=i.Symbol;if(o&&"function"==typeof l&&(!("description"in l.prototype)||l().description!==undefined)){var f={},d=function(){var e=arguments.length<1||arguments[0]===undefined?undefined:String(arguments[0]),t=this instanceof d?new l(e):e===undefined?l():l(e);return""===e&&(f[t]=!0),t};s(d,l);var p=d.prototype=l.prototype;p.constructor=d;var h=p.toString,g="Symbol(test)"==String(l("test")),v=/^Symbol\((.*)\)[^)]+$/;u(p,"description",{configurable:!0,get:function(){var e=c(this)?this.valueOf():this,t=h.call(e);if(a(f,e))return"";var n=g?t.slice(7,-1):t.replace(v,"$1");return""===n?undefined:n}}),r({global:!0,forced:!0},{Symbol:d})}},function(e,t,n){"use strict";n(26)("asyncIterator")},function(e,t,n){"use strict";n(26)("hasInstance")},function(e,t,n){"use strict";n(26)("isConcatSpreadable")},function(e,t,n){"use strict";n(26)("iterator")},function(e,t,n){"use strict";n(26)("match")},function(e,t,n){"use strict";n(26)("matchAll")},function(e,t,n){"use strict";n(26)("replace")},function(e,t,n){"use strict";n(26)("search")},function(e,t,n){"use strict";n(26)("species")},function(e,t,n){"use strict";n(26)("split")},function(e,t,n){"use strict";n(26)("toPrimitive")},function(e,t,n){"use strict";n(26)("toStringTag")},function(e,t,n){"use strict";n(26)("unscopables")},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(58),a=n(8),c=n(18),u=n(12),s=n(54),l=n(72),f=n(73),d=n(15),p=n(116),h=d("isConcatSpreadable"),g=p>=51||!o((function(){var e=[];return e[h]=!1,e.concat()[0]!==e})),v=f("concat"),m=function(e){if(!a(e))return!1;var t=e[h];return t!==undefined?!!t:i(e)};r({target:"Array",proto:!0,forced:!g||!v},{concat:function(e){var t,n,r,o,i,a=c(this),f=l(a,0),d=0;for(t=-1,r=arguments.length;t9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");s(f,d++,i)}return f.length=d,f}})},function(e,t,n){"use strict";var r=n(4),o=n(160),i=n(50);r({target:"Array",proto:!0},{copyWithin:o}),i("copyWithin")},function(e,t,n){"use strict";var r=n(4),o=n(21).every,i=n(44),a=n(28),c=i("every"),u=a("every");r({target:"Array",proto:!0,forced:!c||!u},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(117),i=n(50);r({target:"Array",proto:!0},{fill:o}),i("fill")},function(e,t,n){"use strict";var r=n(4),o=n(21).filter,i=n(73),a=n(28),c=i("filter"),u=a("filter");r({target:"Array",proto:!0,forced:!c||!u},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(21).find,i=n(50),a=n(28),c=!0,u=a("find");"find"in[]&&Array(1).find((function(){c=!1})),r({target:"Array",proto:!0,forced:c||!u},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}}),i("find")},function(e,t,n){"use strict";var r=n(4),o=n(21).findIndex,i=n(50),a=n(28),c=!0,u=a("findIndex");"findIndex"in[]&&Array(1).findIndex((function(){c=!1})),r({target:"Array",proto:!0,forced:c||!u},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}}),i("findIndex")},function(e,t,n){"use strict";var r=n(4),o=n(161),i=n(18),a=n(12),c=n(38),u=n(72);r({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:undefined,t=i(this),n=a(t.length),r=u(t,0);return r.length=o(r,t,t,n,0,e===undefined?1:c(e)),r}})},function(e,t,n){"use strict";var r=n(4),o=n(161),i=n(18),a=n(12),c=n(27),u=n(72);r({target:"Array",proto:!0},{flatMap:function(e){var t,n=i(this),r=a(n.length);return c(e),(t=u(n,0)).length=o(t,n,n,r,0,1,e,arguments.length>1?arguments[1]:undefined),t}})},function(e,t,n){"use strict";var r=n(4),o=n(248);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},function(e,t,n){"use strict";var r=n(21).forEach,o=n(44),i=n(28),a=o("forEach"),c=i("forEach");e.exports=a&&c?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}},function(e,t,n){"use strict";var r=n(4),o=n(250);r({target:"Array",stat:!0,forced:!n(85)((function(e){Array.from(e)}))},{from:o})},function(e,t,n){"use strict";var r=n(53),o=n(18),i=n(162),a=n(118),c=n(12),u=n(54),s=n(119);e.exports=function(e){var t,n,l,f,d,p,h=o(e),g="function"==typeof this?this:Array,v=arguments.length,m=v>1?arguments[1]:undefined,y=m!==undefined,b=s(h),x=0;if(y&&(m=r(m,v>2?arguments[2]:undefined,2)),b==undefined||g==Array&&a(b))for(n=new g(t=c(h.length));t>x;x++)p=y?m(h[x],x):h[x],u(n,x,p);else for(d=(f=b.call(h)).next,n=new g;!(l=d.call(f)).done;x++)p=y?i(f,m,[l.value,x],!0):l.value,u(n,x,p);return n.length=x,n}},function(e,t,n){"use strict";var r=n(4),o=n(69).includes,i=n(50);r({target:"Array",proto:!0,forced:!n(28)("indexOf",{ACCESSORS:!0,1:0})},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}}),i("includes")},function(e,t,n){"use strict";var r=n(4),o=n(69).indexOf,i=n(44),a=n(28),c=[].indexOf,u=!!c&&1/[1].indexOf(1,-0)<0,s=i("indexOf"),l=a("indexOf",{ACCESSORS:!0,1:0});r({target:"Array",proto:!0,forced:u||!s||!l},{indexOf:function(e){return u?c.apply(this,arguments)||0:o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";n(4)({target:"Array",stat:!0},{isArray:n(58)})},function(e,t,n){"use strict";var r=n(4),o=n(66),i=n(31),a=n(44),c=[].join,u=o!=Object,s=a("join",",");r({target:"Array",proto:!0,forced:u||!s},{join:function(e){return c.call(i(this),e===undefined?",":e)}})},function(e,t,n){"use strict";var r=n(4),o=n(167);r({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},function(e,t,n){"use strict";var r=n(4),o=n(21).map,i=n(73),a=n(28),c=i("map"),u=a("map");r({target:"Array",proto:!0,forced:!c||!u},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(54);r({target:"Array",stat:!0,forced:o((function(){function e(){}return!(Array.of.call(e)instanceof e)}))},{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)i(n,e,arguments[e++]);return n.length=t,n}})},function(e,t,n){"use strict";var r=n(4),o=n(86).left,i=n(44),a=n(28),c=i("reduce"),u=a("reduce",{1:0});r({target:"Array",proto:!0,forced:!c||!u},{reduce:function(e){return o(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(86).right,i=n(44),a=n(28),c=i("reduceRight"),u=a("reduce",{1:0});r({target:"Array",proto:!0,forced:!c||!u},{reduceRight:function(e){return o(this,e,arguments.length,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(58),a=n(47),c=n(12),u=n(31),s=n(54),l=n(15),f=n(73),d=n(28),p=f("slice"),h=d("slice",{ACCESSORS:!0,0:0,1:2}),g=l("species"),v=[].slice,m=Math.max;r({target:"Array",proto:!0,forced:!p||!h},{slice:function(e,t){var n,r,l,f=u(this),d=c(f.length),p=a(e,d),h=a(t===undefined?d:t,d);if(i(f)&&("function"!=typeof(n=f.constructor)||n!==Array&&!i(n.prototype)?o(n)&&null===(n=n[g])&&(n=undefined):n=undefined,n===Array||n===undefined))return v.call(f,p,h);for(r=new(n===undefined?Array:n)(m(h-p,0)),l=0;p1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(27),i=n(18),a=n(5),c=n(44),u=[],s=u.sort,l=a((function(){u.sort(undefined)})),f=a((function(){u.sort(null)})),d=c("sort");r({target:"Array",proto:!0,forced:l||!f||!d},{sort:function(e){return e===undefined?s.call(i(this)):s.call(i(this),o(e))}})},function(e,t,n){"use strict";n(59)("Array")},function(e,t,n){"use strict";var r=n(4),o=n(47),i=n(38),a=n(12),c=n(18),u=n(72),s=n(54),l=n(73),f=n(28),d=l("splice"),p=f("splice",{ACCESSORS:!0,0:0,1:2}),h=Math.max,g=Math.min;r({target:"Array",proto:!0,forced:!d||!p},{splice:function(e,t){var n,r,l,f,d,p,v=c(this),m=a(v.length),y=o(e,m),b=arguments.length;if(0===b?n=r=0:1===b?(n=0,r=m-y):(n=b-2,r=g(h(i(t),0),m-y)),m+n-r>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(l=u(v,r),f=0;fm-r+n;f--)delete v[f-1]}else if(n>r)for(f=m-r;f>y;f--)p=f+n-1,(d=f+r-1)in v?v[p]=v[d]:delete v[p];for(f=0;f>1,g=23===t?o(2,-24)-o(2,-77):0,v=e<0||0===e&&1/e<0?1:0,m=0;for((e=r(e))!=e||e===1/0?(s=e!=e?1:0,u=p):(u=i(a(e)/c),e*(l=o(2,-u))<1&&(u--,l*=2),(e+=u+h>=1?g/l:g*o(2,1-h))*l>=2&&(u++,l/=2),u+h>=p?(s=0,u=p):u+h>=1?(s=(e*l-1)*o(2,t),u+=h):(s=e*o(2,h-1)*o(2,t),u=0));t>=8;f[m++]=255&s,s/=256,t-=8);for(u=u<0;f[m++]=255&u,u/=256,d-=8);return f[--m]|=128*v,f},unpack:function(e,t){var n,r=e.length,i=8*r-t-1,a=(1<>1,u=i-7,s=r-1,l=e[s--],f=127&l;for(l>>=7;u>0;f=256*f+e[s],s--,u-=8);for(n=f&(1<<-u)-1,f>>=-u,u+=t;u>0;n=256*n+e[s],s--,u-=8);if(0===f)f=1-c;else{if(f===a)return n?NaN:l?-1/0:1/0;n+=o(2,t),f-=c}return(l?-1:1)*n*o(2,f-t)}}},function(e,t,n){"use strict";var r=n(4),o=n(13);r({target:"ArrayBuffer",stat:!0,forced:!o.NATIVE_ARRAY_BUFFER_VIEWS},{isView:o.isView})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(87),a=n(11),c=n(47),u=n(12),s=n(45),l=i.ArrayBuffer,f=i.DataView,d=l.prototype.slice;r({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:o((function(){return!new l(2).slice(1,undefined).byteLength}))},{slice:function(e,t){if(d!==undefined&&t===undefined)return d.call(a(this),e);for(var n=a(this).byteLength,r=c(e,n),o=c(t===undefined?n:t,n),i=new(s(this,l))(u(o-r)),p=new f(this),h=new f(i),g=0;r9999?"+":"";return n+o(i(e),n?6:4,0)+"-"+o(this.getUTCMonth()+1,2,0)+"-"+o(this.getUTCDate(),2,0)+"T"+o(this.getUTCHours(),2,0)+":"+o(this.getUTCMinutes(),2,0)+":"+o(this.getUTCSeconds(),2,0)+"."+o(t,3,0)+"Z"}:u},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(18),a=n(40);r({target:"Date",proto:!0,forced:o((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=i(this),n=a(t);return"number"!=typeof n||isFinite(n)?t.toISOString():null}})},function(e,t,n){"use strict";var r=n(32),o=n(277),i=n(15)("toPrimitive"),a=Date.prototype;i in a||r(a,i,o)},function(e,t,n){"use strict";var r=n(11),o=n(40);e.exports=function(e){if("string"!==e&&"number"!==e&&"default"!==e)throw TypeError("Incorrect hint");return o(r(this),"number"!==e)}},function(e,t,n){"use strict";var r=n(25),o=Date.prototype,i=o.toString,a=o.getTime;new Date(NaN)+""!="Invalid Date"&&r(o,"toString",(function(){var e=a.call(this);return e==e?i.call(this):"Invalid Date"}))},function(e,t,n){"use strict";n(4)({target:"Function",proto:!0},{bind:n(169)})},function(e,t,n){"use strict";var r=n(8),o=n(16),i=n(42),a=n(15)("hasInstance"),c=Function.prototype;a in c||o.f(c,a,{value:function(e){if("function"!=typeof this||!r(e))return!1;if(!r(this.prototype))return e instanceof this;for(;e=i(e);)if(this.prototype===e)return!0;return!1}})},function(e,t,n){"use strict";var r=n(10),o=n(16).f,i=Function.prototype,a=i.toString,c=/^\s*function ([^ (]*)/;r&&!("name"in i)&&o(i,"name",{configurable:!0,get:function(){try{return a.call(this).match(c)[1]}catch(e){return""}}})},function(e,t,n){"use strict";n(4)({global:!0},{globalThis:n(7)})},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(5),a=o("JSON","stringify"),c=/[\uD800-\uDFFF]/g,u=/^[\uD800-\uDBFF]$/,s=/^[\uDC00-\uDFFF]$/,l=function(e,t,n){var r=n.charAt(t-1),o=n.charAt(t+1);return u.test(e)&&!s.test(o)||s.test(e)&&!u.test(r)?"\\u"+e.charCodeAt(0).toString(16):e},f=i((function(){return'"\\udf06\\ud834"'!==a("\udf06\ud834")||'"\\udead"'!==a("\udead")}));a&&r({target:"JSON",stat:!0,forced:f},{stringify:function(e,t,n){var r=a.apply(null,arguments);return"string"==typeof r?r.replace(c,l):r}})},function(e,t,n){"use strict";var r=n(7);n(49)(r.JSON,"JSON",!0)},function(e,t,n){"use strict";var r=n(88),o=n(170);e.exports=r("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),o)},function(e,t,n){"use strict";var r=n(4),o=n(171),i=Math.acosh,a=Math.log,c=Math.sqrt,u=Math.LN2;r({target:"Math",stat:!0,forced:!i||710!=Math.floor(i(Number.MAX_VALUE))||i(Infinity)!=Infinity},{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?a(e)+u:o(e-1+c(e-1)*c(e+1))}})},function(e,t,n){"use strict";var r=n(4),o=Math.asinh,i=Math.log,a=Math.sqrt;r({target:"Math",stat:!0,forced:!(o&&1/o(0)>0)},{asinh:function c(e){return isFinite(e=+e)&&0!=e?e<0?-c(-e):i(e+a(e*e+1)):e}})},function(e,t,n){"use strict";var r=n(4),o=Math.atanh,i=Math.log;r({target:"Math",stat:!0,forced:!(o&&1/o(-0)<0)},{atanh:function(e){return 0==(e=+e)?e:i((1+e)/(1-e))/2}})},function(e,t,n){"use strict";var r=n(4),o=n(126),i=Math.abs,a=Math.pow;r({target:"Math",stat:!0},{cbrt:function(e){return o(e=+e)*a(i(e),1/3)}})},function(e,t,n){"use strict";var r=n(4),o=Math.floor,i=Math.log,a=Math.LOG2E;r({target:"Math",stat:!0},{clz32:function(e){return(e>>>=0)?31-o(i(e+.5)*a):32}})},function(e,t,n){"use strict";var r=n(4),o=n(90),i=Math.cosh,a=Math.abs,c=Math.E;r({target:"Math",stat:!0,forced:!i||i(710)===Infinity},{cosh:function(e){var t=o(a(e)-1)+1;return(t+1/(t*c*c))*(c/2)}})},function(e,t,n){"use strict";var r=n(4),o=n(90);r({target:"Math",stat:!0,forced:o!=Math.expm1},{expm1:o})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{fround:n(294)})},function(e,t,n){"use strict";var r=n(126),o=Math.abs,i=Math.pow,a=i(2,-52),c=i(2,-23),u=i(2,127)*(2-c),s=i(2,-126);e.exports=Math.fround||function(e){var t,n,i=o(e),l=r(e);return iu||n!=n?l*Infinity:l*n}},function(e,t,n){"use strict";var r=n(4),o=Math.hypot,i=Math.abs,a=Math.sqrt;r({target:"Math",stat:!0,forced:!!o&&o(Infinity,NaN)!==Infinity},{hypot:function(e,t){for(var n,r,o=0,c=0,u=arguments.length,s=0;c0?(r=n/s)*r:n;return s===Infinity?Infinity:s*a(o)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=Math.imul;r({target:"Math",stat:!0,forced:o((function(){return-5!=i(4294967295,5)||2!=i.length}))},{imul:function(e,t){var n=+e,r=+t,o=65535&n,i=65535&r;return 0|o*i+((65535&n>>>16)*i+o*(65535&r>>>16)<<16>>>0)}})},function(e,t,n){"use strict";var r=n(4),o=Math.log,i=Math.LOG10E;r({target:"Math",stat:!0},{log10:function(e){return o(e)*i}})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{log1p:n(171)})},function(e,t,n){"use strict";var r=n(4),o=Math.log,i=Math.LN2;r({target:"Math",stat:!0},{log2:function(e){return o(e)/i}})},function(e,t,n){"use strict";n(4)({target:"Math",stat:!0},{sign:n(126)})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(90),a=Math.abs,c=Math.exp,u=Math.E;r({target:"Math",stat:!0,forced:o((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(e){return a(e=+e)<1?(i(e)-i(-e))/2:(c(e-1)-c(-e-1))*(u/2)}})},function(e,t,n){"use strict";var r=n(4),o=n(90),i=Math.exp;r({target:"Math",stat:!0},{tanh:function(e){var t=o(e=+e),n=o(-e);return t==Infinity?1:n==Infinity?-1:(t-n)/(i(e)+i(-e))}})},function(e,t,n){"use strict";n(49)(Math,"Math",!0)},function(e,t,n){"use strict";var r=n(4),o=Math.ceil,i=Math.floor;r({target:"Math",stat:!0},{trunc:function(e){return(e>0?i:o)(e)}})},function(e,t,n){"use strict";var r=n(10),o=n(7),i=n(70),a=n(25),c=n(20),u=n(37),s=n(89),l=n(40),f=n(5),d=n(48),p=n(52).f,h=n(23).f,g=n(16).f,v=n(62).trim,m=o.Number,y=m.prototype,b="Number"==u(d(y)),x=function(e){var t,n,r,o,i,a,c,u,s=l(e,!1);if("string"==typeof s&&s.length>2)if(43===(t=(s=v(s)).charCodeAt(0))||45===t){if(88===(n=s.charCodeAt(2))||120===n)return NaN}else if(48===t){switch(s.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+s}for(a=(i=s.slice(2)).length,c=0;co)return NaN;return parseInt(i,r)}return+s};if(i("Number",!m(" 0o1")||!m("0b1")||m("+0x1"))){for(var w,_=function(e){var t=arguments.length<1?0:e,n=this;return n instanceof _&&(b?f((function(){y.valueOf.call(n)})):"Number"!=u(n))?s(new m(x(t)),n,_):x(t)},E=r?p(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),k=0;E.length>k;k++)c(m,w=E[k])&&!c(_,w)&&g(_,w,h(m,w));_.prototype=y,y.constructor=_,a(o,"Number",_)}},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isFinite:n(308)})},function(e,t,n){"use strict";var r=n(7).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&r(e)}},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isInteger:n(172)})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},function(e,t,n){"use strict";var r=n(4),o=n(172),i=Math.abs;r({target:"Number",stat:!0},{isSafeInteger:function(e){return o(e)&&i(e)<=9007199254740991}})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){"use strict";n(4)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(e,t,n){"use strict";var r=n(4),o=n(315);r({target:"Number",stat:!0,forced:Number.parseFloat!=o},{parseFloat:o})},function(e,t,n){"use strict";var r=n(7),o=n(62).trim,i=n(91),a=r.parseFloat,c=1/a(i+"-0")!=-Infinity;e.exports=c?function(e){var t=o(String(e)),n=a(t);return 0===n&&"-"==t.charAt(0)?-0:n}:a},function(e,t,n){"use strict";var r=n(4),o=n(173);r({target:"Number",stat:!0,forced:Number.parseInt!=o},{parseInt:o})},function(e,t,n){"use strict";var r=n(4),o=n(38),i=n(318),a=n(125),c=n(5),u=1..toFixed,s=Math.floor,l=function f(e,t,n){return 0===t?n:t%2==1?f(e,t-1,n*e):f(e*e,t/2,n)};r({target:"Number",proto:!0,forced:u&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!c((function(){u.call({})}))},{toFixed:function(e){var t,n,r,c,u=i(this),f=o(e),d=[0,0,0,0,0,0],p="",h="0",g=function(e,t){for(var n=-1,r=t;++n<6;)r+=e*d[n],d[n]=r%1e7,r=s(r/1e7)},v=function(e){for(var t=6,n=0;--t>=0;)n+=d[t],d[t]=s(n/e),n=n%e*1e7},m=function(){for(var e=6,t="";--e>=0;)if(""!==t||0===e||0!==d[e]){var n=String(d[e]);t=""===t?n:t+a.call("0",7-n.length)+n}return t};if(f<0||f>20)throw RangeError("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return String(u);if(u<0&&(p="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*l(2,69,1))-69)<0?u*l(2,-t,1):u/l(2,t,1),n*=4503599627370496,(t=52-t)>0){for(g(0,n),r=f;r>=7;)g(1e7,0),r-=7;for(g(l(10,r,1),0),r=t-1;r>=23;)v(1<<23),r-=23;v(1<0?p+((c=h.length)<=f?"0."+a.call("0",f-c)+h:h.slice(0,c-f)+"."+h.slice(c-f)):p+h}})},function(e,t,n){"use strict";var r=n(37);e.exports=function(e){if("number"!=typeof e&&"Number"!=r(e))throw TypeError("Incorrect invocation");return+e}},function(e,t,n){"use strict";var r=n(4),o=n(320);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(e,t,n){"use strict";var r=n(10),o=n(5),i=n(71),a=n(114),c=n(81),u=n(18),s=n(66),l=Object.assign,f=Object.defineProperty;e.exports=!l||o((function(){if(r&&1!==l({b:1},l(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach((function(e){t[e]=e})),7!=l({},e)[n]||"abcdefghijklmnopqrst"!=i(l({},t)).join("")}))?function(e,t){for(var n=u(e),o=arguments.length,l=1,f=a.f,d=c.f;o>l;)for(var p,h=s(arguments[l++]),g=f?i(h).concat(f(h)):i(h),v=g.length,m=0;v>m;)p=g[m++],r&&!d.call(h,p)||(n[p]=h[p]);return n}:l},function(e,t,n){"use strict";n(4)({target:"Object",stat:!0,sham:!n(10)},{create:n(48)})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(27),u=n(16);o&&r({target:"Object",proto:!0,forced:i},{__defineGetter__:function(e,t){u.f(a(this),e,{get:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(4),o=n(10);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperties:n(156)})},function(e,t,n){"use strict";var r=n(4),o=n(10);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperty:n(16).f})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(27),u=n(16);o&&r({target:"Object",proto:!0,forced:i},{__defineSetter__:function(e,t){u.f(a(this),e,{set:c(t),enumerable:!0,configurable:!0})}})},function(e,t,n){"use strict";var r=n(4),o=n(174).entries;r({target:"Object",stat:!0},{entries:function(e){return o(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(76),i=n(5),a=n(8),c=n(56).onFreeze,u=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){u(1)})),sham:!o},{freeze:function(e){return u&&a(e)?u(c(e)):e}})},function(e,t,n){"use strict";var r=n(4),o=n(61),i=n(54);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return o(e,(function(e,n){i(t,e,n)}),undefined,!0),t}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(31),a=n(23).f,c=n(10),u=o((function(){a(1)}));r({target:"Object",stat:!0,forced:!c||u,sham:!c},{getOwnPropertyDescriptor:function(e,t){return a(i(e),t)}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(112),a=n(31),c=n(23),u=n(54);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=a(e),o=c.f,s=i(r),l={},f=0;s.length>f;)(n=o(r,t=s[f++]))!==undefined&&u(l,t,n);return l}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(158).f;r({target:"Object",stat:!0,forced:o((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:i})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(18),a=n(42),c=n(122);r({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!c},{getPrototypeOf:function(e){return a(i(e))}})},function(e,t,n){"use strict";n(4)({target:"Object",stat:!0},{is:n(175)})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(8),a=Object.isExtensible;r({target:"Object",stat:!0,forced:o((function(){a(1)}))},{isExtensible:function(e){return!!i(e)&&(!a||a(e))}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(8),a=Object.isFrozen;r({target:"Object",stat:!0,forced:o((function(){a(1)}))},{isFrozen:function(e){return!i(e)||!!a&&a(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(5),i=n(8),a=Object.isSealed;r({target:"Object",stat:!0,forced:o((function(){a(1)}))},{isSealed:function(e){return!i(e)||!!a&&a(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(18),i=n(71);r({target:"Object",stat:!0,forced:n(5)((function(){i(1)}))},{keys:function(e){return i(o(e))}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(40),u=n(42),s=n(23).f;o&&r({target:"Object",proto:!0,forced:i},{__lookupGetter__:function(e){var t,n=a(this),r=c(e,!0);do{if(t=s(n,r))return t.get}while(n=u(n))}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(92),a=n(18),c=n(40),u=n(42),s=n(23).f;o&&r({target:"Object",proto:!0,forced:i},{__lookupSetter__:function(e){var t,n=a(this),r=c(e,!0);do{if(t=s(n,r))return t.set}while(n=u(n))}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(56).onFreeze,a=n(76),c=n(5),u=Object.preventExtensions;r({target:"Object",stat:!0,forced:c((function(){u(1)})),sham:!a},{preventExtensions:function(e){return u&&o(e)?u(i(e)):e}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(56).onFreeze,a=n(76),c=n(5),u=Object.seal;r({target:"Object",stat:!0,forced:c((function(){u(1)})),sham:!a},{seal:function(e){return u&&o(e)?u(i(e)):e}})},function(e,t,n){"use strict";n(4)({target:"Object",stat:!0},{setPrototypeOf:n(55)})},function(e,t,n){"use strict";var r=n(120),o=n(25),i=n(344);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(e,t,n){"use strict";var r=n(120),o=n(84);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},function(e,t,n){"use strict";var r=n(4),o=n(174).values;r({target:"Object",stat:!0},{values:function(e){return o(e)}})},function(e,t,n){"use strict";var r=n(4),o=n(173);r({global:!0,forced:parseInt!=o},{parseInt:o})},function(e,t,n){"use strict";var r,o,i,a,c=n(4),u=n(43),s=n(7),l=n(41),f=n(176),d=n(25),p=n(75),h=n(49),g=n(59),v=n(8),m=n(27),y=n(60),b=n(37),x=n(110),w=n(61),_=n(85),E=n(45),k=n(127).set,S=n(178),C=n(179),N=n(348),A=n(128),T=n(180),O=n(33),I=n(70),M=n(15),L=n(116),V=M("species"),R="Promise",P=O.get,B=O.set,D=O.getterFor(R),F=f,j=s.TypeError,K=s.document,z=s.process,Y=l("fetch"),U=A.f,$=U,H="process"==b(z),W=!!(K&&K.createEvent&&s.dispatchEvent),q=I(R,(function(){if(!(x(F)!==String(F))){if(66===L)return!0;if(!H&&"function"!=typeof PromiseRejectionEvent)return!0}if(u&&!F.prototype["finally"])return!0;if(L>=51&&/native code/.test(F))return!1;var e=F.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[V]=t,!(e.then((function(){}))instanceof t)})),G=q||!_((function(e){F.all(e)["catch"]((function(){}))})),X=function(e){var t;return!(!v(e)||"function"!=typeof(t=e.then))&&t},Z=function(e,t,n){if(!t.notified){t.notified=!0;var r=t.reactions;S((function(){for(var o=t.value,i=1==t.state,a=0;r.length>a;){var c,u,s,l=r[a++],f=i?l.ok:l.fail,d=l.resolve,p=l.reject,h=l.domain;try{f?(i||(2===t.rejection&&te(e,t),t.rejection=1),!0===f?c=o:(h&&h.enter(),c=f(o),h&&(h.exit(),s=!0)),c===l.promise?p(j("Promise-chain cycle")):(u=X(c))?u.call(c,d,p):d(c)):p(o)}catch(g){h&&!s&&h.exit(),p(g)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&J(e,t)}))}},Q=function(e,t,n){var r,o;W?((r=K.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),s.dispatchEvent(r)):r={promise:t,reason:n},(o=s["on"+e])?o(r):"unhandledrejection"===e&&N("Unhandled promise rejection",n)},J=function(e,t){k.call(s,(function(){var n,r=t.value;if(ee(t)&&(n=T((function(){H?z.emit("unhandledRejection",r,e):Q("unhandledrejection",e,r)})),t.rejection=H||ee(t)?2:1,n.error))throw n.value}))},ee=function(e){return 1!==e.rejection&&!e.parent},te=function(e,t){k.call(s,(function(){H?z.emit("rejectionHandled",e):Q("rejectionhandled",e,t.value)}))},ne=function(e,t,n,r){return function(o){e(t,n,o,r)}},re=function(e,t,n,r){t.done||(t.done=!0,r&&(t=r),t.value=n,t.state=2,Z(e,t,!0))},oe=function ie(e,t,n,r){if(!t.done){t.done=!0,r&&(t=r);try{if(e===n)throw j("Promise can't be resolved itself");var o=X(n);o?S((function(){var r={done:!1};try{o.call(n,ne(ie,e,r,t),ne(re,e,r,t))}catch(i){re(e,r,i,t)}})):(t.value=n,t.state=1,Z(e,t,!1))}catch(i){re(e,{done:!1},i,t)}}};q&&(F=function(e){y(this,F,R),m(e),r.call(this);var t=P(this);try{e(ne(oe,this,t),ne(re,this,t))}catch(n){re(this,t,n)}},(r=function(e){B(this,{type:R,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:undefined})}).prototype=p(F.prototype,{then:function(e,t){var n=D(this),r=U(E(this,F));return r.ok="function"!=typeof e||e,r.fail="function"==typeof t&&t,r.domain=H?z.domain:undefined,n.parent=!0,n.reactions.push(r),0!=n.state&&Z(this,n,!1),r.promise},"catch":function(e){return this.then(undefined,e)}}),o=function(){var e=new r,t=P(e);this.promise=e,this.resolve=ne(oe,e,t),this.reject=ne(re,e,t)},A.f=U=function(e){return e===F||e===i?new o(e):$(e)},u||"function"!=typeof f||(a=f.prototype.then,d(f.prototype,"then",(function(e,t){var n=this;return new F((function(e,t){a.call(n,e,t)})).then(e,t)}),{unsafe:!0}),"function"==typeof Y&&c({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return C(F,Y.apply(s,arguments))}}))),c({global:!0,wrap:!0,forced:q},{Promise:F}),h(F,R,!1,!0),g(R),i=l(R),c({target:R,stat:!0,forced:q},{reject:function(e){var t=U(this);return t.reject.call(undefined,e),t.promise}}),c({target:R,stat:!0,forced:u||q},{resolve:function(e){return C(u&&this===i?F:this,e)}}),c({target:R,stat:!0,forced:G},{all:function(e){var t=this,n=U(t),r=n.resolve,o=n.reject,i=T((function(){var n=m(t.resolve),i=[],a=0,c=1;w(e,(function(e){var u=a++,s=!1;i.push(undefined),c++,n.call(t,e).then((function(e){s||(s=!0,i[u]=e,--c||r(i))}),o)})),--c||r(i)}));return i.error&&o(i.value),n.promise},race:function(e){var t=this,n=U(t),r=n.reject,o=T((function(){var o=m(t.resolve);w(e,(function(e){o.call(t,e).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},function(e,t,n){"use strict";var r=n(7);e.exports=function(e,t){var n=r.console;n&&n.error&&(1===arguments.length?n.error(e):n.error(e,t))}},function(e,t,n){"use strict";var r=n(4),o=n(27),i=n(128),a=n(180),c=n(61);r({target:"Promise",stat:!0},{allSettled:function(e){var t=this,n=i.f(t),r=n.resolve,u=n.reject,s=a((function(){var n=o(t.resolve),i=[],a=0,u=1;c(e,(function(e){var o=a++,c=!1;i.push(undefined),u++,n.call(t,e).then((function(e){c||(c=!0,i[o]={status:"fulfilled",value:e},--u||r(i))}),(function(e){c||(c=!0,i[o]={status:"rejected",reason:e},--u||r(i))}))})),--u||r(i)}));return s.error&&u(s.value),n.promise}})},function(e,t,n){"use strict";var r=n(4),o=n(43),i=n(176),a=n(5),c=n(41),u=n(45),s=n(179),l=n(25);r({target:"Promise",proto:!0,real:!0,forced:!!i&&a((function(){i.prototype["finally"].call({then:function(){}},(function(){}))}))},{"finally":function(e){var t=u(this,c("Promise")),n="function"==typeof e;return this.then(n?function(n){return s(t,e()).then((function(){return n}))}:e,n?function(n){return s(t,e()).then((function(){throw n}))}:e)}}),o||"function"!=typeof i||i.prototype["finally"]||l(i.prototype,"finally",c("Promise").prototype["finally"])},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(27),a=n(11),c=n(5),u=o("Reflect","apply"),s=Function.apply;r({target:"Reflect",stat:!0,forced:!c((function(){u((function(){}))}))},{apply:function(e,t,n){return i(e),a(n),u?u(e,t,n):s.call(e,t,n)}})},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(27),a=n(11),c=n(8),u=n(48),s=n(169),l=n(5),f=o("Reflect","construct"),d=l((function(){function e(){}return!(f((function(){}),[],e)instanceof e)})),p=!l((function(){f((function(){}))})),h=d||p;r({target:"Reflect",stat:!0,forced:h,sham:h},{construct:function(e,t){i(e),a(t);var n=arguments.length<3?e:i(arguments[2]);if(p&&!d)return f(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return r.push.apply(r,t),new(s.apply(e,r))}var o=n.prototype,l=u(c(o)?o:Object.prototype),h=Function.apply.call(e,l,t);return c(h)?h:l}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(11),a=n(40),c=n(16);r({target:"Reflect",stat:!0,forced:n(5)((function(){Reflect.defineProperty(c.f({},1,{value:1}),1,{value:2})})),sham:!o},{defineProperty:function(e,t,n){i(e);var r=a(t,!0);i(n);try{return c.f(e,r,n),!0}catch(o){return!1}}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(23).f;r({target:"Reflect",stat:!0},{deleteProperty:function(e,t){var n=i(o(e),t);return!(n&&!n.configurable)&&delete e[t]}})},function(e,t,n){"use strict";var r=n(4),o=n(8),i=n(11),a=n(20),c=n(23),u=n(42);r({target:"Reflect",stat:!0},{get:function s(e,t){var n,r,l=arguments.length<3?e:arguments[2];return i(e)===l?e[t]:(n=c.f(e,t))?a(n,"value")?n.value:n.get===undefined?undefined:n.get.call(l):o(r=u(e))?s(r,t,l):void 0}})},function(e,t,n){"use strict";var r=n(4),o=n(10),i=n(11),a=n(23);r({target:"Reflect",stat:!0,sham:!o},{getOwnPropertyDescriptor:function(e,t){return a.f(i(e),t)}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(42);r({target:"Reflect",stat:!0,sham:!n(122)},{getPrototypeOf:function(e){return i(o(e))}})},function(e,t,n){"use strict";n(4)({target:"Reflect",stat:!0},{has:function(e,t){return t in e}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=Object.isExtensible;r({target:"Reflect",stat:!0},{isExtensible:function(e){return o(e),!i||i(e)}})},function(e,t,n){"use strict";n(4)({target:"Reflect",stat:!0},{ownKeys:n(112)})},function(e,t,n){"use strict";var r=n(4),o=n(41),i=n(11);r({target:"Reflect",stat:!0,sham:!n(76)},{preventExtensions:function(e){i(e);try{var t=o("Object","preventExtensions");return t&&t(e),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(8),a=n(20),c=n(5),u=n(16),s=n(23),l=n(42),f=n(51);r({target:"Reflect",stat:!0,forced:c((function(){var e=u.f({},"a",{configurable:!0});return!1!==Reflect.set(l(e),"a",1,e)}))},{set:function d(e,t,n){var r,c,p=arguments.length<4?e:arguments[3],h=s.f(o(e),t);if(!h){if(i(c=l(e)))return d(c,t,n,p);h=f(0)}if(a(h,"value")){if(!1===h.writable||!i(p))return!1;if(r=s.f(p,t)){if(r.get||r.set||!1===r.writable)return!1;r.value=n,u.f(p,t,r)}else u.f(p,t,f(0,n));return!0}return h.set!==undefined&&(h.set.call(p,n),!0)}})},function(e,t,n){"use strict";var r=n(4),o=n(11),i=n(166),a=n(55);a&&r({target:"Reflect",stat:!0},{setPrototypeOf:function(e,t){o(e),i(t);try{return a(e,t),!0}catch(n){return!1}}})},function(e,t,n){"use strict";var r=n(10),o=n(7),i=n(70),a=n(89),c=n(16).f,u=n(52).f,s=n(93),l=n(77),f=n(94),d=n(25),p=n(5),h=n(33).set,g=n(59),v=n(15)("match"),m=o.RegExp,y=m.prototype,b=/a/g,x=/a/g,w=new m(b)!==b,_=f.UNSUPPORTED_Y;if(r&&i("RegExp",!w||_||p((function(){return x[v]=!1,m(b)!=b||m(x)==x||"/a/i"!=m(b,"i")})))){for(var E=function(e,t){var n,r=this instanceof E,o=s(e),i=t===undefined;if(!r&&o&&e.constructor===E&&i)return e;w?o&&!i&&(e=e.source):e instanceof E&&(i&&(t=l.call(e)),e=e.source),_&&(n=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,""));var c=a(w?new m(e,t):m(e,t),r?this:y,E);return _&&n&&h(c,{sticky:n}),c},k=function(e){e in E||c(E,e,{configurable:!0,get:function(){return m[e]},set:function(t){m[e]=t}})},S=u(m),C=0;S.length>C;)k(S[C++]);y.constructor=E,E.prototype=y,d(o,"RegExp",E)}g("RegExp")},function(e,t,n){"use strict";var r=n(10),o=n(16),i=n(77),a=n(94).UNSUPPORTED_Y;r&&("g"!=/./g.flags||a)&&o.f(RegExp.prototype,"flags",{configurable:!0,get:i})},function(e,t,n){"use strict";var r=n(10),o=n(94).UNSUPPORTED_Y,i=n(16).f,a=n(33).get,c=RegExp.prototype;r&&o&&i(RegExp.prototype,"sticky",{configurable:!0,get:function(){if(this===c)return undefined;if(this instanceof RegExp)return!!a(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}})},function(e,t,n){"use strict";n(129);var r,o,i=n(4),a=n(8),c=(r=!1,(o=/[ac]/).exec=function(){return r=!0,/./.exec.apply(this,arguments)},!0===o.test("abc")&&r),u=/./.test;i({target:"RegExp",proto:!0,forced:!c},{test:function(e){if("function"!=typeof this.exec)return u.call(this,e);var t=this.exec(e);if(null!==t&&!a(t))throw new Error("RegExp exec method returned something other than an Object or null");return!!t}})},function(e,t,n){"use strict";var r=n(25),o=n(11),i=n(5),a=n(77),c=RegExp.prototype,u=c.toString,s=i((function(){return"/a/b"!=u.call({source:"a",flags:"b"})})),l="toString"!=u.name;(s||l)&&r(RegExp.prototype,"toString",(function(){var e=o(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(n===undefined&&e instanceof RegExp&&!("flags"in c)?a.call(e):n)}),{unsafe:!0})},function(e,t,n){"use strict";var r=n(88),o=n(170);e.exports=r("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),o)},function(e,t,n){"use strict";var r=n(4),o=n(130).codeAt;r({target:"String",proto:!0},{codePointAt:function(e){return o(this,e)}})},function(e,t,n){"use strict";var r,o=n(4),i=n(23).f,a=n(12),c=n(131),u=n(24),s=n(132),l=n(43),f="".endsWith,d=Math.min,p=s("endsWith");o({target:"String",proto:!0,forced:!!(l||p||(r=i(String.prototype,"endsWith"),!r||r.writable))&&!p},{endsWith:function(e){var t=String(u(this));c(e);var n=arguments.length>1?arguments[1]:undefined,r=a(t.length),o=n===undefined?r:d(a(n),r),i=String(e);return f?f.call(t,i,o):t.slice(o-i.length,o)===i}})},function(e,t,n){"use strict";var r=n(4),o=n(47),i=String.fromCharCode,a=String.fromCodePoint;r({target:"String",stat:!0,forced:!!a&&1!=a.length},{fromCodePoint:function(e){for(var t,n=[],r=arguments.length,a=0;r>a;){if(t=+arguments[a++],o(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?i(t):i(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}})},function(e,t,n){"use strict";var r=n(4),o=n(131),i=n(24);r({target:"String",proto:!0,forced:!n(132)("includes")},{includes:function(e){return!!~String(i(this)).indexOf(o(e),arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(130).charAt,o=n(33),i=n(121),a=o.set,c=o.getterFor("String Iterator");i(String,"String",(function(e){a(this,{type:"String Iterator",string:String(e),index:0})}),(function(){var e,t=c(this),n=t.string,o=t.index;return o>=n.length?{value:undefined,done:!0}:(e=r(n,o),t.index+=e.length,{value:e,done:!1})}))},function(e,t,n){"use strict";var r=n(96),o=n(11),i=n(12),a=n(24),c=n(97),u=n(98);r("match",1,(function(e,t,n){return[function(t){var n=a(this),r=t==undefined?undefined:t[e];return r!==undefined?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var a=o(e),s=String(this);if(!a.global)return u(a,s);var l=a.unicode;a.lastIndex=0;for(var f,d=[],p=0;null!==(f=u(a,s));){var h=String(f[0]);d[p]=h,""===h&&(a.lastIndex=c(s,i(a.lastIndex),l)),p++}return 0===p?null:d}]}))},function(e,t,n){"use strict";var r=n(4),o=n(164),i=n(24),a=n(12),c=n(27),u=n(11),s=n(37),l=n(93),f=n(77),d=n(32),p=n(5),h=n(15),g=n(45),v=n(97),m=n(33),y=n(43),b=h("matchAll"),x=m.set,w=m.getterFor("RegExp String Iterator"),_=RegExp.prototype,E=_.exec,k="".matchAll,S=!!k&&!p((function(){"a".matchAll(/./)})),C=o((function(e,t,n,r){x(this,{type:"RegExp String Iterator",regexp:e,string:t,global:n,unicode:r,done:!1})}),"RegExp String",(function(){var e=w(this);if(e.done)return{value:undefined,done:!0};var t=e.regexp,n=e.string,r=function(e,t){var n,r=e.exec;if("function"==typeof r){if("object"!=typeof(n=r.call(e,t)))throw TypeError("Incorrect exec result");return n}return E.call(e,t)}(t,n);return null===r?{value:undefined,done:e.done=!0}:e.global?(""==String(r[0])&&(t.lastIndex=v(n,a(t.lastIndex),e.unicode)),{value:r,done:!1}):(e.done=!0,{value:r,done:!1})})),N=function(e){var t,n,r,o,i,c,s=u(this),l=String(e);return t=g(s,RegExp),(n=s.flags)===undefined&&s instanceof RegExp&&!("flags"in _)&&(n=f.call(s)),r=n===undefined?"":String(n),o=new t(t===RegExp?s.source:s,r),i=!!~r.indexOf("g"),c=!!~r.indexOf("u"),o.lastIndex=a(s.lastIndex),new C(o,l,i,c)};r({target:"String",proto:!0,forced:S},{matchAll:function(e){var t,n,r,o=i(this);if(null!=e){if(l(e)&&!~String(i("flags"in _?e.flags:f.call(e))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(S)return k.apply(o,arguments);if((n=e[b])===undefined&&y&&"RegExp"==s(e)&&(n=N),null!=n)return c(n).call(e,o)}else if(S)return k.apply(o,arguments);return t=String(o),r=new RegExp(e,"g"),y?N.call(r,t):r[b](t)}}),y||b in _||d(_,b,N)},function(e,t,n){"use strict";var r=n(4),o=n(124).end;r({target:"String",proto:!0,forced:n(181)},{padEnd:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(124).start;r({target:"String",proto:!0,forced:n(181)},{padStart:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(31),i=n(12);r({target:"String",stat:!0},{raw:function(e){for(var t=o(e.raw),n=i(t.length),r=arguments.length,a=[],c=0;n>c;)a.push(String(t[c++])),c]*>)/g,g=/\$([$&'`]|\d\d?)/g;r("replace",2,(function(e,t,n,r){var v=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,m=r.REPLACE_KEEPS_$0,y=v?"$":"$0";return[function(n,r){var o=u(this),i=n==undefined?undefined:n[e];return i!==undefined?i.call(n,o,r):t.call(String(o),n,r)},function(e,r){if(!v&&m||"string"==typeof r&&-1===r.indexOf(y)){var i=n(t,e,this,r);if(i.done)return i.value}var u=o(e),p=String(this),h="function"==typeof r;h||(r=String(r));var g=u.global;if(g){var x=u.unicode;u.lastIndex=0}for(var w=[];;){var _=l(u,p);if(null===_)break;if(w.push(_),!g)break;""===String(_[0])&&(u.lastIndex=s(p,a(u.lastIndex),x))}for(var E,k="",S=0,C=0;C=S&&(k+=p.slice(S,A)+L,S=A+N.length)}return k+p.slice(S)}];function b(e,n,r,o,a,c){var u=r+e.length,s=o.length,l=g;return a!==undefined&&(a=i(a),l=h),t.call(c,l,(function(t,i){var c;switch(i.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,r);case"'":return n.slice(u);case"<":c=a[i.slice(1,-1)];break;default:var l=+i;if(0===l)return t;if(l>s){var f=p(l/10);return 0===f?t:f<=s?o[f-1]===undefined?i.charAt(1):o[f-1]+i.charAt(1):t}c=o[l-1]}return c===undefined?"":c}))}}))},function(e,t,n){"use strict";var r=n(96),o=n(11),i=n(24),a=n(175),c=n(98);r("search",1,(function(e,t,n){return[function(t){var n=i(this),r=t==undefined?undefined:t[e];return r!==undefined?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var i=o(e),u=String(this),s=i.lastIndex;a(s,0)||(i.lastIndex=0);var l=c(i,u);return a(i.lastIndex,s)||(i.lastIndex=s),null===l?-1:l.index}]}))},function(e,t,n){"use strict";var r=n(96),o=n(93),i=n(11),a=n(24),c=n(45),u=n(97),s=n(12),l=n(98),f=n(95),d=n(5),p=[].push,h=Math.min,g=!d((function(){return!RegExp(4294967295,"y")}));r("split",2,(function(e,t,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var r=String(a(this)),i=n===undefined?4294967295:n>>>0;if(0===i)return[];if(e===undefined)return[r];if(!o(e))return t.call(r,e,i);for(var c,u,s,l=[],d=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),h=0,g=new RegExp(e.source,d+"g");(c=f.call(g,r))&&!((u=g.lastIndex)>h&&(l.push(r.slice(h,c.index)),c.length>1&&c.index=i));)g.lastIndex===c.index&&g.lastIndex++;return h===r.length?!s&&g.test("")||l.push(""):l.push(r.slice(h)),l.length>i?l.slice(0,i):l}:"0".split(undefined,0).length?function(e,n){return e===undefined&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var o=a(this),i=t==undefined?undefined:t[e];return i!==undefined?i.call(t,o,n):r.call(String(o),t,n)},function(e,o){var a=n(r,e,this,o,r!==t);if(a.done)return a.value;var f=i(e),d=String(this),p=c(f,RegExp),v=f.unicode,m=(f.ignoreCase?"i":"")+(f.multiline?"m":"")+(f.unicode?"u":"")+(g?"y":"g"),y=new p(g?f:"^(?:"+f.source+")",m),b=o===undefined?4294967295:o>>>0;if(0===b)return[];if(0===d.length)return null===l(y,d)?[d]:[];for(var x=0,w=0,_=[];w1?arguments[1]:undefined,t.length)),r=String(e);return f?f.call(t,r,n):t.slice(n,n+r.length)===r}})},function(e,t,n){"use strict";var r=n(4),o=n(62).trim;r({target:"String",proto:!0,forced:n(133)("trim")},{trim:function(){return o(this)}})},function(e,t,n){"use strict";var r=n(4),o=n(62).end,i=n(133)("trimEnd"),a=i?function(){return o(this)}:"".trimEnd;r({target:"String",proto:!0,forced:i},{trimEnd:a,trimRight:a})},function(e,t,n){"use strict";var r=n(4),o=n(62).start,i=n(133)("trimStart"),a=i?function(){return o(this)}:"".trimStart;r({target:"String",proto:!0,forced:i},{trimStart:a,trimLeft:a})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("anchor")},{anchor:function(e){return o(this,"a","name",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("big")},{big:function(){return o(this,"big","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("blink")},{blink:function(){return o(this,"blink","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("bold")},{bold:function(){return o(this,"b","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("fixed")},{fixed:function(){return o(this,"tt","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("fontcolor")},{fontcolor:function(e){return o(this,"font","color",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("fontsize")},{fontsize:function(e){return o(this,"font","size",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("italics")},{italics:function(){return o(this,"i","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("link")},{link:function(e){return o(this,"a","href",e)}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("small")},{small:function(){return o(this,"small","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("strike")},{strike:function(){return o(this,"strike","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("sub")},{sub:function(){return o(this,"sub","","")}})},function(e,t,n){"use strict";var r=n(4),o=n(34);r({target:"String",proto:!0,forced:n(35)("sup")},{sup:function(){return o(this,"sup","","")}})},function(e,t,n){"use strict";n(46)("Float32",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";var r=n(38);e.exports=function(e){var t=r(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},function(e,t,n){"use strict";n(46)("Float64",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Int8",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Int16",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Int32",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}}),!0)},function(e,t,n){"use strict";n(46)("Uint16",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";n(46)("Uint32",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},function(e,t,n){"use strict";var r=n(13),o=n(160),i=r.aTypedArray;(0,r.exportTypedArrayMethod)("copyWithin",(function(e,t){return o.call(i(this),e,t,arguments.length>2?arguments[2]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).every,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("every",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(117),i=r.aTypedArray;(0,r.exportTypedArrayMethod)("fill",(function(e){return o.apply(i(this),arguments)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).filter,i=n(45),a=r.aTypedArray,c=r.aTypedArrayConstructor;(0,r.exportTypedArrayMethod)("filter",(function(e){for(var t=o(a(this),e,arguments.length>1?arguments[1]:undefined),n=i(this,this.constructor),r=0,u=t.length,s=new(c(n))(u);u>r;)s[r]=t[r++];return s}))},function(e,t,n){"use strict";var r=n(13),o=n(21).find,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("find",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).findIndex,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("findIndex",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).forEach,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("forEach",(function(e){o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(134);(0,n(13).exportTypedArrayStaticMethod)("from",n(183),r)},function(e,t,n){"use strict";var r=n(13),o=n(69).includes,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("includes",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(69).indexOf,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("indexOf",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(7),o=n(13),i=n(163),a=n(15)("iterator"),c=r.Uint8Array,u=i.values,s=i.keys,l=i.entries,f=o.aTypedArray,d=o.exportTypedArrayMethod,p=c&&c.prototype[a],h=!!p&&("values"==p.name||p.name==undefined),g=function(){return u.call(f(this))};d("entries",(function(){return l.call(f(this))})),d("keys",(function(){return s.call(f(this))})),d("values",g,!h),d(a,g,!h)},function(e,t,n){"use strict";var r=n(13),o=r.aTypedArray,i=r.exportTypedArrayMethod,a=[].join;i("join",(function(e){return a.apply(o(this),arguments)}))},function(e,t,n){"use strict";var r=n(13),o=n(167),i=r.aTypedArray;(0,r.exportTypedArrayMethod)("lastIndexOf",(function(e){return o.apply(i(this),arguments)}))},function(e,t,n){"use strict";var r=n(13),o=n(21).map,i=n(45),a=r.aTypedArray,c=r.aTypedArrayConstructor;(0,r.exportTypedArrayMethod)("map",(function(e){return o(a(this),e,arguments.length>1?arguments[1]:undefined,(function(e,t){return new(c(i(e,e.constructor)))(t)}))}))},function(e,t,n){"use strict";var r=n(13),o=n(134),i=r.aTypedArrayConstructor;(0,r.exportTypedArrayStaticMethod)("of",(function(){for(var e=0,t=arguments.length,n=new(i(this))(t);t>e;)n[e]=arguments[e++];return n}),o)},function(e,t,n){"use strict";var r=n(13),o=n(86).left,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("reduce",(function(e){return o(i(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=n(86).right,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("reduceRight",(function(e){return o(i(this),e,arguments.length,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=r.aTypedArray,i=r.exportTypedArrayMethod,a=Math.floor;i("reverse",(function(){for(var e,t=o(this).length,n=a(t/2),r=0;r1?arguments[1]:undefined,1),n=this.length,r=a(e),c=o(r.length),s=0;if(c+t>n)throw RangeError("Wrong length");for(;si;)l[i]=n[i++];return l}),i((function(){new Int8Array(1).slice()})))},function(e,t,n){"use strict";var r=n(13),o=n(21).some,i=r.aTypedArray;(0,r.exportTypedArrayMethod)("some",(function(e){return o(i(this),e,arguments.length>1?arguments[1]:undefined)}))},function(e,t,n){"use strict";var r=n(13),o=r.aTypedArray,i=r.exportTypedArrayMethod,a=[].sort;i("sort",(function(e){return a.call(o(this),e)}))},function(e,t,n){"use strict";var r=n(13),o=n(12),i=n(47),a=n(45),c=r.aTypedArray;(0,r.exportTypedArrayMethod)("subarray",(function(e,t){var n=c(this),r=n.length,u=i(e,r);return new(a(n,n.constructor))(n.buffer,n.byteOffset+u*n.BYTES_PER_ELEMENT,o((t===undefined?r:i(t,r))-u))}))},function(e,t,n){"use strict";var r=n(7),o=n(13),i=n(5),a=r.Int8Array,c=o.aTypedArray,u=o.exportTypedArrayMethod,s=[].toLocaleString,l=[].slice,f=!!a&&i((function(){s.call(new a(1))}));u("toLocaleString",(function(){return s.apply(f?l.call(c(this)):c(this),arguments)}),i((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!i((function(){a.prototype.toLocaleString.call([1,2])})))},function(e,t,n){"use strict";var r=n(13).exportTypedArrayMethod,o=n(5),i=n(7).Uint8Array,a=i&&i.prototype||{},c=[].toString,u=[].join;o((function(){c.call({})}))&&(c=function(){return u.call(this)});var s=a.toString!=c;r("toString",c,s)},function(e,t,n){"use strict";var r,o=n(7),i=n(75),a=n(56),c=n(88),u=n(184),s=n(8),l=n(33).enforce,f=n(151),d=!o.ActiveXObject&&"ActiveXObject"in o,p=Object.isExtensible,h=function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}},g=e.exports=c("WeakMap",h,u);if(f&&d){r=u.getConstructor(h,"WeakMap",!0),a.REQUIRED=!0;var v=g.prototype,m=v["delete"],y=v.has,b=v.get,x=v.set;i(v,{"delete":function(e){if(s(e)&&!p(e)){var t=l(this);return t.frozen||(t.frozen=new r),m.call(this,e)||t.frozen["delete"](e)}return m.call(this,e)},has:function(e){if(s(e)&&!p(e)){var t=l(this);return t.frozen||(t.frozen=new r),y.call(this,e)||t.frozen.has(e)}return y.call(this,e)},get:function(e){if(s(e)&&!p(e)){var t=l(this);return t.frozen||(t.frozen=new r),y.call(this,e)?b.call(this,e):t.frozen.get(e)}return b.call(this,e)},set:function(e,t){if(s(e)&&!p(e)){var n=l(this);n.frozen||(n.frozen=new r),y.call(this,e)?x.call(this,e,t):n.frozen.set(e,t)}else x.call(this,e,t);return this}})}},function(e,t,n){"use strict";n(88)("WeakSet",(function(e){return function(){return e(this,arguments.length?arguments[0]:undefined)}}),n(184))},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(127);r({global:!0,bind:!0,enumerable:!0,forced:!o.setImmediate||!o.clearImmediate},{setImmediate:i.set,clearImmediate:i.clear})},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(178),a=n(37),c=o.process,u="process"==a(c);r({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(e){var t=u&&c.domain;i(t?t.bind(e):e)}})},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(83),a=[].slice,c=function(e){return function(t,n){var r=arguments.length>2,o=r?a.call(arguments,2):undefined;return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,o)}:t,n)}};r({global:!0,bind:!0,forced:/MSIE .\./.test(i)},{setTimeout:c(o.setTimeout),setInterval:c(o.setInterval)})},function(e,t,n){"use strict";var r=function(e){var t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(C){c=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new E(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=x(a,n);if(c){if(c===l)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var u=s(e,t,n);if("normal"===u.type){if(r=n.done?"completed":"suspendedYield",u.arg===l)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r="completed",n.method="throw",n.arg=u.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(C){return{type:"throw",arg:C}}}e.wrap=u;var l={};function f(){}function d(){}function p(){}var h={};h[o]=function(){return this};var g=Object.getPrototypeOf,v=g&&g(g(k([])));v&&v!==t&&n.call(v,o)&&(h=v);var m=p.prototype=f.prototype=Object.create(h);function y(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){var r;this._invoke=function(o,i){function a(){return new t((function(r,a){!function c(r,o,i,a){var u=s(e[r],e,o);if("throw"!==u.type){var l=u.arg,f=l.value;return f&&"object"==typeof f&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){c("next",e,i,a)}),(function(e){c("throw",e,i,a)})):t.resolve(f).then((function(e){l.value=e,i(l)}),(function(e){return c("throw",e,i,a)}))}a(u.arg)}(o,i,r,a)}))}return r=r?r.then(a,a):a()}}function x(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator["return"]&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(w,this),this.reset(!0)}function k(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),_(n),l}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;_(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:k(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}(e.exports);try{regeneratorRuntime=r}catch(o){Function("r","regeneratorRuntime = r")(r)}},function(e,t,n){"use strict";!function(t,n){var r,o,i=t.html5||{},a=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,c=/^(?: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,u=0,s={};function l(){var e=h.elements;return"string"==typeof e?e.split(" "):e}function f(e){var t=s[e._html5shiv];return t||(t={},u++,e._html5shiv=u,s[u]=t),t}function d(e,t,r){return t||(t=n),o?t.createElement(e):(r||(r=f(t)),!(i=r.cache[e]?r.cache[e].cloneNode():c.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e)).canHaveChildren||a.test(e)||i.tagUrn?i:r.frag.appendChild(i));var i}function p(e){e||(e=n);var t=f(e);return!h.shivCSS||r||t.hasCSS||(t.hasCSS=!!function(e,t){var n=e.createElement("p"),r=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),o||function(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return h.shivMethods?d(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/[\w\-:]+/g,(function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'}))+");return n}")(h,t.frag)}(e,t),e}!function(){try{var e=n.createElement("a");e.innerHTML="",r="hidden"in e,o=1==e.childNodes.length||function(){n.createElement("a");var e=n.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(t){r=!0,o=!0}}();var h={elements:i.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3",shivCSS:!1!==i.shivCSS,supportsUnknownElements:o,shivMethods:!1!==i.shivMethods,type:"default",shivDocument:p,createElement:d,createDocumentFragment:function(e,t){if(e||(e=n),o)return e.createDocumentFragment();for(var r=(t=t||f(e)).frag.cloneNode(),i=0,a=l(),c=a.length;i3?c(a):null,b=String(a.key),x=String(a.char),w=a.location,_=a.keyCode||(a.keyCode=b)&&b.charCodeAt(0)||0,E=a.charCode||(a.charCode=x)&&x.charCodeAt(0)||0,k=a.bubbles,S=a.cancelable,C=a.repeat,N=a.locale,A=a.view||e;if(a.which||(a.which=a.keyCode),"initKeyEvent"in d)d.initKeyEvent(t,k,S,A,p,g,h,v,_,E);else if(0>>0),t=Element.prototype,n=t.querySelector,r=t.querySelectorAll;function o(t,n,r){t.setAttribute(e,null);var o=n.call(t,String(r).replace(/(^|,\s*)(:scope([ >]|$))/g,(function(t,n,r,o){return n+"["+e+"]"+(o||" ")})));return t.removeAttribute(e),o}t.querySelector=function(e){return o(this,n,e)},t.querySelectorAll=function(e){return o(this,r,e)}}()}}(window),function(e){var t=e.WeakMap||function(){var e,t=0,n=!1,r=!1;function o(t,o,i){r=i,n=!1,e=undefined,t.dispatchEvent(o)}function i(e){this.value=e}function c(){t++,this.__ce__=new a("@DOMMap:"+t+Math.random())}return i.prototype.handleEvent=function(t){n=!0,r?t.currentTarget.removeEventListener(t.type,this,!1):e=this.value},c.prototype={constructor:c,"delete":function(e){return o(e,this.__ce__,!0),n},get:function(t){o(t,this.__ce__,!1);var n=e;return e=undefined,n},has:function(e){return o(e,this.__ce__,!1),n},set:function(e,t){return o(e,this.__ce__,!0),e.addEventListener(this.__ce__.type,new i(t),!1),this}},c}();function n(){}function r(e,t,n){function o(e){o.once&&(e.currentTarget.removeEventListener(e.type,t,o),o.removed=!0),o.passive&&(e.preventDefault=r.preventDefault),"function"==typeof o.callback?o.callback.call(this,e):o.callback&&o.callback.handleEvent(e),o.passive&&delete e.preventDefault}return o.type=e,o.callback=t,o.capture=!!n.capture,o.passive=!!n.passive,o.once=!!n.once,o.removed=!1,o}n.prototype=(Object.create||Object)(null),r.preventDefault=function(){};var o,i,a=e.CustomEvent,c=e.dispatchEvent,u=e.addEventListener,s=e.removeEventListener,l=0,f=function(){l++},d=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},p=function(e){return"".concat(e.capture?"1":"0",e.passive?"1":"0",e.once?"1":"0")};try{u("_",f,{once:!0}),c(new a("_")),c(new a("_")),s("_",f,{once:!0})}catch(h){}1!==l&&(i=new t,o=function(e){if(e){var t=e.prototype;t.addEventListener=function(e){return function(t,o,a){if(a&&"boolean"!=typeof a){var c,u,s,l=i.get(this),f=p(a);l||i.set(this,l=new n),t in l||(l[t]={handler:[],wrap:[]}),u=l[t],(c=d.call(u.handler,o))<0?(c=u.handler.push(o)-1,u.wrap[c]=s=new n):s=u.wrap[c],f in s||(s[f]=r(t,o,a),e.call(this,t,s[f],s[f].capture))}else e.call(this,t,o,a)}}(t.addEventListener),t.removeEventListener=function(e){return function(t,n,r){if(r&&"boolean"!=typeof r){var o,a,c,u,s=i.get(this);if(s&&t in s&&(c=s[t],-1<(a=d.call(c.handler,n))&&(o=p(r))in(u=c.wrap[a]))){for(o in e.call(this,t,u[o],u[o].capture),delete u[o],u)return;c.handler.splice(a,1),c.wrap.splice(a,1),0===c.handler.length&&delete s[t]}}else e.call(this,t,n,r)}}(t.removeEventListener)}},e.EventTarget?o(EventTarget):(o(e.Text),o(e.Element||e.HTMLElement),o(e.HTMLDocument),o(e.Window||{prototype:e}),o(e.XMLHttpRequest)))}(window)},function(e,t,n){"use strict";!function(e){if("undefined"!=typeof e.setAttribute){var t=function(e){return e.replace(/-[a-z]/g,(function(e){return e[1].toUpperCase()}))};e.setProperty=function(e,n){var r=t(e);if(!n)return this.removeAttribute(r);var o=String(n);return this.setAttribute(r,o)},e.getPropertyValue=function(e){var n=t(e);return this.getAttribute(n)||null},e.removeProperty=function(e){var n=t(e),r=this.getAttribute(n);return this.removeAttribute(n),r}}}(CSSStyleDeclaration.prototype)},function(e,t,n){"use strict";window.Int32Array||(window.Int32Array=Array)},,function(e,t,n){"use strict";t.__esModule=!0,t._CI=Ae,t._HI=B,t._M=Te,t._MCCC=Le,t._ME=Ie,t._MFCC=Ve,t._MP=Ce,t._MR=ye,t.__render=Fe,t.createComponentVNode=function(e,t,n,r,o){var a=new T(1,null,null,e=function(e,t){if(12&e)return e;if(t.prototype&&t.prototype.render)return 4;if(t.render)return 32776;return 8}(e,t),r,function(e,t,n){var r=(32768&e?t.render:t).defaultProps;if(i(r))return n;if(i(n))return l(r,null);return N(n,r)}(e,t,n),function(e,t,n){if(4&e)return n;var r=(32768&e?t.render:t).defaultHooks;if(i(r))return n;if(i(n))return r;return N(n,r)}(e,t,o),t);k.createVNode&&k.createVNode(a);return a},t.createFragment=M,t.createPortal=function(e,t){var n=B(e);return O(1024,1024,null,n,0,null,n.key,t)},t.createRef=function(){return{current:null}},t.createRenderer=function(e){return function(t,n,r,o){e||(e=t),je(n,e,r,o)}},t.createTextVNode=I,t.createVNode=O,t.directClone=L,t.findDOMfromVNode=b,t.forwardRef=function(e){return{render:e}},t.getFlagsForElementVnode=function(e){switch(e){case"svg":return 32;case"input":return 64;case"select":return 256;case"textarea":return 128;case"$F":return 8192;default:return 1}},t.linkEvent=function(e,t){if(c(t))return{data:e,event:t};return null},t.normalizeProps=function(e){var t=e.props;if(t){var n=e.flags;481&n&&(void 0!==t.children&&i(e.children)&&P(e,t.children),void 0!==t.className&&(e.className=t.className||null,t.className=undefined)),void 0!==t.key&&(e.key=t.key,t.key=undefined),void 0!==t.ref&&(e.ref=8&n?l(e.ref,t.ref):t.ref,t.ref=undefined)}return e},t.render=je,t.rerender=He,t.version=t.options=t.Fragment=t.EMPTY_OBJ=t.Component=void 0;var r=Array.isArray;function o(e){var t=typeof e;return"string"===t||"number"===t}function i(e){return null==e}function a(e){return null===e||!1===e||!0===e||void 0===e}function c(e){return"function"==typeof e}function u(e){return"string"==typeof e}function s(e){return null===e}function l(e,t){var n={};if(e)for(var r in e)n[r]=e[r];if(t)for(var o in t)n[o]=t[o];return n}function f(e){return!s(e)&&"object"==typeof e}var d={};t.EMPTY_OBJ=d;function p(e){return e.substr(2).toLowerCase()}function h(e,t){e.appendChild(t)}function g(e,t,n){s(n)?h(e,t):e.insertBefore(t,n)}function v(e,t){e.removeChild(t)}function m(e){for(var t=0;t0,h=s(d),g=u(d)&&"$"===d[0];p||h||g?(n=n||t.slice(0,l),(p||g)&&(f=L(f)),(h||g)&&(f.key="$"+l),n.push(f)):n&&n.push(f),f.flags|=65536}}i=0===(n=n||t).length?1:8}else(n=t).flags|=65536,81920&t.flags&&(n=L(t)),i=2;return e.children=n,e.childFlags=i,e}function B(e){return a(e)||o(e)?I(e,null):r(e)?M(e,0,null):16384&e.flags?L(e):e}var D="http://www.w3.org/1999/xlink",F="http://www.w3.org/XML/1998/namespace",j={"xlink:actuate":D,"xlink:arcrole":D,"xlink:href":D,"xlink:role":D,"xlink:show":D,"xlink:title":D,"xlink:type":D,"xml:base":F,"xml:lang":F,"xml:space":F};function K(e){return{onClick:e,onDblClick:e,onFocusIn:e,onFocusOut:e,onKeyDown:e,onKeyPress:e,onKeyUp:e,onMouseDown:e,onMouseMove:e,onMouseUp:e,onTouchEnd:e,onTouchMove:e,onTouchStart:e}}var z=K(0),Y=K(null),U=K(!0);function $(e,t){var n=t.$EV;return n||(n=t.$EV=K(null)),n[e]||1==++z[e]&&(Y[e]=function(e){var t="onClick"===e||"onDblClick"===e?function(e){return function(t){0===t.button?W(t,!0,e,Z(t)):t.stopPropagation()}}(e):function(e){return function(t){W(t,!1,e,Z(t))}}(e);return document.addEventListener(p(e),t),t}(e)),n}function H(e,t){var n=t.$EV;n&&n[e]&&(0==--z[e]&&(document.removeEventListener(p(e),Y[e]),Y[e]=null),n[e]=null)}function W(e,t,n,r){var o=function(e){return c(e.composedPath)?e.composedPath()[0]:e.target}(e);do{if(t&&o.disabled)return;var i=o.$EV;if(i){var a=i[n];if(a&&(r.dom=o,a.event?a.event(a.data,e):a(e),e.cancelBubble))return}o=o.parentNode}while(!s(o))}function q(){this.cancelBubble=!0,this.immediatePropagationStopped||this.stopImmediatePropagation()}function G(){return this.defaultPrevented}function X(){return this.cancelBubble}function Z(e){var t={dom:document};return e.isDefaultPrevented=G,e.isPropagationStopped=X,e.stopPropagation=q,Object.defineProperty(e,"currentTarget",{configurable:!0,get:function(){return t.dom}}),t}function Q(e,t,n){if(e[t]){var r=e[t];r.event?r.event(r.data,n):r(n)}else{var o=t.toLowerCase();e[o]&&e[o](n)}}function J(e,t){var n=function(n){var r=this.$V;if(r){var o=r.props||d,i=r.dom;if(u(e))Q(o,e,n);else for(var a=0;a-1&&t.options[a]&&(c=t.options[a].value),n&&i(c)&&(c=e.defaultValue),ae(r,c)}}var se,le,fe=J("onInput",pe),de=J("onChange");function pe(e,t,n){var r=e.value,o=t.value;if(i(r)){if(n){var a=e.defaultValue;i(a)||a===o||(t.defaultValue=a,t.value=a)}}else o!==r&&(t.defaultValue=r,t.value=r)}function he(e,t,n,r,o,i){64&e?ie(r,n):256&e?ue(r,n,o,t):128&e&&pe(r,n,o),i&&(n.$V=t)}function ge(e,t,n){64&e?function(e,t){te(t.type)?(ee(e,"change",re),ee(e,"click",oe)):ee(e,"input",ne)}(t,n):256&e?function(e){ee(e,"change",ce)}(t):128&e&&function(e,t){ee(e,"input",fe),t.onChange&&ee(e,"change",de)}(t,n)}function ve(e){return e.type&&te(e.type)?!i(e.checked):!i(e.value)}function me(e){e&&!A(e,null)&&e.current&&(e.current=null)}function ye(e,t,n){e&&(c(e)||void 0!==e.current)&&n.push((function(){A(e,t)||void 0===e.current||(e.current=t)}))}function be(e,t){xe(e),x(e,t)}function xe(e){var t,n=e.flags,r=e.children;if(481&n){t=e.ref;var o=e.props;me(t);var a=e.childFlags;if(!s(o))for(var u=Object.keys(o),l=0,f=u.length;l0;for(var c in a&&(i=ve(n))&&ge(t,r,n),n)Se(c,null,n[c],r,o,i,null);a&&he(t,e,r,n,!0,i)}function Ne(e,t,n){var r=B(e.render(t,e.state,n)),o=n;return c(e.getChildContext)&&(o=l(n,e.getChildContext())),e.$CX=o,r}function Ae(e,t,n,r,o,i){var a=new t(n,r),u=a.$N=Boolean(t.getDerivedStateFromProps||a.getSnapshotBeforeUpdate);if(a.$SVG=o,a.$L=i,e.children=a,a.$BS=!1,a.context=r,a.props===d&&(a.props=n),u)a.state=_(a,n,a.state);else if(c(a.componentWillMount)){a.$BR=!0,a.componentWillMount();var l=a.$PS;if(!s(l)){var f=a.state;if(s(f))a.state=l;else for(var p in l)f[p]=l[p];a.$PS=null}a.$BR=!1}return a.$LI=Ne(a,n,r),a}function Te(e,t,n,r,o,i){var a=e.flags|=16384;481&a?Ie(e,t,n,r,o,i):4&a?function(e,t,n,r,o,i){var a=Ae(e,e.type,e.props||d,n,r,i);Te(a.$LI,t,a.$CX,r,o,i),Le(e.ref,a,i)}(e,t,n,r,o,i):8&a?(!function(e,t,n,r,o,i){Te(e.children=B(function(e,t){return 32768&e.flags?e.type.render(e.props||d,e.ref,t):e.type(e.props||d,t)}(e,n)),t,n,r,o,i)}(e,t,n,r,o,i),Ve(e,i)):512&a||16&a?Oe(e,t,o):8192&a?function(e,t,n,r,o,i){var a=e.children,c=e.childFlags;12&c&&0===a.length&&(c=e.childFlags=2,a=e.children=V());2===c?Te(a,n,o,r,o,i):Me(a,n,t,r,o,i)}(e,n,t,r,o,i):1024&a&&function(e,t,n,r,o){Te(e.children,e.ref,t,!1,null,o);var i=V();Oe(i,n,r),e.dom=i.dom}(e,n,t,o,i)}function Oe(e,t,n){var r=e.dom=document.createTextNode(e.children);s(t)||g(t,r,n)}function Ie(e,t,n,r,o,a){var c=e.flags,u=e.props,l=e.className,f=e.children,d=e.childFlags,p=e.dom=function(e,t){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}(e.type,r=r||(32&c)>0);if(i(l)||""===l||(r?p.setAttribute("class",l):p.className=l),16===d)S(p,f);else if(1!==d){var h=r&&"foreignObject"!==e.type;2===d?(16384&f.flags&&(e.children=f=L(f)),Te(f,p,n,h,null,a)):8!==d&&4!==d||Me(f,p,n,h,null,a)}s(t)||g(t,p,o),s(u)||Ce(e,c,u,p,r),ye(e.ref,p,a)}function Me(e,t,n,r,o,i){for(var a=0;a0,s!==l){var h=s||d;if((c=l||d)!==d)for(var g in(f=(448&o)>0)&&(p=ve(c)),c){var v=h[g],m=c[g];v!==m&&Se(g,v,m,u,r,p,e)}if(h!==d)for(var y in h)i(c[y])&&!i(h[y])&&Se(y,h[y],null,u,r,p,e)}var b=t.children,x=t.className;e.className!==x&&(i(x)?u.removeAttribute("class"):r?u.setAttribute("class",x):u.className=x);4096&o?function(e,t){e.textContent!==t&&(e.textContent=t)}(u,b):Pe(e.childFlags,t.childFlags,e.children,b,u,n,r&&"foreignObject"!==t.type,null,e,a);f&&he(o,t,u,c,!1,p);var w=t.ref,_=e.ref;_!==w&&(me(_),ye(w,u,a))}(e,t,r,o,p,f):4&p?function(e,t,n,r,o,i,a){var u=t.children=e.children;if(s(u))return;u.$L=a;var f=t.props||d,p=t.ref,h=e.ref,g=u.state;if(!u.$N){if(c(u.componentWillReceiveProps)){if(u.$BR=!0,u.componentWillReceiveProps(f,r),u.$UN)return;u.$BR=!1}s(u.$PS)||(g=l(g,u.$PS),u.$PS=null)}Be(u,g,f,n,r,o,!1,i,a),h!==p&&(me(h),ye(p,u,a))}(e,t,n,r,o,u,f):8&p?function(e,t,n,r,o,a,u){var s=!0,l=t.props||d,f=t.ref,p=e.props,h=!i(f),g=e.children;h&&c(f.onComponentShouldUpdate)&&(s=f.onComponentShouldUpdate(p,l));if(!1!==s){h&&c(f.onComponentWillUpdate)&&f.onComponentWillUpdate(p,l);var v=t.type,m=B(32768&t.flags?v.render(l,f,r):v(l,r));Re(g,m,n,r,o,a,u),t.children=m,h&&c(f.onComponentDidUpdate)&&f.onComponentDidUpdate(p,l)}else t.children=g}(e,t,n,r,o,u,f):16&p?function(e,t){var n=t.children,r=t.dom=e.dom;n!==e.children&&(r.nodeValue=n)}(e,t):512&p?t.dom=e.dom:8192&p?function(e,t,n,r,o,i){var a=e.children,c=t.children,u=e.childFlags,s=t.childFlags,l=null;12&s&&0===c.length&&(s=t.childFlags=2,c=t.children=V());var f=0!=(2&s);if(12&u){var d=a.length;(8&u&&8&s||f||!f&&c.length>d)&&(l=b(a[d-1],!1).nextSibling)}Pe(u,s,a,c,n,r,o,l,e,i)}(e,t,n,r,o,f):function(e,t,n,r){var o=e.ref,i=t.ref,c=t.children;if(Pe(e.childFlags,t.childFlags,e.children,c,o,n,!1,null,e,r),t.dom=e.dom,o!==i&&!a(c)){var u=c.dom;v(o,u),h(i,u)}}(e,t,r,f)}function Pe(e,t,n,r,o,i,a,c,u,s){switch(e){case 2:switch(t){case 2:Re(n,r,o,i,a,c,s);break;case 1:be(n,o);break;case 16:xe(n),S(o,r);break;default:!function(e,t,n,r,o,i){xe(e),Me(t,n,r,o,b(e,!0),i),x(e,n)}(n,r,o,i,a,s)}break;case 1:switch(t){case 2:Te(r,o,i,a,c,s);break;case 1:break;case 16:S(o,r);break;default:Me(r,o,i,a,c,s)}break;case 16:switch(t){case 16:!function(e,t,n){e!==t&&(""!==e?n.firstChild.nodeValue=t:S(n,t))}(n,r,o);break;case 2:_e(o),Te(r,o,i,a,c,s);break;case 1:_e(o);break;default:_e(o),Me(r,o,i,a,c,s)}break;default:switch(t){case 16:we(n),S(o,r);break;case 2:Ee(o,u,n),Te(r,o,i,a,c,s);break;case 1:Ee(o,u,n);break;default:var l=0|n.length,f=0|r.length;0===l?f>0&&Me(r,o,i,a,c,s):0===f?Ee(o,u,n):8===t&&8===e?function(e,t,n,r,o,i,a,c,u,s){var l,f,d=i-1,p=a-1,h=0,g=e[h],v=t[h];e:{for(;g.key===v.key;){if(16384&v.flags&&(t[h]=v=L(v)),Re(g,v,n,r,o,c,s),e[h]=v,++h>d||h>p)break e;g=e[h],v=t[h]}for(g=e[d],v=t[p];g.key===v.key;){if(16384&v.flags&&(t[p]=v=L(v)),Re(g,v,n,r,o,c,s),e[d]=v,d--,p--,h>d||h>p)break e;g=e[d],v=t[p]}}if(h>d){if(h<=p)for(f=(l=p+1)p)for(;h<=d;)be(e[h++],n);else!function(e,t,n,r,o,i,a,c,u,s,l,f,d){var p,h,g,v=0,m=c,y=c,x=i-c+1,_=a-c+1,E=new Int32Array(_+1),k=x===r,S=!1,C=0,N=0;if(o<4||(x|_)<32)for(v=m;v<=i;++v)if(p=e[v],N<_){for(c=y;c<=a;c++)if(h=t[c],p.key===h.key){if(E[c-y]=v+1,k)for(k=!1;mc?S=!0:C=c,16384&h.flags&&(t[c]=h=L(h)),Re(p,h,u,n,s,l,d),++N;break}!k&&c>a&&be(p,u)}else k||be(p,u);else{var A={};for(v=y;v<=a;++v)A[t[v].key]=v;for(v=m;v<=i;++v)if(p=e[v],N<_)if(void 0!==(c=A[p.key])){if(k)for(k=!1;v>m;)be(e[m++],u);E[c-y]=v+1,C>c?S=!0:C=c,16384&(h=t[c]).flags&&(t[c]=h=L(h)),Re(p,h,u,n,s,l,d),++N}else k||be(p,u);else k||be(p,u)}if(k)Ee(u,f,e),Me(t,u,n,s,l,d);else if(S){var T=function(e){var t=0,n=0,r=0,o=0,i=0,a=0,c=0,u=e.length;u>De&&(De=u,se=new Int32Array(u),le=new Int32Array(u));for(;n>1]]0&&(le[n]=se[i-1]),se[i]=n)}i=o+1;var s=new Int32Array(i);a=se[i-1];for(;i-- >0;)s[i]=a,a=le[a],se[i]=0;return s}(E);for(c=T.length-1,v=_-1;v>=0;v--)0===E[v]?(16384&(h=t[C=v+y]).flags&&(t[C]=h=L(h)),Te(h,u,n,s,(g=C+1)=0;v--)0===E[v]&&(16384&(h=t[C=v+y]).flags&&(t[C]=h=L(h)),Te(h,u,n,s,(g=C+1)a?a:i,d=0;da)for(d=f;d1)for(var n=1;n=0||(o[n]=e[n]);return o}(e,["className"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["BlockQuote",t])},n)))}},function(e,t,n){"use strict";var r,o;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=r,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(r||(t.VNodeFlags=r={})),t.ChildFlags=o,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(o||(t.ChildFlags=o={}))},function(e,t,n){"use strict";t.__esModule=!0,t.ByondUi=void 0;var r=n(0),o=n(6),i=n(466),a=n(29),c=n(17);function u(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var s=(0,a.createLogger)("ByondUi"),l=[];window.addEventListener("beforeunload",(function(){for(var e=0;e=0||(o[n]=e[n]);return o}(t,["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"]),v=this.state.viewBox,m=function(e,t,n,r){if(0===e.length)return[];var i=(0,o.zipWith)(Math.min).apply(void 0,e),a=(0,o.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(i[0]=n[0],a[0]=n[1]),r!==undefined&&(i[1]=r[0],a[1]=r[1]),(0,o.map)((function(e){return(0,o.zipWith)((function(e,t,n,r){return(e-t)/(n-t)*r}))(e,i,a,t)}))(e)}(i,v,c,u);if(m.length>0){var y=m[0],b=m[m.length-1];m.push([v[0]+h,b[1]]),m.push([v[0]+h,-h]),m.push([-h,-h]),m.push([-h,y[1]])}var x=function(e){for(var t="",n=0;n=0||(o[n]=e[n]);return o}(t,["children","color","title","buttons"]);return(0,r.createComponentVNode)(2,o.Box,{mb:1,children:[(0,r.createVNode)(1,"div","Table",[(0,r.createVNode)(1,"div","Table__cell",(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Button,Object.assign({fluid:!0,color:u,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},f,{children:s}))),2),l&&(0,r.createVNode)(1,"div","Table__cell Table__cell--collapsing",l,0)],0),n&&(0,r.createComponentVNode)(2,o.Box,{mt:1,children:a})]})},a}(r.Component);t.Collapsible=a},function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var r=n(0),o=n(6),i=n(17);var a=function(e){var t=e.content,n=(e.children,e.className),a=e.color,c=e.backgroundColor,u=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["content","children","className","color","backgroundColor"]);return u.color=t?null:"transparent",u.backgroundColor=a||c,(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["ColorBox",n,(0,i.computeBoxClassName)(u)]),t||".",0,Object.assign({},(0,i.computeBoxProps)(u))))};t.ColorBox=a,a.defaultHooks=o.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var r=n(0),o=n(6),i=n(17),a=n(103);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){var t,n;function u(t){var n;return(n=e.call(this,t)||this).state={selected:t.selected,open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var s=u.prototype;return s.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},s.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},s.setSelected=function(e){this.setState({selected:e}),this.setOpen(!1),this.props.onSelected(e)},s.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){return(0,r.createComponentVNode)(2,i.Box,{className:"Dropdown__menuentry",onClick:function(){e.setSelected(t)},children:t},t)}));return n.length?n:"No Options Found"},s.render=function(){var e=this,t=this.props,n=t.color,u=void 0===n?"default":n,s=t.over,l=t.noscroll,f=t.nochevron,d=t.width,p=(t.onClick,t.selected,t.disabled),h=c(t,["color","over","noscroll","nochevron","width","onClick","selected","disabled"]),g=h.className,v=c(h,["className"]),m=s?!this.state.open:this.state.open,y=this.state.open?(0,r.createVNode)(1,"div",(0,o.classes)([l?"Dropdown__menu-noscroll":"Dropdown__menu",s&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:d}},null,(function(t){e.menuRef=t})):null;return(0,r.createVNode)(1,"div","Dropdown",[(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({width:d,className:(0,o.classes)(["Dropdown__control","Button","Button--color--"+u,p&&"Button--disabled",g])},v,{onClick:function(){p&&!e.state.open||e.setOpen(!e.state.open)},children:[(0,r.createVNode)(1,"span","Dropdown__selected-text",this.state.selected,0),!!f||(0,r.createVNode)(1,"span","Dropdown__arrow-button",(0,r.createComponentVNode)(2,a.Icon,{name:m?"chevron-up":"chevron-down"}),2)]}))),y],0)},u}(r.Component);t.Dropdown=u},function(e,t,n){"use strict";t.__esModule=!0,t.GridColumn=t.Grid=void 0;var r=n(0),o=n(196),i=n(6);function a(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var c=function(e){var t=e.children,n=a(e,["children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Table,Object.assign({},n,{children:(0,r.createComponentVNode)(2,o.Table.Row,{children:t})})))};t.Grid=c,c.defaultHooks=i.pureComponentHooks;var u=function(e){var t=e.size,n=void 0===t?1:t,i=e.style,c=a(e,["size","style"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Table.Cell,Object.assign({style:Object.assign({width:n+"%"},i)},c)))};t.GridColumn=u,c.defaultHooks=i.pureComponentHooks,c.Column=u},function(e,t,n){"use strict";t.__esModule=!0,t.Knob=void 0;var r=n(0),o=n(9),i=n(6),a=n(17),c=n(139),u=n(140);t.Knob=function(e){if(Byond.IS_LTE_IE8)return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,s=e.maxValue,l=e.minValue,f=e.onChange,d=e.onDrag,p=e.step,h=e.stepPixelSize,g=e.suppressFlicker,v=e.unit,m=e.value,y=e.className,b=e.style,x=e.fillValue,w=e.color,_=e.ranges,E=void 0===_?{}:_,k=e.size,S=void 0===k?1:k,C=e.bipolar,N=(e.children,function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","style","fillValue","color","ranges","size","bipolar","children"]));return(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[0,-1]},{animated:t,format:n,maxValue:s,minValue:l,onChange:f,onDrag:d,step:p,stepPixelSize:h,suppressFlicker:g,unit:v,value:m},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,u=e.displayElement,f=e.inputElement,d=e.handleDragStart,p=(0,o.scale)(null!=x?x:c,l,s),h=(0,o.scale)(c,l,s),g=w||(0,o.keyOfMatchingRange)(null!=x?x:n,E)||"default",v=270*(h-.5);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,i.classes)(["Knob","Knob--color--"+g,C&&"Knob--bipolar",y,(0,a.computeBoxClassName)(N)]),[(0,r.createVNode)(1,"div","Knob__circle",(0,r.createVNode)(1,"div","Knob__cursorBox",(0,r.createVNode)(1,"div","Knob__cursor"),2,{style:{transform:"rotate("+v+"deg)"}}),2),t&&(0,r.createVNode)(1,"div","Knob__popupValue",u,0),(0,r.createVNode)(32,"svg","Knob__ring Knob__ringTrackPivot",(0,r.createVNode)(32,"circle","Knob__ringTrack",null,1,{cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),(0,r.createVNode)(32,"svg","Knob__ring Knob__ringFillPivot",(0,r.createVNode)(32,"circle","Knob__ringFill",null,1,{style:{"stroke-dashoffset":((C?2.75:2)-1.5*p)*Math.PI*50},cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),f],0,Object.assign({},(0,a.computeBoxProps)(Object.assign({style:Object.assign({"font-size":S+"em"},b)},N)),{onMouseDown:d})))}})))}},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledControls=void 0;var r=n(0),o=n(195);function i(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var a=function(e){var t=e.children,n=i(e,["children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Flex,Object.assign({mx:-.5,align:"stretch",justify:"space-between"},n,{children:t})))};t.LabeledControls=a;a.Item=function(e){var t=e.label,n=e.children,a=i(e,["label","children"]);return(0,r.createComponentVNode)(2,o.Flex.Item,{mx:1,children:(0,r.normalizeProps)((0,r.createComponentVNode)(2,o.Flex,Object.assign({minWidth:"52px",height:"100%",direction:"column",align:"center",textAlign:"center",justify:"space-between"},a,{children:[(0,r.createComponentVNode)(2,o.Flex.Item),(0,r.createComponentVNode)(2,o.Flex.Item,{children:n}),(0,r.createComponentVNode)(2,o.Flex.Item,{color:"label",children:t})]})))})}},function(e,t,n){"use strict";t.__esModule=!0,t.Modal=void 0;var r=n(0),o=n(6),i=n(17),a=n(193);t.Modal=function(e){var t=e.className,n=e.children,c=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","children"]);return(0,r.createComponentVNode)(2,a.Dimmer,{children:(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Modal",t,(0,i.computeBoxClassName)(c)]),n,0,Object.assign({},(0,i.computeBoxProps)(c))))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var r=n(0),o=n(6),i=n(17);var a=function(e){var t=e.className,n=e.color,a=e.info,c=(e.warning,e.success),u=e.danger,s=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","color","info","warning","success","danger"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["NoticeBox",n&&"NoticeBox--color--"+n,a&&"NoticeBox--type--info",c&&"NoticeBox--type--success",u&&"NoticeBox--type--danger",t])},s)))};t.NoticeBox=a,a.defaultHooks=o.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBar=void 0;var r=n(0),o=n(9),i=n(6),a=n(17);var c=function(e){var t=e.className,n=e.value,c=e.minValue,u=void 0===c?0:c,s=e.maxValue,l=void 0===s?1:s,f=e.color,d=e.ranges,p=void 0===d?{}:d,h=e.children,g=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","value","minValue","maxValue","color","ranges","children"]),v=(0,o.scale)(n,u,l),m=h!==undefined,y=f||(0,o.keyOfMatchingRange)(n,p)||"default";return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,i.classes)(["ProgressBar","ProgressBar--color--"+y,t,(0,a.computeBoxClassName)(g)]),[(0,r.createVNode)(1,"div","ProgressBar__fill ProgressBar__fill--animated",null,1,{style:{width:100*(0,o.clamp01)(v)+"%"}}),(0,r.createVNode)(1,"div","ProgressBar__content",m?h:(0,o.toFixed)(100*v)+"%",0)],4,Object.assign({},(0,a.computeBoxProps)(g))))};t.ProgressBar=c,c.defaultHooks=i.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var r=n(0),o=n(6),i=n(57),a=n(17);var c=function(e){var t,n;function c(t){var n;return(n=e.call(this,t)||this).ref=(0,r.createRef)(),n.scrollable=t.scrollable,n}n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var u=c.prototype;return u.componentDidMount=function(){this.scrollable&&(0,i.addScrollableNode)(this.ref.current)},u.componentWillUnmount=function(){this.scrollable&&(0,i.removeScrollableNode)(this.ref.current)},u.render=function(){var e=this.props,t=e.className,n=e.title,i=e.level,c=void 0===i?1:i,u=e.buttons,s=e.fill,l=e.fitted,f=e.scrollable,d=e.children,p=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["className","title","level","buttons","fill","fitted","scrollable","children"]),h=(0,o.canRender)(n)||(0,o.canRender)(u),g=(0,o.canRender)(d);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Section","Section--level--"+c,Byond.IS_LTE_IE8&&"Section--iefix",s&&"Section--fill",l&&"Section--fitted",f&&"Section--scrollable",t].concat((0,a.computeBoxClassName)(p))),[h&&(0,r.createVNode)(1,"div","Section__title",[(0,r.createVNode)(1,"span","Section__titleText",n,0),(0,r.createVNode)(1,"div","Section__buttons",u,0)],4),l&&d||g&&(0,r.createVNode)(1,"div","Section__content",d,0)],0,Object.assign({},(0,a.computeBoxProps)(p)),null,this.ref))},c}(r.Component);t.Section=c},function(e,t,n){"use strict";t.__esModule=!0,t.Slider=void 0;var r=n(0),o=n(9),i=n(6),a=n(17),c=n(139),u=n(140);t.Slider=function(e){if(Byond.IS_LTE_IE8)return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,s=e.maxValue,l=e.minValue,f=e.onChange,d=e.onDrag,p=e.step,h=e.stepPixelSize,g=e.suppressFlicker,v=e.unit,m=e.value,y=e.className,b=e.fillValue,x=e.color,w=e.ranges,_=void 0===w?{}:w,E=e.children,k=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","fillValue","color","ranges","children"]),S=E!==undefined;return(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.DraggableControl,Object.assign({dragMatrix:[1,0]},{animated:t,format:n,maxValue:s,minValue:l,onChange:f,onDrag:d,step:p,stepPixelSize:h,suppressFlicker:g,unit:v,value:m},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,u=e.displayElement,f=e.inputElement,d=e.handleDragStart,p=b!==undefined&&null!==b,h=((0,o.scale)(n,l,s),(0,o.scale)(null!=b?b:c,l,s)),g=(0,o.scale)(c,l,s),v=x||(0,o.keyOfMatchingRange)(null!=b?b:n,_)||"default";return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,i.classes)(["Slider","ProgressBar","ProgressBar--color--"+v,y,(0,a.computeBoxClassName)(k)]),[(0,r.createVNode)(1,"div",(0,i.classes)(["ProgressBar__fill",p&&"ProgressBar__fill--animated"]),null,1,{style:{width:100*(0,o.clamp01)(h)+"%",opacity:.4}}),(0,r.createVNode)(1,"div","ProgressBar__fill",null,1,{style:{width:100*(0,o.clamp01)(Math.min(h,g))+"%"}}),(0,r.createVNode)(1,"div","Slider__cursorOffset",[(0,r.createVNode)(1,"div","Slider__cursor"),(0,r.createVNode)(1,"div","Slider__pointer"),t&&(0,r.createVNode)(1,"div","Slider__popupValue",u,0)],0,{style:{width:100*(0,o.clamp01)(g)+"%"}}),(0,r.createVNode)(1,"div","ProgressBar__content",S?E:u,0),f],0,Object.assign({},(0,a.computeBoxProps)(k),{onMouseDown:d})))}})))}},function(e,t,n){"use strict";t.__esModule=!0,t.TextArea=void 0;var r=n(0),o=n(6),i=n(17),a=n(197),c=n(78);function u(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var s=function(e){var t,n;function s(t,n){var o;(o=e.call(this,t,n)||this).textareaRef=(0,r.createRef)(),o.fillerRef=(0,r.createRef)(),o.state={editing:!1};var i=t.dontUseTabForIndent,u=void 0!==i&&i;return o.handleOnInput=function(e){var t=o.state.editing,n=o.props.onInput;t||o.setEditing(!0),n&&n(e,e.target.value)},o.handleOnChange=function(e){var t=o.state.editing,n=o.props.onChange;t&&o.setEditing(!1),n&&n(e,e.target.value)},o.handleKeyPress=function(e){var t=o.state.editing,n=o.props.onKeyPress;t||o.setEditing(!0),n&&n(e,e.target.value)},o.handleKeyDown=function(e){var t=o.state.editing,n=o.props.onKeyDown;if(e.keyCode===c.KEY_ESCAPE)return o.setEditing(!1),e.target.value=(0,a.toInputValue)(o.props.value),void e.target.blur();if((t||o.setEditing(!0),!u)&&9===(e.keyCode||e.which)){e.preventDefault();var r=e.target,i=r.value,s=r.selectionStart,l=r.selectionEnd;e.target.value=i.substring(0,s)+"\t"+i.substring(l),e.target.selectionEnd=s+1}n&&n(e,e.target.value)},o.handleFocus=function(e){o.state.editing||o.setEditing(!0)},o.handleBlur=function(e){var t=o.state.editing,n=o.props.onChange;t&&(o.setEditing(!1),n&&n(e,e.target.value))},o}n=e,(t=s).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var l=s.prototype;return l.componentDidMount=function(){var e=this.props.value,t=this.textareaRef.current;t&&(t.value=(0,a.toInputValue)(e))},l.componentDidUpdate=function(e,t){var n=this.state.editing,r=e.value,o=this.props.value,i=this.textareaRef.current;i&&!n&&r!==o&&(i.value=(0,a.toInputValue)(o))},l.setEditing=function(e){this.setState({editing:e})},l.getValue=function(){return this.textareaRef.current&&this.textareaRef.current.value},l.render=function(){var e=this.props,t=(e.onChange,e.onKeyDown,e.onKeyPress,e.onInput,e.onFocus,e.onBlur,e.onEnter,e.value,e.placeholder),n=u(e,["onChange","onKeyDown","onKeyPress","onInput","onFocus","onBlur","onEnter","value","placeholder"]),a=n.className,c=n.fluid,s=u(n,["className","fluid"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({className:(0,o.classes)(["TextArea",c&&"TextArea--fluid",a])},s,{children:(0,r.createVNode)(128,"textarea","TextArea__textarea",null,1,{placeholder:t,onChange:this.handleOnChange,onKeyDown:this.handleKeyDown,onKeyPress:this.handleKeyPress,onInput:this.handleOnInput,onFocus:this.handleFocus,onBlur:this.handleBlur},null,this.textareaRef)})))},s}(r.Component);t.TextArea=s},function(e,t,n){"use strict";t.__esModule=!0,t.Tabs=void 0;var r=n(0),o=n(6),i=n(17),a=n(103);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var u=function(e){var t=e.className,n=e.vertical,a=e.fluid,u=e.children,s=c(e,["className","vertical","fluid","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",a&&"Tabs--fluid",t,(0,i.computeBoxClassName)(s)]),u,0,Object.assign({},(0,i.computeBoxProps)(s))))};t.Tabs=u;u.Tab=function(e){var t=e.className,n=e.selected,u=e.color,s=e.icon,l=e.leftSlot,f=e.rightSlot,d=e.children,p=c(e,["className","selected","color","icon","leftSlot","rightSlot","children"]);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",(0,o.classes)(["Tab","Tabs__Tab","Tab--color--"+u,n&&"Tab--selected",t].concat((0,i.computeBoxClassName)(p))),[(0,o.canRender)(l)&&(0,r.createVNode)(1,"div","Tab__left",l,0)||!!s&&(0,r.createVNode)(1,"div","Tab__left",(0,r.createComponentVNode)(2,a.Icon,{name:s}),2),(0,r.createVNode)(1,"div","Tab__text",d,0),(0,o.canRender)(f)&&(0,r.createVNode)(1,"div","Tab__right",f,0)],0,Object.assign({},(0,i.computeBoxProps)(p))))}},function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=void 0;var r=n(9),o=n(0);var i=function(e){return"number"==typeof e&&Number.isFinite(e)&&!Number.isNaN(e)},a=function(e){var t,n;function o(t){var n;return(n=e.call(this,t)||this).timer=null,n.last_seen_value=undefined,n.state={value:0},i(t.value)&&(n.state.value=Number(t.value),n.last_seen_value=Number(t.value)),n}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=o.prototype;return a.componentDidUpdate=function(){var e=this;this.props.auto!==undefined&&(clearInterval(this.timer),this.timer=setInterval((function(){return e.tick()}),1e3))},a.tick=function(){var e=Number(this.state.value);this.props.value!==this.last_seen_value&&(this.last_seen_value=this.props.value,e=this.props.value);var t="up"===this.props.auto?10:-10,n=Math.max(0,e+t);this.setState({value:n})},a.componentDidMount=function(){var e=this;this.props.auto!==undefined&&(this.timer=setInterval((function(){return e.tick()}),1e3))},a.componentWillUnmount=function(){clearInterval(this.timer)},a.render=function(){var e=this.state.value;if(!i(e))return this.state.value||null;var t=(0,r.toFixed)(Math.floor(e/10%60)).padStart(2,"0"),n=(0,r.toFixed)(Math.floor(e/600%60)).padStart(2,"0");return(0,r.toFixed)(Math.floor(e/36e3%24)).padStart(2,"0")+":"+n+":"+t},o}(o.Component);t.TimeDisplay=a},function(e,t,n){"use strict";t.__esModule=!0,t.NtosWindow=void 0;var r=n(0),o=n(63),i=n(2),a=n(1),c=n(199),u=function(e,t){var n=e.title,u=e.width,s=void 0===u?575:u,l=e.height,f=void 0===l?700:l,d=e.resizable,p=e.theme,h=void 0===p?"ntos":p,g=e.children,v=(0,i.useBackend)(t),m=v.act,y=v.data,b=y.PC_device_theme,x=y.PC_batteryicon,w=y.PC_showbatteryicon,_=y.PC_batterypercent,E=y.PC_ntneticon,k=y.PC_apclinkicon,S=y.PC_stationtime,C=y.PC_programheaders,N=void 0===C?[]:C,A=y.PC_showexitprogram;return(0,r.createComponentVNode)(2,c.Window,{title:n,width:s,height:f,theme:h,resizable:d,children:(0,r.createVNode)(1,"div","NtosWindow",[(0,r.createVNode)(1,"div","NtosWindow__header NtosHeader",[(0,r.createVNode)(1,"div","NtosHeader__left",[(0,r.createComponentVNode)(2,a.Box,{inline:!0,bold:!0,mr:2,children:S}),(0,r.createComponentVNode)(2,a.Box,{inline:!0,italic:!0,mr:2,opacity:.33,children:["ntos"===b&&"NtOS","syndicate"===b&&"Syndix"]})],4),(0,r.createVNode)(1,"div","NtosHeader__right",[N.map((function(e){return(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(e.icon)})},e.icon)})),(0,r.createComponentVNode)(2,a.Box,{inline:!0,children:E&&(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(E)})}),!!w&&x&&(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:[x&&(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(x)}),_&&_]}),k&&(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(k)})}),!!A&&(0,r.createComponentVNode)(2,a.Button,{width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-minimize-o",tooltip:"Minimize",tooltipPosition:"bottom",onClick:function(){return m("PC_minimize")}}),!!A&&(0,r.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"window-close-o",tooltip:"Close",tooltipPosition:"bottom-left",onClick:function(){return m("PC_exit")}}),!A&&(0,r.createComponentVNode)(2,a.Button,{mr:"-3px",width:"26px",lineHeight:"22px",textAlign:"center",color:"transparent",icon:"power-off",tooltip:"Power off",tooltipPosition:"bottom-left",onClick:function(){return m("PC_shutdown")}})],0)],4),g],0)})};t.NtosWindow=u;u.Content=function(e){return(0,r.createVNode)(1,"div","NtosWindow__content",(0,r.normalizeProps)((0,r.createComponentVNode)(2,c.Window.Content,Object.assign({},e))),2)}},function(e,t,n){"use strict";t.__esModule=!0,t.Pane=void 0;var r=n(0),o=n(6),i=n(2),a=n(1),c=n(137),u=n(141);function s(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}var l=function(e,t){var n=e.theme,l=e.children,f=e.className,d=s(e,["theme","children","className"]),p=(0,i.useBackend)(t).suspended,h=(0,c.useDebug)(t).debugLayout;return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.Layout,Object.assign({className:(0,o.classes)(["Window",f]),theme:n},d,{children:(0,r.createComponentVNode)(2,a.Box,{fillPositionedParent:!0,className:h&&"debug-layout",children:!p&&l})})))};t.Pane=l;l.Content=function(e){var t=e.className,n=e.fitted,i=e.children,a=s(e,["className","fitted","children"]);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,u.Layout.Content,Object.assign({className:(0,o.classes)(["Window__content",t])},a,{children:n&&i||(0,r.createVNode)(1,"div","Window__contentPadding",i,0)})))}},function(e,t,n){"use strict";t.__esModule=!0,t.relayMiddleware=t.debugMiddleware=void 0;var r=n(78),o=n(57),i=n(135),a=n(200),c=["backend/update","chat/message"];t.debugMiddleware=function(e){return(0,i.acquireHotKey)(r.KEY_F11),(0,i.acquireHotKey)(r.KEY_F12),o.globalEvents.on("keydown",(function(t){t.code===r.KEY_F11&&e.dispatch((0,a.toggleDebugLayout)()),t.code===r.KEY_F12&&e.dispatch((0,a.toggleKitchenSink)()),t.ctrl&&t.alt&&t.code===r.KEY_BACKSPACE&&setTimeout((function(){throw new Error("OOPSIE WOOPSIE!! UwU We made a fucky wucky!! A wittle fucko boingo! The code monkeys at our headquarters are working VEWY HAWD to fix this!")}))})),function(e){return function(t){return e(t)}}};t.relayMiddleware=function(e){var t=n(100),u="?external"===location.search;return u?t.subscribe((function(t){var n=t.type,r=t.payload;"relay"===n&&r.windowId===window.__windowId__&&e.dispatch(Object.assign({},r.action,{relayed:!0}))})):((0,i.acquireHotKey)(r.KEY_F10),o.globalEvents.on("keydown",(function(t){t===r.KEY_F10&&e.dispatch((0,a.openExternalBrowser)())}))),function(e){return function(n){var r=n.type,o=(n.payload,n.relayed);if(r!==a.openExternalBrowser.type)return!c.includes(r)||o||u||t.sendMessage({type:"relay",payload:{windowId:window.__windowId__,action:n}}),e(n);window.open(location.href+"?external","_blank")}}}},function(e,t,n){"use strict";t.__esModule=!0,t.debugReducer=void 0;t.debugReducer=function(e,t){void 0===e&&(e={});var n=t.type;t.payload;return"debug/toggleKitchenSink"===n?Object.assign({},e,{kitchenSink:!e.kitchenSink}):"debug/toggleDebugLayout"===n?Object.assign({},e,{debugLayout:!e.debugLayout}):e}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";e.exports=function(){var e=Object.hasOwnProperty,t=Object.setPrototypeOf,n=Object.isFrozen,r=Object.freeze,o=Object.seal,i=Object.create,a="undefined"!=typeof Reflect&&Reflect,c=a.apply,u=a.construct;c||(c=function(e,t,n){return e.apply(t,n)}),r||(r=function(e){return e}),o||(o=function(e){return e}),u||(u=function(e,t){return new(Function.prototype.bind.apply(e,[null].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?n-1:0),o=1;o/gm),V=o(/^data-[\-\w.\u00B7-\uFFFF]/),R=o(/^aria-[\-\w]+$/),P=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),B=o(/^(?:\w+script|data):/i),D=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function j(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&arguments[0]!==undefined?arguments[0]:K(),t=function(e){return Y(e)};if(t.version="2.2.2",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,o=e.document,i=e.DocumentFragment,a=e.HTMLTemplateElement,c=e.Node,u=e.NodeFilter,s=e.NamedNodeMap,x=s===undefined?e.NamedNodeMap||e.MozNamedAttrMap:s,U=e.Text,$=e.Comment,H=e.DOMParser,W=e.trustedTypes;if("function"==typeof a){var q=o.createElement("template");q.content&&q.content.ownerDocument&&(o=q.content.ownerDocument)}var G=z(W,n),X=G&&Ae?G.createHTML(""):"",Z=o,Q=Z.implementation,J=Z.createNodeIterator,ee=Z.getElementsByTagName,te=Z.createDocumentFragment,ne=n.importNode,re={};try{re=_(o).documentMode?o.documentMode:{}}catch(Qe){}var oe={};t.isSupported=Q&&"undefined"!=typeof Q.createHTMLDocument&&9!==re;var ie=M,ae=L,ce=V,ue=R,se=B,le=D,fe=P,de=null,pe=w({},[].concat(j(E),j(k),j(S),j(C),j(N))),he=null,ge=w({},[].concat(j(A),j(T),j(O),j(I))),ve=null,me=null,ye=!0,be=!0,xe=!1,we=!1,_e=!1,Ee=!1,ke=!1,Se=!1,Ce=!1,Ne=!0,Ae=!1,Te=!0,Oe=!0,Ie=!1,Me={},Le=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ve=null,Re=w({},["audio","video","img","source","image","track"]),Pe=null,Be=w({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),De=null,Fe=o.createElement("form"),je=function(e){De&&De===e||(e&&"object"===(void 0===e?"undefined":F(e))||(e={}),e=_(e),de="ALLOWED_TAGS"in e?w({},e.ALLOWED_TAGS):pe,he="ALLOWED_ATTR"in e?w({},e.ALLOWED_ATTR):ge,Pe="ADD_URI_SAFE_ATTR"in e?w(_(Be),e.ADD_URI_SAFE_ATTR):Be,Ve="ADD_DATA_URI_TAGS"in e?w(_(Re),e.ADD_DATA_URI_TAGS):Re,ve="FORBID_TAGS"in e?w({},e.FORBID_TAGS):{},me="FORBID_ATTR"in e?w({},e.FORBID_ATTR):{},Me="USE_PROFILES"in e&&e.USE_PROFILES,ye=!1!==e.ALLOW_ARIA_ATTR,be=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,we=e.SAFE_FOR_TEMPLATES||!1,_e=e.WHOLE_DOCUMENT||!1,Se=e.RETURN_DOM||!1,Ce=e.RETURN_DOM_FRAGMENT||!1,Ne=!1!==e.RETURN_DOM_IMPORT,Ae=e.RETURN_TRUSTED_TYPE||!1,ke=e.FORCE_BODY||!1,Te=!1!==e.SANITIZE_DOM,Oe=!1!==e.KEEP_CONTENT,Ie=e.IN_PLACE||!1,fe=e.ALLOWED_URI_REGEXP||fe,we&&(be=!1),Ce&&(Se=!0),Me&&(de=w({},[].concat(j(N))),he=[],!0===Me.html&&(w(de,E),w(he,A)),!0===Me.svg&&(w(de,k),w(he,T),w(he,I)),!0===Me.svgFilters&&(w(de,S),w(he,T),w(he,I)),!0===Me.mathMl&&(w(de,C),w(he,O),w(he,I))),e.ADD_TAGS&&(de===pe&&(de=_(de)),w(de,e.ADD_TAGS)),e.ADD_ATTR&&(he===ge&&(he=_(he)),w(he,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&w(Pe,e.ADD_URI_SAFE_ATTR),Oe&&(de["#text"]=!0),_e&&w(de,["html","head","body"]),de.table&&(w(de,["tbody"]),delete ve.tbody),r&&r(e),De=e)},Ke=function(e){d(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(Qe){e.outerHTML=X}},ze=function(e,n){try{d(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(Qe){d(t.removed,{attribute:null,from:n})}n.removeAttribute(e)},Ye=function(e){var t=void 0,n=void 0;if(ke)e=""+e;else{var r=h(e,/^[\r\n\t ]+/);n=r&&r[0]}var i=G?G.createHTML(e):e;try{t=(new H).parseFromString(i,"text/html")}catch(Qe){}if(!t||!t.documentElement){var a=(t=Q.createHTMLDocument("")).body;a.parentNode.removeChild(a.parentNode.firstElementChild),a.outerHTML=i}return e&&n&&t.body.insertBefore(o.createTextNode(n),t.body.childNodes[0]||null),ee.call(t,_e?"html":"body")[0]},Ue=function(e){return J.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT,(function(){return u.FILTER_ACCEPT}),!1)},$e=function(e){return!(e instanceof U||e instanceof $||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof x&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI)},He=function(e){return"object"===(void 0===c?"undefined":F(c))?e instanceof c:e&&"object"===(void 0===e?"undefined":F(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},We=function(e,n,r){oe[e]&&l(oe[e],(function(e){e.call(t,n,r,De)}))},qe=function(e){var n=void 0;if(We("beforeSanitizeElements",e,null),$e(e))return Ke(e),!0;if(h(e.nodeName,/[\u0080-\uFFFF]/))return Ke(e),!0;var r=p(e.nodeName);if(We("uponSanitizeElement",e,{tagName:r,allowedTags:de}),("svg"===r||"math"===r)&&0!==e.querySelectorAll("p, br, form, table").length)return Ke(e),!0;if(!He(e.firstElementChild)&&(!He(e.content)||!He(e.content.firstElementChild))&&y(/<[!/\w]/g,e.innerHTML)&&y(/<[!/\w]/g,e.textContent))return Ke(e),!0;if(!de[r]||ve[r]){if(Oe&&!Le[r]&&"function"==typeof e.insertAdjacentHTML)try{var o=e.innerHTML;e.insertAdjacentHTML("AfterEnd",G?G.createHTML(o):o)}catch(Qe){}return Ke(e),!0}return"noscript"!==r&&"noembed"!==r||!y(/<\/no(script|embed)/i,e.innerHTML)?(we&&3===e.nodeType&&(n=e.textContent,n=g(n,ie," "),n=g(n,ae," "),e.textContent!==n&&(d(t.removed,{element:e.cloneNode()}),e.textContent=n)),We("afterSanitizeElements",e,null),!1):(Ke(e),!0)},Ge=function(e,t,n){if(Te&&("id"===t||"name"===t)&&(n in o||n in Fe))return!1;if(be&&y(ce,t));else if(ye&&y(ue,t));else{if(!he[t]||me[t])return!1;if(Pe[t]);else if(y(fe,g(n,le,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==v(n,"data:")||!Ve[e])if(xe&&!y(se,g(n,le,"")));else if(n)return!1}return!0},Xe=function(e){var n=void 0,r=void 0,o=void 0,i=void 0;We("beforeSanitizeAttributes",e,null);var a=e.attributes;if(a){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:he};for(i=a.length;i--;){var u=n=a[i],s=u.name,l=u.namespaceURI;if(r=m(n.value),o=p(s),c.attrName=o,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=undefined,We("uponSanitizeAttribute",e,c),r=c.attrValue,!c.forceKeepAttr&&(ze(s,e),c.keepAttr))if(y(/\/>/i,r))ze(s,e);else{we&&(r=g(r,ie," "),r=g(r,ae," "));var d=e.nodeName.toLowerCase();if(Ge(d,o,r))try{l?e.setAttributeNS(l,s,r):e.setAttribute(s,r),f(t.removed)}catch(Qe){}}}We("afterSanitizeAttributes",e,null)}},Ze=function Je(e){var t=void 0,n=Ue(e);for(We("beforeSanitizeShadowDOM",e,null);t=n.nextNode();)We("uponSanitizeShadowNode",t,null),qe(t)||(t.content instanceof i&&Je(t.content),Xe(t));We("afterSanitizeShadowDOM",e,null)};return t.sanitize=function(r,o){var a=void 0,u=void 0,s=void 0,l=void 0,f=void 0;if(r||(r="\x3c!--\x3e"),"string"!=typeof r&&!He(r)){if("function"!=typeof r.toString)throw b("toString is not a function");if("string"!=typeof(r=r.toString()))throw b("dirty is not a string, aborting")}if(!t.isSupported){if("object"===F(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof r)return e.toStaticHTML(r);if(He(r))return e.toStaticHTML(r.outerHTML)}return r}if(Ee||je(o),t.removed=[],"string"==typeof r&&(Ie=!1),Ie);else if(r instanceof c)1===(u=(a=Ye("\x3c!----\x3e")).ownerDocument.importNode(r,!0)).nodeType&&"BODY"===u.nodeName||"HTML"===u.nodeName?a=u:a.appendChild(u);else{if(!Se&&!we&&!_e&&-1===r.indexOf("<"))return G&&Ae?G.createHTML(r):r;if(!(a=Ye(r)))return Se?null:X}a&&ke&&Ke(a.firstChild);for(var d=Ue(Ie?r:a);s=d.nextNode();)3===s.nodeType&&s===l||qe(s)||(s.content instanceof i&&Ze(s.content),Xe(s),l=s);if(l=null,Ie)return r;if(Se){if(Ce)for(f=te.call(a.ownerDocument);a.firstChild;)f.appendChild(a.firstChild);else f=a;return Ne&&(f=ne.call(n,f,!0)),f}var p=_e?a.outerHTML:a.innerHTML;return we&&(p=g(p,ie," "),p=g(p,ae," ")),G&&Ae?G.createHTML(p):p},t.setConfig=function(e){je(e),Ee=!0},t.clearConfig=function(){De=null,Ee=!1},t.isValidAttribute=function(e,t,n){De||je({});var r=p(e),o=p(t);return Ge(r,o,n)},t.addHook=function(e,t){"function"==typeof t&&(oe[e]=oe[e]||[],d(oe[e],t))},t.removeHook=function(e){oe[e]&&f(oe[e])},t.removeHooks=function(e){oe[e]&&(oe[e]=[])},t.removeAllHooks=function(){oe={}},t}()}()},function(e,t,n){"use strict";e.exports=function(){function e(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(r=e[Symbol.iterator]()).next.bind(r)}var r=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}})),o=(r.defaults,r.getDefaults,r.changeDefaults,/[&<>"']/),i=/[&<>"']/g,a=/[<>"']|&(?!#?\w+;)/,c=/[<>"']|&(?!#?\w+;)/g,u={"&":"&","<":"<",">":">",'"':""","'":"'"},s=function(e){return u[e]},l=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function f(e){return e.replace(l,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var d=/(^|[^\[])\^/g,p=/[^\w:]/g,h=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i,g={},v=/^[^:]+:\/*[^/]*$/,m=/^([^:]+:)[\s\S]*$/,y=/^([^:]+:\/*[^/]*)[\s\S]*$/;function b(e,t){g[" "+e]||(v.test(e)?g[" "+e]=e+"/":g[" "+e]=x(e,"/",!0));var n=-1===(e=g[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(m,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(y,"$1")+t:e+t}function x(e,t,n){var r=e.length;if(0===r)return"";for(var o=0;o=0&&"\\"===n[o];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length1?{type:"space",raw:t[0]}:{raw:"\n"}},t.code=function(e,t){var n=this.rules.block.code.exec(e);if(n){var r=t[t.length-1];if(r&&"paragraph"===r.type)return{raw:n[0],text:n[0].trimRight()};var o=n[0].replace(/^ {4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?o:E(o,"\n")}}},t.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],r=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var r=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=r.length?e.slice(r.length):e})).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:r}}},t.heading=function(e){var t=this.rules.block.heading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[1].length,text:t[2]}},t.nptable=function(e){var t=this.rules.block.nptable.exec(e);if(t){var n={type:"table",header:k(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(n.header.length===n.align.length){var r,o=n.align.length;for(r=0;r ?/gm,"");return{type:"blockquote",raw:t[0],text:n}}},t.list=function(e){var t=this.rules.block.list.exec(e);if(t){for(var n,r,o,i,a,c,u,s=t[0],l=t[2],f=l.length>1,d=")"===l[l.length-1],p={type:"list",raw:s,ordered:f,start:f?+l.slice(0,-1):"",loose:!1,items:[]},h=t[0].match(this.rules.block.item),g=!1,v=h.length,m=0;m1||this.options.smartLists&&o!==l)&&(i=h.slice(m+1).join("\n"),p.raw=p.raw.substring(0,p.raw.length-i.length),m=v-1)),a=g||/\n\n(?!\s*$)/.test(n),m!==v-1&&(g="\n"===n.charAt(n.length-1),a||(a=g)),a&&(p.loose=!0),c=/^\[[ xX]\] /.test(n),u=undefined,c&&(u=" "!==n[1],n=n.replace(/^\[[ xX]\] +/,"")),p.items.push({type:"list_item",raw:s,task:c,checked:u,loose:a,text:n});return p}},t.html=function(e){var t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):S(t[0]):t[0]}},t.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}},t.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:k(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var r,o=n.align.length;for(r=0;r/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):S(r[0]):r[0]}},t.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=C(t[2],"()");if(n>-1){var r=(0===t[0].indexOf("!")?5:4)+t[1].length+n;t[2]=t[2].substring(0,n),t[0]=t[0].substring(0,r).trim(),t[3]=""}var o=t[2],i="";if(this.options.pedantic){var a=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(o);a?(o=a[1],i=a[3]):i=""}else i=t[3]?t[3].slice(1,-1):"";return N(t,{href:(o=o.trim().replace(/^<([\s\S]*)>$/,"$1"))?o.replace(this.rules.inline._escapes,"$1"):o,title:i?i.replace(this.rules.inline._escapes,"$1"):i},t[0])}},t.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var r=(n[2]||n[1]).replace(/\s+/g," ");if(!(r=t[r.toLowerCase()])||!r.href){var o=n[0].charAt(0);return{type:"text",raw:o,text:o}}return N(n,r,n[0])}},t.strong=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.strong.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var o,i="**"===r[0]?this.rules.inline.strong.endAst:this.rules.inline.strong.endUnd;for(i.lastIndex=0;null!=(r=i.exec(t));)if(o=this.rules.inline.strong.middle.exec(t.slice(0,r.index+3)))return{type:"strong",raw:e.slice(0,o[0].length),text:e.slice(2,o[0].length-2)}}},t.em=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.em.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var o,i="*"===r[0]?this.rules.inline.em.endAst:this.rules.inline.em.endUnd;for(i.lastIndex=0;null!=(r=i.exec(t));)if(o=this.rules.inline.em.middle.exec(t.slice(0,r.index+2)))return{type:"em",raw:e.slice(0,o[0].length),text:e.slice(1,o[0].length-1)}}},t.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),r=/[^ ]/.test(n),o=n.startsWith(" ")&&n.endsWith(" ");return r&&o&&(n=n.substring(1,n.length-1)),n=S(n,!0),{type:"codespan",raw:t[0],text:n}}},t.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},t.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[1]}},t.autolink=function(e,t){var n,r,o=this.rules.inline.autolink.exec(e);if(o)return r="@"===o[2]?"mailto:"+(n=S(this.options.mangle?t(o[1]):o[1])):n=S(o[1]),{type:"link",raw:o[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}},t.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var r,o;if("@"===n[2])o="mailto:"+(r=S(this.options.mangle?t(n[0]):n[0]));else{var i;do{i=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(i!==n[0]);r=S(n[0]),o="www."===n[1]?"http://"+r:r}return{type:"link",raw:n[0],text:r,href:o,tokens:[{type:"text",raw:r,text:r}]}}},t.inlineText=function(e,t,n){var r,o=this.rules.inline.text.exec(e);if(o)return r=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):S(o[0]):o[0]:S(this.options.smartypants?n(o[0]):o[0]),{type:"text",raw:o[0],text:r}},e}(),T=w.noopTest,O=w.edit,I=w.merge,M={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:T,table:T,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};M.def=O(M.def).replace("label",M._label).replace("title",M._title).getRegex(),M.bullet=/(?:[*+-]|\d{1,9}[.)])/,M.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,M.item=O(M.item,"gm").replace(/bull/g,M.bullet).getRegex(),M.list=O(M.list).replace(/bull/g,M.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+M.def.source+")").getRegex(),M._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",M._comment=//,M.html=O(M.html,"i").replace("comment",M._comment).replace("tag",M._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),M.paragraph=O(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.blockquote=O(M.blockquote).replace("paragraph",M.paragraph).getRegex(),M.normal=I({},M),M.gfm=I({},M.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n *([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n *\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),M.gfm.nptable=O(M.gfm.nptable).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.gfm.table=O(M.gfm.table).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.pedantic=I({},M.normal,{html:O("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",M._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:T,paragraph:O(M.normal._paragraph).replace("hr",M.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",M.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var L={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:T,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",strong:{start:/^(?:(\*\*(?=[*punctuation]))|\*\*)(?![\s])|__/,middle:/^\*\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*\*$|^__(?![\s])((?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?)__$/,endAst:/[^punctuation\s]\*\*(?!\*)|[punctuation]\*\*(?!\*)(?:(?=[punctuation\s]|$))/,endUnd:/[^\s]__(?!_)(?:(?=[punctuation\s])|$)/},em:{start:/^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,middle:/^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,endAst:/[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation\s]|$))/,endUnd:/[^\s]_(?!_)(?:(?=[punctuation\s])|$)/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:T,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};L.punctuation=O(L.punctuation).replace(/punctuation/g,L._punctuation).getRegex(),L._blockSkip="\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>",L._overlapSkip="__[^_]*?__|\\*\\*\\[^\\*\\]*?\\*\\*",L.em.start=O(L.em.start).replace(/punctuation/g,L._punctuation).getRegex(),L.em.middle=O(L.em.middle).replace(/punctuation/g,L._punctuation).replace(/overlapSkip/g,L._overlapSkip).getRegex(),L.em.endAst=O(L.em.endAst,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.em.endUnd=O(L.em.endUnd,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.strong.start=O(L.strong.start).replace(/punctuation/g,L._punctuation).getRegex(),L.strong.middle=O(L.strong.middle).replace(/punctuation/g,L._punctuation).replace(/blockSkip/g,L._blockSkip).getRegex(),L.strong.endAst=O(L.strong.endAst,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.strong.endUnd=O(L.strong.endUnd,"g").replace(/punctuation/g,L._punctuation).getRegex(),L.blockSkip=O(L._blockSkip,"g").getRegex(),L.overlapSkip=O(L._overlapSkip,"g").getRegex(),L._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,L._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,L._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,L.autolink=O(L.autolink).replace("scheme",L._scheme).replace("email",L._email).getRegex(),L._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,L.tag=O(L.tag).replace("comment",M._comment).replace("attribute",L._attribute).getRegex(),L._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,L._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,L._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,L.link=O(L.link).replace("label",L._label).replace("href",L._href).replace("title",L._title).getRegex(),L.reflink=O(L.reflink).replace("label",L._label).getRegex(),L.reflinkSearch=O(L.reflinkSearch,"g").replace("reflink",L.reflink).replace("nolink",L.nolink).getRegex(),L.normal=I({},L),L.pedantic=I({},L.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:O(/^!?\[(label)\]\((.*?)\)/).replace("label",L._label).getRegex(),reflink:O(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",L._label).getRegex()}),L.gfm=I({},L.normal,{escape:O(L.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var j=function(){function t(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||R,this.options.tokenizer=this.options.tokenizer||new A,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var t={block:P.normal,inline:B.normal};this.options.pedantic?(t.block=P.pedantic,t.inline=B.pedantic):this.options.gfm&&(t.block=P.gfm,this.options.breaks?t.inline=B.breaks:t.inline=B.gfm),this.tokenizer.rules=t}t.lex=function(e,n){return new t(n).lex(e)};var n,r,o,i=t.prototype;return i.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens},i.blockTokens=function(e,t,n){var r,o,i,a;for(void 0===t&&(t=[]),void 0===n&&(n=!0),e=e.replace(/^ +$/gm,"");e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e,t))e=e.substring(r.raw.length),r.type?t.push(r):((a=t[t.length-1]).raw+="\n"+r.raw,a.text+="\n"+r.text);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(c));)u.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,a.index)+"["+"a".repeat(a[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;e;)if(i=this.tokenizer.escape(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.tag(e,n,r))e=e.substring(i.raw.length),n=i.inLink,r=i.inRawBlock,t.push(i);else if(i=this.tokenizer.link(e))e=e.substring(i.raw.length),"link"===i.type&&(i.tokens=this.inlineTokens(i.text,[],!0,r)),t.push(i);else if(i=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(i.raw.length),"link"===i.type&&(i.tokens=this.inlineTokens(i.text,[],!0,r)),t.push(i);else if(i=this.tokenizer.strong(e,c,o))e=e.substring(i.raw.length),i.tokens=this.inlineTokens(i.text,[],n,r),t.push(i);else if(i=this.tokenizer.em(e,c,o))e=e.substring(i.raw.length),i.tokens=this.inlineTokens(i.text,[],n,r),t.push(i);else if(i=this.tokenizer.codespan(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.br(e))e=e.substring(i.raw.length),t.push(i);else if(i=this.tokenizer.del(e))e=e.substring(i.raw.length),i.tokens=this.inlineTokens(i.text,[],n,r),t.push(i);else if(i=this.tokenizer.autolink(e,F))e=e.substring(i.raw.length),t.push(i);else if(n||!(i=this.tokenizer.url(e,F))){if(i=this.tokenizer.inlineText(e,r,D))e=e.substring(i.raw.length),o=i.raw.slice(-1),t.push(i);else if(e){var s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(s)}}else e=e.substring(i.raw.length),t.push(i);return t},n=t,o=[{key:"rules",get:function(){return{block:P,inline:B}}}],(r=null)&&e(n.prototype,r),o&&e(n,o),t}(),K=r.defaults,z=w.cleanUrl,Y=w.escape,U=function(){function e(e){this.options=e||K}var t=e.prototype;return t.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var o=this.options.highlight(e,r);null!=o&&o!==e&&(n=!0,e=o)}return r?'
    '+(n?e:Y(e,!0))+"
    \n":"
    "+(n?e:Y(e,!0))+"
    \n"},t.blockquote=function(e){return"
    \n"+e+"
    \n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"},t.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},t.listitem=function(e){return"
  • "+e+"
  • \n"},t.checkbox=function(e){return" "},t.paragraph=function(e){return"

    "+e+"

    \n"},t.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},t.tablerow=function(e){return"\n"+e+"\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},t.strong=function(e){return""+e+""},t.em=function(e){return""+e+""},t.codespan=function(e){return""+e+""},t.br=function(){return this.options.xhtml?"
    ":"
    "},t.del=function(e){return""+e+""},t.link=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='
    "},t.image=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"},t.text=function(e){return e},e}(),$=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),H=function(){function e(){this.seen={}}return e.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t)){var n=t;do{this.seen[n]++,t=n+"-"+this.seen[n]}while(this.seen.hasOwnProperty(t))}return this.seen[t]=0,t},e}(),W=r.defaults,q=w.unescape,G=function(){function e(e){this.options=e||W,this.options.renderer=this.options.renderer||new U,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new $,this.slugger=new H}e.parse=function(t,n){return new e(n).parse(t)};var t=e.prototype;return t.parse=function(e,t){void 0===t&&(t=!0);var n,r,o,i,a,c,u,s,l,f,d,p,h,g,v,m,y,b,x="",w=e.length;for(n=0;n0&&"text"===v.tokens[0].type?(v.tokens[0].text=b+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=b+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:b}):g+=b),g+=this.parse(v.tokens,h),l+=this.renderer.listitem(g,y,m);x+=this.renderer.list(l,d,p);continue;case"html":x+=this.renderer.html(f.text);continue;case"paragraph":x+=this.renderer.paragraph(this.parseInline(f.tokens));continue;case"text":for(l=f.tokens?this.parseInline(f.tokens):f.text;n+1An error occurred:

    "+Q(u.message+"",!0)+"
    ";throw u}}return ne.options=ne.setOptions=function(e){return X(ne.defaults,e),ee(ne.defaults),ne},ne.getDefaults=J,ne.defaults=te,ne.use=function(e){var t=X({},e);if(e.renderer&&function(){var n=ne.defaults.renderer||new U,r=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,i=new Array(o),a=0;a.Flex__item--iefix{display:table-row!important}.Flex--iefix--column>.Flex__item--iefix--grow{height:100%!important}.Flex__item--iefix{display:table-cell!important;width:1%!important;min-width:99%}.Flex__item--iefix--grow{width:auto!important}.Flex--spacing--1{margin:0 -.25em}.Flex--spacing--1>.Flex__item{margin:0 .25em}.Flex--spacing--2{margin:0 -.5em}.Flex--spacing--2>.Flex__item{margin:0 .5em}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:hsla(0,0%,100%,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:transparent;stroke:hsla(0,0%,100%,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 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:.25em .5em;border:0;text-align:left;vertical-align:baseline}.LabeledList__label{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:transparent;transition:border-color .5s}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .5s,width .5s}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__content{padding:.66em .5em}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill .Section__content{flex-grow:1}.Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:scroll}.Section--level--1 .Section__titleText{font-size:1.1666666667em}.Section--level--2 .Section__titleText{font-size:1.0833333333em}.Section--level--3 .Section__titleText{font-size:1em}.Section--level--2,.Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.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 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__cell--header,.Table__row--header .Table__cell{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden}.Tabs--vertical{flex-direction:column}.Tabs--horizontal{margin-bottom:.5em}.Tabs--horizontal: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;color:hsla(0,0%,100%,.5);min-height:2.25em;min-width:4em}.Tab--selected{color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{margin-left:.25em}.Tab__left,.Tab__right{min-width:1.5em;text-align:center}.Tab__right{margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;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:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.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:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.Tooltip{position:absolute;top:0;left:0;right:0;bottom:0;font-style:normal;font-weight:400}.Tooltip:after{position:absolute;display:block;white-space:nowrap;z-index:2;padding:.5em .75em;transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;text-align:left;content:attr(data-tooltip);transition:all .15s;background-color:#000;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em}.Tooltip:hover:after{transition:all 70ms;pointer-events:none;visibility:visible;opacity:1}.Tooltip--long:after{width:20.8333333333em;white-space:normal}.Tooltip--top:after{bottom:100%;left:50%;transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom:after,.Tooltip--top:hover:after{transform:translateX(-50%) translateY(-.5em)}.Tooltip--bottom:after{top:100%;left:50%}.Tooltip--bottom:hover:after{transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom-left:after{top:100%;right:50%;transform:translateX(12px) translateY(-.5em)}.Tooltip--bottom-left:hover:after{transform:translateX(12px) translateY(.5em)}.Tooltip--bottom-right:after{top:100%;left:50%;transform:translateX(-12px) translateY(-.5em)}.Tooltip--bottom-right:hover:after{transform:translateX(-12px) translateY(.5em)}.Tooltip--left:after{top:50%;right:100%;transform:translateX(.5em) translateY(-50%)}.Tooltip--left:hover:after,.Tooltip--right:after{transform:translateX(-.5em) translateY(-50%)}.Tooltip--right:after{top:50%;left:100%}.Tooltip--right:hover:after{transform:translateX(.5em) translateY(-50%)}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid hsla(0,0%,54.9%,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{bottom:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(180deg,#202020 0,#202020)}.Window,.Window__titleBar{position:fixed;top:0;left:0}.Window__titleBar{z-index:1;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited,a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover,.popup .head{background:#999}.popup .head{color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:active,.popup input[type=text]:focus,.popup input[type=text]:hover{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.popup input[type=submit]:active,.popup input[type=submit]:focus,.popup input[type=submit]:hover{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:active,.motd a:hover,.motd a:link,.motd a:visited{color:#a4bad6}.admin,.adminooc,.bold,.looc,.medal,.name,.ooc,.prefix,.yell{font-weight:700}.emote,.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal}.ooc,em{font-weight:700}.ooc{color:#cca300}.looc{color:#69c;font-weight:700}.antagooc{color:#b8002e;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#3d5bc3;font-weight:700}.adminsay{color:#ff4500;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#5975da;font-weight:700}.mentorsay{color:#e236d8;font-weight:700}.mentorsay_admin{color:#8a2be2;font-weight:700}.name{font-weight:700}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:#0f0}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.yell{font-weight:700}.alert{color:#d82020}.emote{font-style:italic}.userdanger{font-weight:700;font-size:185%}.danger,.userdanger,.warning{color:#c51e1e}.warning{font-style:italic}.alertwarning{color:red;font-weight:700}.boldwarning{font-style:italic}.announce,.boldannounce,.boldwarning{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.tinynotice{font-size:85%}.smallnotice,.tinynotice{color:#6685f5;font-style:italic}.smallnotice{font-size:90%}.boldnotice{color:#6685f5;font-weight:700}.hear{font-style:italic}.adminnotice,.hear{color:#6685f5}.adminhelp{color:red;font-weight:700}.unconscious{color:#a4bad6;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.userlove{color:#ff42a6;font-weight:700;text-shadow:0 0 6px #82365e}.love,.userlove{font-style:italic}.love{color:#ff4591;text-shadow:0 0 6px #994449}.cult{color:#aa1c1c}.cultbold,.cultitalic{color:#aa1c1c;font-style:italic}.cultbold{font-weight:700}.cultboldtalic,.cultlarge{color:#aa1c1c;font-weight:700;font-size:185%}.narsie{font-size:925%}.narsie,.narsiesmall{color:#aa1c1c;font-weight:700}.narsiesmall{font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:700;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenbignotice,.revenboldnotice{color:#c099e2;font-weight:700}.revenbignotice{font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:185%}.umbra{color:#5000a0}.umbra_emphasis,.umbra_large{color:#5000a0;font-weight:700;font-style:italic}.umbra_large{font-size:3}.deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.brass,.heavy_brass{color:#be8700}.heavy_brass{font-weight:700;font-style:italic}.large_brass{color:#be8700;font-size:185%}.big_brass{font-size:185%}.big_brass,.ratvar{color:#be8700;font-weight:700;font-style:italic}.ratvar{font-size:6}.alloy{color:#42474d}.heavy_alloy,.nezbere_large{color:#42474d;font-weight:700;font-style:italic}.nezbere_large{font-size:185%}.nezbere{font-weight:700;font-style:italic}.nezbere,.nezbere_small{color:#42474d}.sevtug_large{font-size:185%}.sevtug,.sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.sevtug_small{color:#af0aaf}.inathneq_large{font-size:185%}.inathneq,.inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.inathneq_small{color:#1e8ce1}.nzcrentr_large{font-size:185%}.nzcrentr,.nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.nzcrentr_small{color:#daaa18}.neovgre_large{font-size:185%}.neovgre,.neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.neovgre_small{color:#6e001a}.ghostalert{color:#60f;font-style:italic;font-weight:700}.alien{color:#855d85}.alertalien,.noticealien{color:#059223}.alertalien{font-weight:700}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red}.alertsyndie,.spider{font-size:185%;font-weight:700}.spider{color:#80f}.interface{color:#750e75}.sans{font-family:Comic Sans MS,cursive,sans-serif}.papyrus{font-family:Papyrus,cursive,sans-serif}.robot{font-family:Courier New,cursive,sans-serif}.command_headset{font-weight:700;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.yellowtext{color:#fc0;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.spooky{color:#ff9100}.hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}.velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}.phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}.icon{height:1em;width:auto}.memo{color:#638500}.memo,.memoedit{text-align:center}.memoedit{font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:700}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden}.theme-light .Tabs--vertical{flex-direction:column}.theme-light .Tabs--horizontal{margin-bottom:.5em}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-light .Tab--selected{color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.theme-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#353535}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill .Section__content{flex-grow:1}.theme-light .Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:scroll}.theme-light .Section--level--1 .Section__titleText{font-size:1.1666666667em}.theme-light .Section--level--2 .Section__titleText{font-size:1.0833333333em}.theme-light .Section--level--3 .Section__titleText{font-size:1em}.theme-light .Section--level--2,.theme-light .Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .far,.theme-light .Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .far,.theme-light .Button--hasContent .fas{margin-right:.25em}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--black:focus,.theme-light .Button--color--black:hover{background-color:#0a0a0a;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--white:focus,.theme-light .Button--color--white:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--red:focus,.theme-light .Button--color--red:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--orange:focus,.theme-light .Button--color--orange:hover{background-color:#d76316;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--yellow:focus,.theme-light .Button--color--yellow:hover{background-color:#d7b90d;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--olive:focus,.theme-light .Button--color--olive:hover{background-color:#9cae1d;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--green:focus,.theme-light .Button--color--green:hover{background-color:#24993f;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--teal:focus,.theme-light .Button--color--teal:hover{background-color:#0a9c95;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--blue:focus,.theme-light .Button--color--blue:hover{background-color:#2475b1;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--violet:focus,.theme-light .Button--color--violet:hover{background-color:#5a35ac;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--purple:focus,.theme-light .Button--color--purple:hover{background-color:#8d33ab;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--pink:focus,.theme-light .Button--color--pink:hover{background-color:#ce2985;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--brown:focus,.theme-light .Button--color--brown:hover{background-color:#8f5d3c;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--grey:focus,.theme-light .Button--color--grey:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--good:focus,.theme-light .Button--color--good:hover{background-color:#539329;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--average:focus,.theme-light .Button--color--average:hover{background-color:#cd7d16;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--bad:focus,.theme-light .Button--color--bad:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--label:focus,.theme-light .Button--color--label:hover{background-color:#393939;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--default:focus,.theme-light .Button--color--default:hover{background-color:#d3d3d3;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--caution:focus,.theme-light .Button--color--caution:hover{background-color:#d67313;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--danger:focus,.theme-light .Button--color--danger:hover{background-color:#afb30a;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:hsla(0,0%,93.3%,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--transparent:focus,.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color .1s,background-color .1s}.theme-light .Button--selected:focus,.theme-light .Button--selected:hover{background-color:#107ad0;color:#fff}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;text-align:right}.theme-light .Input,.theme-light .NumberInput__input{line-height:1.4166666667em;background-color:#fff;color:#000}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;padding:0 .3333333333em;margin-right:.1666666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#fff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .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:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:transparent;line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:hsla(0,0%,100%,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:transparent;stroke:hsla(0,0%,100%,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Slider{cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:transparent;transition:border-color .5s}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(180deg,#eee 0,#eee)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,98.8%,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s,background-color .25s}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light body,.theme-light html{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#e0e0e0;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.visited,.theme-light a:visited{color:#f0f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus,.theme-light .popup input[type=text]:hover{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:active,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:hover{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:active,.theme-light .motd a:hover,.theme-light .motd a:link,.theme-light .motd a:visited{color:#638500}.theme-light .admin,.theme-light .adminooc,.theme-light .bold,.theme-light .looc,.theme-light .medal,.theme-light .name,.theme-light .ooc,.theme-light .prefix,.theme-light .yell{font-weight:700}.theme-light .emote,.theme-light .italic,.theme-light .italics{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .ooc{color:#002eb8;font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .antagooc{color:#b8002e;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#700038;font-weight:700}.theme-light .adminsay{color:#ff4500;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#4473ff;font-weight:700}.theme-light .mentorsay{color:#e236d8;font-weight:700}.theme-light .mentorsay_admin{color:#8a2be2;font-weight:700}.theme-light .name{font-weight:700}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:#0f0}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#948f02}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#337296}.theme-light .engradio{color:#fb5613}.theme-light .suppradio{color:#a8732b}.theme-light .servradio{color:#6eaa2c}.theme-light .syndradio{color:#6d3f40}.theme-light .centcomradio{color:#686868}.theme-light .aiprivradio{color:#f0f}.theme-light .redteamradio{color:red}.theme-light .blueteamradio{color:#00f}.theme-light .yell{font-weight:700}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .emote{font-style:italic}.theme-light .userdanger{font-size:185%}.theme-light .bolddanger,.theme-light .userdanger{color:red;font-weight:700}.theme-light .danger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:700}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .announce{color:#228b22;font-weight:700}.theme-light .boldannounce{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .tinynotice{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:#00f}.theme-light .adminhelp{color:red;font-weight:700}.theme-light .unconscious{color:#00f;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .red{color:red}.theme-light .blue{color:#00f}.theme-light .nicegreen{color:#14a833}.theme-light .userlove{color:#ff1493;font-style:italic;font-weight:700;text-shadow:0 0 6px #ff6dbc}.theme-light .love{color:#ff006a;font-style:italic;text-shadow:0 0 6px #ff6d6d}.theme-light .cult{color:#960000}.theme-light .cultbold,.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultbold{font-weight:700}.theme-light .cultboldtalic,.theme-light .cultlarge{color:#960000;font-weight:700;font-size:185%}.theme-light .narsie{color:#960000;font-weight:700;font-size:925%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{font-weight:700}.theme-light .hierophant,.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenbignotice,.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-light .umbra{color:#5000a0}.theme-light .umbra_emphasis,.theme-light .umbra_large{color:#5000a0;font-weight:700;font-style:italic}.theme-light .umbra_large{font-size:3}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .brass{color:#be8700}.theme-light .heavy_brass{color:#be8700;font-weight:700;font-style:italic}.theme-light .big_brass,.theme-light .large_brass{color:#be8700;font-size:185%}.theme-light .big_brass,.theme-light .ratvar{font-weight:700;font-style:italic}.theme-light .ratvar{color:#be8700;font-size:6}.theme-light .alloy{color:#42474d}.theme-light .heavy_alloy,.theme-light .nezbere_large{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_large{font-size:185%}.theme-light .nezbere{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_small{color:#42474d}.theme-light .sevtug_large{font-size:185%}.theme-light .sevtug,.theme-light .sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.theme-light .sevtug_small{color:#af0aaf}.theme-light .inathneq_large{font-size:185%}.theme-light .inathneq,.theme-light .inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.theme-light .inathneq_small{color:#1e8ce1}.theme-light .nzcrentr_large{font-size:185%}.theme-light .nzcrentr,.theme-light .nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.theme-light .nzcrentr_small{color:#daaa18}.theme-light .neovgre_large{font-size:185%}.theme-light .neovgre,.theme-light .neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.theme-light .neovgre_small{color:#6e001a}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-light .spider{color:#4d004d;font-weight:700;font-size:185%}.theme-light .interface{color:#303}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-light .robot{font-family:Courier New,cursive,sans-serif}.theme-light .command_headset{font-weight:700;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:#0f0;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .yellowtext{color:#fc0;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-light .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .spooky{color:#ff9100}.theme-light .hypnophrase{color:#0d0d0d;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}to{color:#3bb5d3}}.theme-light .velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}@keyframes velvet{0%{color:#400020}40%{color:red}50%{color:#f88}60%{color:red}to{color:#400020}}.theme-light .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}to{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:700;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .monkeyhive{color:#774704}.theme-light .monkeylead{color:#774704;font-size:80%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em} \ No newline at end of file +body,html{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:.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}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.debug-layout,.debug-layout :not(g):not(path){color:hsla(0,0%,100%,.9)!important;background:transparent!important;outline:1px solid hsla(0,0%,100%,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout :not(g):not(path):hover{outline-color:hsla(0,0%,100%,.8)!important}.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}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.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:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .far,.Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .far,.Button--hasContent .fas{margin-right:.25em}.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 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color .1s,background-color .1s}.Button--color--black:focus,.Button--color--black:hover{background-color:#0a0a0a;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color .1s,background-color .1s}.Button--color--white:focus,.Button--color--white:hover{background-color:#f3f3f3;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color .1s,background-color .1s}.Button--color--red:focus,.Button--color--red:hover{background-color:#d52b2b;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color .1s,background-color .1s}.Button--color--orange:focus,.Button--color--orange:hover{background-color:#ed6f1d;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color .1s,background-color .1s}.Button--color--yellow:focus,.Button--color--yellow:hover{background-color:#f3d00e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color .1s,background-color .1s}.Button--color--olive:focus,.Button--color--olive:hover{background-color:#afc41f;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color .1s,background-color .1s}.Button--color--green:focus,.Button--color--green:hover{background-color:#27ab46;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color .1s,background-color .1s}.Button--color--teal:focus,.Button--color--teal:hover{background-color:#0aafa8;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color .1s,background-color .1s}.Button--color--blue:focus,.Button--color--blue:hover{background-color:#2883c8;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color .1s,background-color .1s}.Button--color--violet:focus,.Button--color--violet:hover{background-color:#653ac1;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color .1s,background-color .1s}.Button--color--purple:focus,.Button--color--purple:hover{background-color:#9e38c1;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color .1s,background-color .1s}.Button--color--pink:focus,.Button--color--pink:hover{background-color:#dd3794;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color .1s,background-color .1s}.Button--color--brown:focus,.Button--color--brown:hover{background-color:#a06844;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color .1s,background-color .1s}.Button--color--grey:focus,.Button--color--grey:hover{background-color:#757575;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color .1s,background-color .1s}.Button--color--good:focus,.Button--color--good:hover{background-color:#5da52d;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color .1s,background-color .1s}.Button--color--average:focus,.Button--color--average:hover{background-color:#e68d18;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color .1s,background-color .1s}.Button--color--bad:focus,.Button--color--bad:hover{background-color:#d52b2b;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color .1s,background-color .1s}.Button--color--label:focus,.Button--color--label:hover{background-color:#7b8da4;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color .1s,background-color .1s}.Button--color--default:focus,.Button--color--default:hover{background-color:#4c729d;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color .1s,background-color .1s}.Button--color--caution:focus,.Button--color--caution:hover{background-color:#f3d00e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color .1s,background-color .1s}.Button--color--danger:focus,.Button--color--danger:hover{background-color:#d52b2b;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:hsla(0,0%,100%,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color .1s,background-color .1s}.Button--color--transparent:focus,.Button--color--transparent:hover{background-color:#2c2c2c;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color .1s,background-color .1s}.Button--selected:focus,.Button--selected:hover{background-color:#27ab46;color:#fff}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid hsla(0,0%,100%,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid hsla(0,0%,100%,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.5em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;overflow-y:scroll}.Dropdown__menu,.Dropdown__menu-noscroll{position:absolute;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{overflow-y:auto}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s}.Dropdown__menuentry:hover{background-color:hsla(0,0%,100%,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:table!important;width:105%;border-collapse:collapse;border-spacing:0}.Flex--iefix:after{content:"";display:table-cell;width:5%}.Flex--iefix--column{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Flex--iefix--column>.Flex__item--iefix{display:table-row!important}.Flex--iefix--column>.Flex__item--iefix--grow{height:100%!important}.Flex__item--iefix{display:table-cell!important;width:1%!important;min-width:99%}.Flex__item--iefix--grow{width:auto!important}.Flex--spacing--1{margin:0 -.25em}.Flex--spacing--1>.Flex__item{margin:0 .25em}.Flex--spacing--2{margin:0 -.5em}.Flex--spacing--2>.Flex__item{margin:0 .5em}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:hsla(0,0%,100%,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:transparent;stroke:hsla(0,0%,100%,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 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:.25em .5em;border:0;text-align:left;vertical-align:baseline}.LabeledList__label{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:transparent;transition:border-color .5s}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .5s,width .5s}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__content{padding:.66em .5em}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill .Section__content{flex-grow:1}.Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:scroll}.Section--level--1 .Section__titleText{font-size:1.1666666667em}.Section--level--2 .Section__titleText{font-size:1.0833333333em}.Section--level--3 .Section__titleText{font-size:1em}.Section--level--2,.Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.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 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__cell--header,.Table__row--header .Table__cell{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden}.Tabs--vertical{flex-direction:column}.Tabs--horizontal{margin-bottom:.5em}.Tabs--horizontal: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;color:hsla(0,0%,100%,.5);min-height:2.25em;min-width:4em}.Tab--selected{color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{margin-left:.25em}.Tab__left,.Tab__right{min-width:1.5em;text-align:center}.Tab__right{margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;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:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.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:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.Tooltip{position:absolute;top:0;left:0;right:0;bottom:0;font-style:normal;font-weight:400}.Tooltip:after{position:absolute;display:block;white-space:nowrap;z-index:2;padding:.5em .75em;transform:translateX(-50%);pointer-events:none;visibility:hidden;opacity:0;text-align:left;content:attr(data-tooltip);transition:all .15s;background-color:#000;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em}.Tooltip:hover:after{transition:all 70ms;pointer-events:none;visibility:visible;opacity:1}.Tooltip--long:after{width:20.8333333333em;white-space:normal}.Tooltip--top:after{bottom:100%;left:50%;transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom:after,.Tooltip--top:hover:after{transform:translateX(-50%) translateY(-.5em)}.Tooltip--bottom:after{top:100%;left:50%}.Tooltip--bottom:hover:after{transform:translateX(-50%) translateY(.5em)}.Tooltip--bottom-left:after{top:100%;right:50%;transform:translateX(12px) translateY(-.5em)}.Tooltip--bottom-left:hover:after{transform:translateX(12px) translateY(.5em)}.Tooltip--bottom-right:after{top:100%;left:50%;transform:translateX(-12px) translateY(-.5em)}.Tooltip--bottom-right:hover:after{transform:translateX(-12px) translateY(.5em)}.Tooltip--left:after{top:50%;right:100%;transform:translateX(.5em) translateY(-50%)}.Tooltip--left:hover:after,.Tooltip--right:after{transform:translateX(-.5em) translateY(-50%)}.Tooltip--right:after{top:50%;left:100%}.Tooltip--right:hover:after{transform:translateX(.5em) translateY(-50%)}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid hsla(0,0%,54.9%,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{bottom:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(180deg,#202020 0,#202020)}.Window,.Window__titleBar{position:fixed;top:0;left:0}.Window__titleBar{z-index:1;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited,a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover,.popup .head{background:#999}.popup .head{color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:active,.popup input[type=text]:focus,.popup input[type=text]:hover{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.popup input[type=submit]:active,.popup input[type=submit]:focus,.popup input[type=submit]:hover{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:active,.motd a:hover,.motd a:link,.motd a:visited{color:#a4bad6}.admin,.adminooc,.bold,.looc,.medal,.name,.ooc,.prefix,.yell{font-weight:700}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal}.ooc,em{font-weight:700}.ooc{color:#cca300}.looc{color:#69c;font-weight:700}.antagooc{color:#b8002e;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#3d5bc3;font-weight:700}.adminsay{color:#ff4500;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#5975da;font-weight:700}.mentorsay{color:#e236d8;font-weight:700}.mentorsay_admin{color:#8a2be2;font-weight:700}.name{font-weight:700}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:#0f0}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.yell{font-weight:700}.alert{color:#d82020}.userdanger{font-weight:700;font-size:185%}.danger,.userdanger,.warning{color:#c51e1e}.warning{font-style:italic}.alertwarning{color:red;font-weight:700}.boldwarning{font-style:italic}.announce,.boldannounce,.boldwarning{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.tinynotice{font-size:85%}.smallnotice,.tinynotice{color:#6685f5;font-style:italic}.smallnotice{font-size:90%}.boldnotice{color:#6685f5;font-weight:700}.hear{font-style:italic}.adminnotice,.hear{color:#6685f5}.adminhelp{color:red;font-weight:700}.unconscious{color:#a4bad6;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.userlove{color:#ff42a6;font-weight:700;text-shadow:0 0 6px #82365e}.love,.userlove{font-style:italic}.love{color:#ff4591;text-shadow:0 0 6px #994449}.cult{color:#aa1c1c}.cultbold,.cultitalic{color:#aa1c1c;font-style:italic}.cultbold{font-weight:700}.cultboldtalic,.cultlarge{color:#aa1c1c;font-weight:700;font-size:185%}.narsie{font-size:925%}.narsie,.narsiesmall{color:#aa1c1c;font-weight:700}.narsiesmall{font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:700;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenbignotice,.revenboldnotice{color:#c099e2;font-weight:700}.revenbignotice{font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:185%}.umbra{color:#5000a0}.umbra_emphasis,.umbra_large{color:#5000a0;font-weight:700;font-style:italic}.umbra_large{font-size:3}.deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.brass,.heavy_brass{color:#be8700}.heavy_brass{font-weight:700;font-style:italic}.large_brass{color:#be8700;font-size:185%}.big_brass{font-size:185%}.big_brass,.ratvar{color:#be8700;font-weight:700;font-style:italic}.ratvar{font-size:6}.alloy{color:#42474d}.heavy_alloy,.nezbere_large{color:#42474d;font-weight:700;font-style:italic}.nezbere_large{font-size:185%}.nezbere{font-weight:700;font-style:italic}.nezbere,.nezbere_small{color:#42474d}.sevtug_large{font-size:185%}.sevtug,.sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.sevtug_small{color:#af0aaf}.inathneq_large{font-size:185%}.inathneq,.inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.inathneq_small{color:#1e8ce1}.nzcrentr_large{font-size:185%}.nzcrentr,.nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.nzcrentr_small{color:#daaa18}.neovgre_large{font-size:185%}.neovgre,.neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.neovgre_small{color:#6e001a}.ghostalert{color:#60f;font-style:italic;font-weight:700}.alien{color:#855d85}.alertalien,.noticealien{color:#059223}.alertalien{font-weight:700}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red}.alertsyndie,.spider{font-size:185%;font-weight:700}.spider{color:#80f}.interface{color:#750e75}.sans{font-family:Comic Sans MS,cursive,sans-serif}.papyrus{font-family:Papyrus,cursive,sans-serif}.robot{font-family:Courier New,cursive,sans-serif}.command_headset{font-weight:700;font-size:125%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.yellowtext{color:#fc0;font-size:185%}.clown{color:#ff70c1;font-size:125%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.spooky{color:#ff9100}.hypnophrase{color:#202020;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}.velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}.phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}.icon{height:1em;width:auto}.memo{color:#638500}.memo,.memoedit{text-align:center}.memoedit{font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:700;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:700}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden}.theme-light .Tabs--vertical{flex-direction:column}.theme-light .Tabs--horizontal{margin-bottom:.5em}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-light .Tab--selected{color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent}.theme-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#353535}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill .Section__content{flex-grow:1}.theme-light .Section--iefix.Section--fill{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--iefix.Section--fill .Section__content{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:scroll}.theme-light .Section--level--1 .Section__titleText{font-size:1.1666666667em}.theme-light .Section--level--2 .Section__titleText{font-size:1.0833333333em}.theme-light .Section--level--3 .Section__titleText{font-size:1em}.theme-light .Section--level--2,.theme-light .Section--level--3{background-color:transparent;box-shadow:none;margin-left:-.5em;margin-right:-.5em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .far,.theme-light .Button .fas{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .far,.theme-light .Button--hasContent .fas{margin-right:.25em}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--black:focus,.theme-light .Button--color--black:hover{background-color:#0a0a0a;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--white:focus,.theme-light .Button--color--white:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--red:focus,.theme-light .Button--color--red:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--orange:focus,.theme-light .Button--color--orange:hover{background-color:#d76316;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--yellow:focus,.theme-light .Button--color--yellow:hover{background-color:#d7b90d;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--olive:focus,.theme-light .Button--color--olive:hover{background-color:#9cae1d;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--green:focus,.theme-light .Button--color--green:hover{background-color:#24993f;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--teal:focus,.theme-light .Button--color--teal:hover{background-color:#0a9c95;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--blue:focus,.theme-light .Button--color--blue:hover{background-color:#2475b1;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--violet:focus,.theme-light .Button--color--violet:hover{background-color:#5a35ac;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--purple:focus,.theme-light .Button--color--purple:hover{background-color:#8d33ab;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--pink:focus,.theme-light .Button--color--pink:hover{background-color:#ce2985;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--brown:focus,.theme-light .Button--color--brown:hover{background-color:#8f5d3c;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--grey:focus,.theme-light .Button--color--grey:hover{background-color:#d7d7d7;color:#000}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--good:focus,.theme-light .Button--color--good:hover{background-color:#539329;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--average:focus,.theme-light .Button--color--average:hover{background-color:#cd7d16;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--bad:focus,.theme-light .Button--color--bad:hover{background-color:#bc2828;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--label:focus,.theme-light .Button--color--label:hover{background-color:#393939;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--default:focus,.theme-light .Button--color--default:hover{background-color:#d3d3d3;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--caution:focus,.theme-light .Button--color--caution:hover{background-color:#d67313;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--danger:focus,.theme-light .Button--color--danger:hover{background-color:#afb30a;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:hsla(0,0%,93.3%,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color .1s,background-color .1s}.theme-light .Button--color--transparent:focus,.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color .1s,background-color .1s}.theme-light .Button--selected:focus,.theme-light .Button--selected:hover{background-color:#107ad0;color:#fff}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;text-align:right}.theme-light .Input,.theme-light .NumberInput__input{line-height:1.4166666667em;background-color:#fff;color:#000}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;padding:0 .3333333333em;margin-right:.1666666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#fff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .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:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:hsla(0,0%,100%,.45)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:transparent;line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(180deg,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,0));border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:hsla(0,0%,100%,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:transparent;stroke:hsla(0,0%,100%,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Slider{cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:transparent;transition:border-color .5s}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(180deg,#eee 0,#eee)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,98.8%,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s,background-color .25s}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light body,.theme-light html{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#e0e0e0;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.visited,.theme-light a:visited{color:#f0f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus,.theme-light .popup input[type=text]:hover{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:active,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:hover{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:active,.theme-light .motd a:hover,.theme-light .motd a:link,.theme-light .motd a:visited{color:#638500}.theme-light .admin,.theme-light .adminooc,.theme-light .bold,.theme-light .looc,.theme-light .medal,.theme-light .name,.theme-light .ooc,.theme-light .prefix,.theme-light .yell{font-weight:700}.theme-light .italic,.theme-light .italics{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .ooc{color:#002eb8;font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .antagooc{color:#b8002e;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#700038;font-weight:700}.theme-light .adminsay{color:#ff4500;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#4473ff;font-weight:700}.theme-light .mentorsay{color:#e236d8;font-weight:700}.theme-light .mentorsay_admin{color:#8a2be2;font-weight:700}.theme-light .name{font-weight:700}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:#0f0}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#948f02}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#337296}.theme-light .engradio{color:#fb5613}.theme-light .suppradio{color:#a8732b}.theme-light .servradio{color:#6eaa2c}.theme-light .syndradio{color:#6d3f40}.theme-light .centcomradio{color:#686868}.theme-light .aiprivradio{color:#f0f}.theme-light .redteamradio{color:red}.theme-light .blueteamradio{color:#00f}.theme-light .yell{font-weight:700}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .userdanger{font-size:185%}.theme-light .bolddanger,.theme-light .userdanger{color:red;font-weight:700}.theme-light .danger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:700}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .announce{color:#228b22;font-weight:700}.theme-light .boldannounce{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .tinynotice{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:#00f}.theme-light .adminhelp{color:red;font-weight:700}.theme-light .unconscious{color:#00f;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .red{color:red}.theme-light .blue{color:#00f}.theme-light .nicegreen{color:#14a833}.theme-light .userlove{color:#ff1493;font-style:italic;font-weight:700;text-shadow:0 0 6px #ff6dbc}.theme-light .love{color:#ff006a;font-style:italic;text-shadow:0 0 6px #ff6d6d}.theme-light .cult{color:#960000}.theme-light .cultbold,.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultbold{font-weight:700}.theme-light .cultboldtalic,.theme-light .cultlarge{color:#960000;font-weight:700;font-size:185%}.theme-light .narsie{color:#960000;font-weight:700;font-size:925%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{font-weight:700}.theme-light .hierophant,.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenbignotice,.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:185%}.theme-light .umbra{color:#5000a0}.theme-light .umbra_emphasis,.theme-light .umbra_large{color:#5000a0;font-weight:700;font-style:italic}.theme-light .umbra_large{font-size:3}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .brass{color:#be8700}.theme-light .heavy_brass{color:#be8700;font-weight:700;font-style:italic}.theme-light .big_brass,.theme-light .large_brass{color:#be8700;font-size:185%}.theme-light .big_brass,.theme-light .ratvar{font-weight:700;font-style:italic}.theme-light .ratvar{color:#be8700;font-size:6}.theme-light .alloy{color:#42474d}.theme-light .heavy_alloy,.theme-light .nezbere_large{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_large{font-size:185%}.theme-light .nezbere{color:#42474d;font-weight:700;font-style:italic}.theme-light .nezbere_small{color:#42474d}.theme-light .sevtug_large{font-size:185%}.theme-light .sevtug,.theme-light .sevtug_large{color:#af0aaf;font-weight:700;font-style:italic}.theme-light .sevtug_small{color:#af0aaf}.theme-light .inathneq_large{font-size:185%}.theme-light .inathneq,.theme-light .inathneq_large{color:#1e8ce1;font-weight:700;font-style:italic}.theme-light .inathneq_small{color:#1e8ce1}.theme-light .nzcrentr_large{font-size:185%}.theme-light .nzcrentr,.theme-light .nzcrentr_large{color:#daaa18;font-weight:700;font-style:italic}.theme-light .nzcrentr_small{color:#daaa18}.theme-light .neovgre_large{font-size:185%}.theme-light .neovgre,.theme-light .neovgre_large{color:#6e001a;font-weight:700;font-style:italic}.theme-light .neovgre_small{color:#6e001a}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:700}.theme-light .spider{color:#4d004d;font-weight:700;font-size:185%}.theme-light .interface{color:#303}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .papyrus{font-family:Papyrus,cursive,sans-serif}.theme-light .robot{font-family:Courier New,cursive,sans-serif}.theme-light .command_headset{font-weight:700;font-size:125%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:#0f0;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .yellowtext{color:#fc0;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:125%;font-family:Comic Sans MS,cursive,sans-serif;font-weight:700}.theme-light .singing{font-family:Trebuchet MS,cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .spooky{color:#ff9100}.theme-light .hypnophrase{color:#0d0d0d;font-weight:700;animation:hypnocolor 1.5s infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}to{color:#3bb5d3}}.theme-light .velvet{color:#660015;font-weight:700;animation:velvet 5s infinite;animation-direction:alternate}@keyframes velvet{0%{color:#400020}40%{color:red}50%{color:#f88}60%{color:red}to{color:#400020}}.theme-light .phobia{color:#d00;font-weight:700;animation:phobia .75s infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}to{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:700;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .monkeyhive{color:#774704}.theme-light .monkeylead{color:#774704;font-size:80%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em} \ No newline at end of file diff --git a/tools/CreditsTool/remappings.txt b/tools/CreditsTool/remappings.txt index ac57d4b873..18abb0a772 100644 --- a/tools/CreditsTool/remappings.txt +++ b/tools/CreditsTool/remappings.txt @@ -1,20 +1,20 @@ -# To make your name something other than your github name type it in the format " -# e.g. -# Cyberboss Jordan Brown -# To suppress your name from appearing in the credits do " __REMOVE__ -# e.g. -# Cyberboss __REMOVE__ - -tgstation-server Thanks for playing! - -optimumtact oranges -qustinnus Floyd / Qustinnus -catalystfd __REMOVE__ -TheVekter Vekter -ChangelingRain Joan -NewSta1 NewSta -theOperand Miauw -PraiseRatvar Frozenguy5 -FuryMcFlurry Fury McFlurry -vuonojenmustaturska Naksu -praisenarsie Frozenguy5 +# To make your name something other than your github name type it in the format " +# e.g. +# Cyberboss Jordan Brown +# To suppress your name from appearing in the credits do " __REMOVE__ +# e.g. +# Cyberboss __REMOVE__ + +tgstation-server Thanks for playing! + +optimumtact oranges +qustinnus Floyd / Qustinnus +catalystfd __REMOVE__ +TheVekter Vekter +ChangelingRain Joan +NewSta1 NewSta +theOperand Miauw +PraiseRatvar Frozenguy5 +FuryMcFlurry Fury McFlurry +vuonojenmustaturska Naksu +praisenarsie Frozenguy5 diff --git a/tools/Runtime Condenser/Main.cpp b/tools/Runtime Condenser/Main.cpp index 0161bb47a9..239ded0add 100644 --- a/tools/Runtime Condenser/Main.cpp +++ b/tools/Runtime Condenser/Main.cpp @@ -1,418 +1,418 @@ -/* Runtime Condenser by Nodrak - * Cleaned up and refactored by MrStonedOne - * This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance - * of the runtime will log the source, usr and src, the rest will just add to the total. Infinite loops will - * also be caught and displayed (if any) above the list of runtimes. - * - * How to use: - * 1) Copy and paste your list of runtimes from Dream Daemon into input.exe - * 2) Run RuntimeCondenser.exe - * 3) Open output.txt for a condensed report of the runtimes - * - * How to compile: - * Requires visual c++ compiler 2012 or any linux compiler with c++11 support. - * Windows: - * Normal: cl.exe /EHsc /Ox /Qpar Main.cpp - * Debug: cl.exe /EHsc /Zi Main.cpp - * Linux: - * Normal: g++ -O3 -std=c++11 Main.cpp -o rc - * Debug: g++ -g -Og -std=c++11 Main.cpp -o rc - * Any Compile errors most likely indicate lack of c++11 support. Google how to upgrade or nag coderbus for help.. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -#define PROGRESS_FPS 10 -#define PROGRESS_BAR_INNER_WIDTH 50 -#define LINEBUFFER (32*1024) //32KiB - -using namespace std; - -struct runtime { - string text; - string proc; - string source; - string usr; - string src; - string loc; - unsigned int count; -}; -struct harddel { - string type; - unsigned int count; -}; -//What we use to read input -string * lastLine = new string(); -string * currentLine = new string(); -string * nextLine = new string(); - -//Stores lines we want to keep to print out -unordered_map storedRuntime; -unordered_map storedInfiniteLoop; -unordered_map storedHardDel; - -//Stat tracking stuff for output -unsigned int totalRuntimes = 0; -unsigned int totalInfiniteLoops = 0; -unsigned int totalHardDels = 0; - - -bool endofbuffer = false; -//like substr, but returns an empty string if the string is smaller then start, rather then an exception. -inline string safe_substr(string * S, size_t start = 0, size_t end = string::npos) { - if (start > S->length()) - start = S->length(); - return S->substr(start, end); -} -//getline() is slow as fucking balls. this is quicker because we prefill a buffer rather then read 1 byte at a time searching for newlines, lowering on i/o calls and overhead. (110MB/s vs 40MB/s on a 1.8GB file pre-filled into the disk cache) -//if i wanted to make it even faster, I'd use a reading thread, a new line searching thread, another thread or four for searching for runtimes in the list to see if they are unique, and finally the main thread for displaying the progress bar. but fuck that noise. -inline string * readline(FILE * f) { - static char buf[LINEBUFFER]; - static size_t pos = 0; - static size_t size = 0; - - for (size_t i = pos; i < LINEBUFFER; i++) { - char c = buf[i]; - if (i >= size && (pos || i < LINEBUFFER-1)) { - if (feof(f) || ferror(f)) - break; - if (size && pos) { //move current stuff to start of buffer - size -= pos; - i -= pos; - memmove(buf, &buf[pos], size); - } - //fill remaining buffer - size += fread(&buf[i], 1, LINEBUFFER-size-1, f); - pos = 0; - c = buf[i]; - } - if (c == '\n') { - //trim off any newlines from the start - while (i > pos && (buf[pos] == '\r' || buf[pos] == '\n')) - pos++; - string * s = new string(&buf[pos], i-pos); - pos = i+1; - return s; - } - - } - string * s = new string(&buf[pos], size-pos); - pos = 0; - size = 0; - endofbuffer = true; - return s; -} - -inline void forward_progress(FILE * inputFile) { - delete(lastLine); - lastLine = currentLine; - currentLine = nextLine; - nextLine = readline(inputFile); - //strip out any timestamps. - if (nextLine->length() >= 10) { - if ((*nextLine)[0] == '[' && (*nextLine)[3] == ':' && (*nextLine)[6] == ':' && (*nextLine)[9] == ']') - nextLine->erase(0, 10); - else if (nextLine->length() >= 26 && ((*nextLine)[0] == '[' && (*nextLine)[5] == '-' && (*nextLine)[14] == ':' && (*nextLine)[20] == '.' && (*nextLine)[24] == ']')) - nextLine->erase(0, 26); - } -} -//deallocates to, copys from to to. -inline void string_send(string * &from, string * &to) { - delete(to); - to = new string(*from); -} -inline void printprogressbar(unsigned short progress /*as percent*/) { - double const modifer = 100.0L/(double)PROGRESS_BAR_INNER_WIDTH; - size_t bars = (double)progress/modifer; - cerr << "\r[" << string(bars, '=') << ((progress < 100) ? ">" : "") << string(PROGRESS_BAR_INNER_WIDTH-(bars+((progress < 100) ? 1 : 0)), ' ') << "] " << progress << "%"; - cerr.flush(); -} - -bool readFromFile(bool isstdin) { - //Open file to read - FILE * inputFile = stdin; - if (!isstdin) - inputFile = fopen("Input.txt", "r"); - - if (ferror(inputFile)) - return false; - long long fileLength = 0; - clock_t nextupdate = 0; - if (!isstdin) { - fseek(inputFile, 0, SEEK_END); - fileLength = ftell(inputFile); - fseek(inputFile, 0, SEEK_SET); - nextupdate = clock(); - } - - if (feof(inputFile)) - return false; //empty file - do { - //Update our lines - forward_progress(inputFile); - //progress bar - - if (!isstdin && clock() >= nextupdate) { - int dProgress = (int)(((long double)ftell(inputFile) / (long double)fileLength) * 100.0L); - printprogressbar(dProgress); - nextupdate = clock() + (CLOCKS_PER_SEC/PROGRESS_FPS); - } - //Found a runtime! - if (safe_substr(currentLine, 0, 14) == "runtime error:") { - if (currentLine->length() <= 17) { //empty runtime, check next line. - //runtime is on the line before this one. (byond bug) - if (nextLine->length() < 2) { - string_send(lastLine, nextLine); - } - forward_progress(inputFile); - string * tmp = new string("runtime error: " + *currentLine); - string_send(tmp, currentLine); - delete(tmp); - } - //we assign this to the right container in a moment. - unordered_map * storage_container; - - //runtime is actually an infinite loop - if (safe_substr(currentLine, 15, 23) == "Infinite loop suspected" || safe_substr(currentLine, 15, 31) == "Maximum recursion level reached") { - //use our infinite loop container. - storage_container = &storedInfiniteLoop; - totalInfiniteLoops++; - // skip the line about world.loop_checks - forward_progress(inputFile); - string_send(lastLine, currentLine); - } else { - //use the runtime container - storage_container = &storedRuntime; - totalRuntimes++; - } - - string key = *currentLine; - bool procfound = false; //so other things don't have to bother checking for this again. - if (safe_substr(nextLine, 0, 10) == "proc name:") { - key += *nextLine; - procfound = true; - } - - //(get the address of a runtime from (a pointer to a container of runtimes)) to then store in a pointer to a runtime. - //(and who said pointers were hard.) - runtime* R = &((*storage_container)[key]); - - //new - if (R->text != *currentLine) { - R->text = *currentLine; - if (procfound) { - R->proc = *nextLine; - forward_progress(inputFile); - } - R->count = 1; - - //search for source file info - if (safe_substr(nextLine, 2, 12) == "source file:") { - R->source = *nextLine; - //skip again - forward_progress(inputFile); - } - //If we find this, we have new stuff to store - if (safe_substr(nextLine, 2, 4) == "usr:") { - forward_progress(inputFile); - forward_progress(inputFile); - //Store more info - R->usr = *lastLine; - R->src = *currentLine; - if (safe_substr(nextLine, 2, 8) == "src.loc:") { - R->loc = *nextLine; - forward_progress(inputFile); - } - } - - } else { //existed already - R->count++; - if (procfound) - forward_progress(inputFile); - } - - } else if (safe_substr(currentLine, 0, 7) == "Path : ") { - string deltype = safe_substr(currentLine, 7); - if (deltype.substr(deltype.size()-1,1) == " ") //some times they have a single trailing space. - deltype = deltype.substr(0, deltype.size()-1); - - unsigned int failures = strtoul(safe_substr(nextLine, 11).c_str(), NULL, 10); - if (failures <= 0) - continue; - - totalHardDels += failures; - harddel* D = &storedHardDel[deltype]; - if (D->type != deltype) { - D->type = deltype; - D->count = failures; - } else { - D->count += failures; - } - } - } while (!feof(inputFile) || !endofbuffer); //Until end of file - if (!isstdin) - printprogressbar(100); - cerr << endl; - return true; -} - -bool runtimeComp(const runtime &a, const runtime &b) { - return a.count > b.count; -} - -bool hardDelComp(const harddel &a, const harddel &b) { - return a.count > b.count; -} - -bool writeToFile(bool usestdio) { - //Open and clear the file - ostream * output = &cout; - ofstream * outputFile; - if (!usestdio) - output = outputFile = new ofstream("Output.txt", ios::trunc); - - - if(usestdio || outputFile->is_open()) { - *output << "Note: The source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; - if(storedInfiniteLoop.size() > 0) - *output << "Total unique infinite loops: " << storedInfiniteLoop.size() << endl; - - if(totalInfiniteLoops > 0) - *output << "Total infinite loops: " << totalInfiniteLoops << endl << endl; - - *output << "Total unique runtimes: " << storedRuntime.size() << endl; - *output << "Total runtimes: " << totalRuntimes << endl << endl; - if(storedHardDel.size() > 0) - *output << "Total unique hard deletions: " << storedHardDel.size() << endl; - - if(totalHardDels > 0) - *output << "Total hard deletions: " << totalHardDels << endl << endl; - - - //If we have infinite loops, display them first. - if(storedInfiniteLoop.size() > 0) { - vector infiniteLoops; - infiniteLoops.reserve(storedInfiniteLoop.size()); - for (unordered_map::iterator it=storedInfiniteLoop.begin(); it != storedInfiniteLoop.end(); it++) - infiniteLoops.push_back(it->second); - storedInfiniteLoop.clear(); - sort(infiniteLoops.begin(), infiniteLoops.end(), runtimeComp); - *output << "** Infinite loops **"; - for (int i=0; i < infiniteLoops.size(); i++) { - runtime* R = &infiniteLoops[i]; - *output << endl << endl << "The following infinite loop has occurred " << R->count << " time(s).\n"; - *output << R->text << endl; - if(R->proc.length()) - *output << R->proc << endl; - if(R->source.length()) - *output << R->source << endl; - if(R->usr.length()) - *output << R->usr << endl; - if(R->src.length()) - *output << R->src << endl; - if(R->loc.length()) - *output << R->loc << endl; - } - *output << endl << endl; //For spacing - } - - - //Do runtimes next - *output << "** Runtimes **"; - vector runtimes; - runtimes.reserve(storedRuntime.size()); - for (unordered_map::iterator it=storedRuntime.begin(); it != storedRuntime.end(); it++) - runtimes.push_back(it->second); - storedRuntime.clear(); - sort(runtimes.begin(), runtimes.end(), runtimeComp); - for (int i=0; i < runtimes.size(); i++) { - runtime* R = &runtimes[i]; - *output << endl << endl << "The following runtime has occurred " << R->count << " time(s).\n"; - *output << R->text << endl; - if(R->proc.length()) - *output << R->proc << endl; - if(R->source.length()) - *output << R->source << endl; - if(R->usr.length()) - *output << R->usr << endl; - if(R->src.length()) - *output << R->src << endl; - if(R->loc.length()) - *output << R->loc << endl; - } - *output << endl << endl; //For spacing - - //and finally, hard deletes - if(totalHardDels > 0) { - *output << endl << "** Hard deletions **"; - vector hardDels; - hardDels.reserve(storedHardDel.size()); - for (unordered_map::iterator it=storedHardDel.begin(); it != storedHardDel.end(); it++) - hardDels.push_back(it->second); - storedHardDel.clear(); - sort(hardDels.begin(), hardDels.end(), hardDelComp); - for(int i=0; i < hardDels.size(); i++) { - harddel* D = &hardDels[i]; - *output << endl << D->type << " - " << D->count << " time(s).\n"; - } - } - if (!usestdio) { - outputFile->close(); - delete outputFile; - } - } else { - return false; - } - return true; -} - -int main(int argc, const char * argv[]) { - ios_base::sync_with_stdio(false); - ios::sync_with_stdio(false); - bool usestdio = false; - if (argc >= 2 && !strcmp(argv[1], "-s")) - usestdio = true; - - char exit; //Used to stop the program from immediately exiting - cerr << "Reading input.\n"; - if(readFromFile(usestdio)) { - cerr << "Input read successfully!\n"; - } else { - cerr << "Input failed to open, shutting down.\n"; - if (!usestdio) { - cerr << "\nEnter any letter to quit.\n"; - exit = cin.get(); - } - return 1; - } - - - cerr << "Writing output.\n"; - if(writeToFile(usestdio)) { - cerr << "Output was successful!\n"; - if (!usestdio) { - cerr << "\nEnter any letter to quit.\n"; - exit = cin.get(); - } - return 0; - } else { - cerr << "The output file could not be opened, shutting down.\n"; - if (!usestdio) { - cerr << "\nEnter any letter to quit.\n"; - exit = cin.get(); - } - return 1; - } - - return 0; -} +/* Runtime Condenser by Nodrak + * Cleaned up and refactored by MrStonedOne + * This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance + * of the runtime will log the source, usr and src, the rest will just add to the total. Infinite loops will + * also be caught and displayed (if any) above the list of runtimes. + * + * How to use: + * 1) Copy and paste your list of runtimes from Dream Daemon into input.exe + * 2) Run RuntimeCondenser.exe + * 3) Open output.txt for a condensed report of the runtimes + * + * How to compile: + * Requires visual c++ compiler 2012 or any linux compiler with c++11 support. + * Windows: + * Normal: cl.exe /EHsc /Ox /Qpar Main.cpp + * Debug: cl.exe /EHsc /Zi Main.cpp + * Linux: + * Normal: g++ -O3 -std=c++11 Main.cpp -o rc + * Debug: g++ -g -Og -std=c++11 Main.cpp -o rc + * Any Compile errors most likely indicate lack of c++11 support. Google how to upgrade or nag coderbus for help.. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define PROGRESS_FPS 10 +#define PROGRESS_BAR_INNER_WIDTH 50 +#define LINEBUFFER (32*1024) //32KiB + +using namespace std; + +struct runtime { + string text; + string proc; + string source; + string usr; + string src; + string loc; + unsigned int count; +}; +struct harddel { + string type; + unsigned int count; +}; +//What we use to read input +string * lastLine = new string(); +string * currentLine = new string(); +string * nextLine = new string(); + +//Stores lines we want to keep to print out +unordered_map storedRuntime; +unordered_map storedInfiniteLoop; +unordered_map storedHardDel; + +//Stat tracking stuff for output +unsigned int totalRuntimes = 0; +unsigned int totalInfiniteLoops = 0; +unsigned int totalHardDels = 0; + + +bool endofbuffer = false; +//like substr, but returns an empty string if the string is smaller then start, rather then an exception. +inline string safe_substr(string * S, size_t start = 0, size_t end = string::npos) { + if (start > S->length()) + start = S->length(); + return S->substr(start, end); +} +//getline() is slow as fucking balls. this is quicker because we prefill a buffer rather then read 1 byte at a time searching for newlines, lowering on i/o calls and overhead. (110MB/s vs 40MB/s on a 1.8GB file pre-filled into the disk cache) +//if i wanted to make it even faster, I'd use a reading thread, a new line searching thread, another thread or four for searching for runtimes in the list to see if they are unique, and finally the main thread for displaying the progress bar. but fuck that noise. +inline string * readline(FILE * f) { + static char buf[LINEBUFFER]; + static size_t pos = 0; + static size_t size = 0; + + for (size_t i = pos; i < LINEBUFFER; i++) { + char c = buf[i]; + if (i >= size && (pos || i < LINEBUFFER-1)) { + if (feof(f) || ferror(f)) + break; + if (size && pos) { //move current stuff to start of buffer + size -= pos; + i -= pos; + memmove(buf, &buf[pos], size); + } + //fill remaining buffer + size += fread(&buf[i], 1, LINEBUFFER-size-1, f); + pos = 0; + c = buf[i]; + } + if (c == '\n') { + //trim off any newlines from the start + while (i > pos && (buf[pos] == '\r' || buf[pos] == '\n')) + pos++; + string * s = new string(&buf[pos], i-pos); + pos = i+1; + return s; + } + + } + string * s = new string(&buf[pos], size-pos); + pos = 0; + size = 0; + endofbuffer = true; + return s; +} + +inline void forward_progress(FILE * inputFile) { + delete(lastLine); + lastLine = currentLine; + currentLine = nextLine; + nextLine = readline(inputFile); + //strip out any timestamps. + if (nextLine->length() >= 10) { + if ((*nextLine)[0] == '[' && (*nextLine)[3] == ':' && (*nextLine)[6] == ':' && (*nextLine)[9] == ']') + nextLine->erase(0, 10); + else if (nextLine->length() >= 26 && ((*nextLine)[0] == '[' && (*nextLine)[5] == '-' && (*nextLine)[14] == ':' && (*nextLine)[20] == '.' && (*nextLine)[24] == ']')) + nextLine->erase(0, 26); + } +} +//deallocates to, copys from to to. +inline void string_send(string * &from, string * &to) { + delete(to); + to = new string(*from); +} +inline void printprogressbar(unsigned short progress /*as percent*/) { + double const modifer = 100.0L/(double)PROGRESS_BAR_INNER_WIDTH; + size_t bars = (double)progress/modifer; + cerr << "\r[" << string(bars, '=') << ((progress < 100) ? ">" : "") << string(PROGRESS_BAR_INNER_WIDTH-(bars+((progress < 100) ? 1 : 0)), ' ') << "] " << progress << "%"; + cerr.flush(); +} + +bool readFromFile(bool isstdin) { + //Open file to read + FILE * inputFile = stdin; + if (!isstdin) + inputFile = fopen("Input.txt", "r"); + + if (ferror(inputFile)) + return false; + long long fileLength = 0; + clock_t nextupdate = 0; + if (!isstdin) { + fseek(inputFile, 0, SEEK_END); + fileLength = ftell(inputFile); + fseek(inputFile, 0, SEEK_SET); + nextupdate = clock(); + } + + if (feof(inputFile)) + return false; //empty file + do { + //Update our lines + forward_progress(inputFile); + //progress bar + + if (!isstdin && clock() >= nextupdate) { + int dProgress = (int)(((long double)ftell(inputFile) / (long double)fileLength) * 100.0L); + printprogressbar(dProgress); + nextupdate = clock() + (CLOCKS_PER_SEC/PROGRESS_FPS); + } + //Found a runtime! + if (safe_substr(currentLine, 0, 14) == "runtime error:") { + if (currentLine->length() <= 17) { //empty runtime, check next line. + //runtime is on the line before this one. (byond bug) + if (nextLine->length() < 2) { + string_send(lastLine, nextLine); + } + forward_progress(inputFile); + string * tmp = new string("runtime error: " + *currentLine); + string_send(tmp, currentLine); + delete(tmp); + } + //we assign this to the right container in a moment. + unordered_map * storage_container; + + //runtime is actually an infinite loop + if (safe_substr(currentLine, 15, 23) == "Infinite loop suspected" || safe_substr(currentLine, 15, 31) == "Maximum recursion level reached") { + //use our infinite loop container. + storage_container = &storedInfiniteLoop; + totalInfiniteLoops++; + // skip the line about world.loop_checks + forward_progress(inputFile); + string_send(lastLine, currentLine); + } else { + //use the runtime container + storage_container = &storedRuntime; + totalRuntimes++; + } + + string key = *currentLine; + bool procfound = false; //so other things don't have to bother checking for this again. + if (safe_substr(nextLine, 0, 10) == "proc name:") { + key += *nextLine; + procfound = true; + } + + //(get the address of a runtime from (a pointer to a container of runtimes)) to then store in a pointer to a runtime. + //(and who said pointers were hard.) + runtime* R = &((*storage_container)[key]); + + //new + if (R->text != *currentLine) { + R->text = *currentLine; + if (procfound) { + R->proc = *nextLine; + forward_progress(inputFile); + } + R->count = 1; + + //search for source file info + if (safe_substr(nextLine, 2, 12) == "source file:") { + R->source = *nextLine; + //skip again + forward_progress(inputFile); + } + //If we find this, we have new stuff to store + if (safe_substr(nextLine, 2, 4) == "usr:") { + forward_progress(inputFile); + forward_progress(inputFile); + //Store more info + R->usr = *lastLine; + R->src = *currentLine; + if (safe_substr(nextLine, 2, 8) == "src.loc:") { + R->loc = *nextLine; + forward_progress(inputFile); + } + } + + } else { //existed already + R->count++; + if (procfound) + forward_progress(inputFile); + } + + } else if (safe_substr(currentLine, 0, 7) == "Path : ") { + string deltype = safe_substr(currentLine, 7); + if (deltype.substr(deltype.size()-1,1) == " ") //some times they have a single trailing space. + deltype = deltype.substr(0, deltype.size()-1); + + unsigned int failures = strtoul(safe_substr(nextLine, 11).c_str(), NULL, 10); + if (failures <= 0) + continue; + + totalHardDels += failures; + harddel* D = &storedHardDel[deltype]; + if (D->type != deltype) { + D->type = deltype; + D->count = failures; + } else { + D->count += failures; + } + } + } while (!feof(inputFile) || !endofbuffer); //Until end of file + if (!isstdin) + printprogressbar(100); + cerr << endl; + return true; +} + +bool runtimeComp(const runtime &a, const runtime &b) { + return a.count > b.count; +} + +bool hardDelComp(const harddel &a, const harddel &b) { + return a.count > b.count; +} + +bool writeToFile(bool usestdio) { + //Open and clear the file + ostream * output = &cout; + ofstream * outputFile; + if (!usestdio) + output = outputFile = new ofstream("Output.txt", ios::trunc); + + + if(usestdio || outputFile->is_open()) { + *output << "Note: The source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; + if(storedInfiniteLoop.size() > 0) + *output << "Total unique infinite loops: " << storedInfiniteLoop.size() << endl; + + if(totalInfiniteLoops > 0) + *output << "Total infinite loops: " << totalInfiniteLoops << endl << endl; + + *output << "Total unique runtimes: " << storedRuntime.size() << endl; + *output << "Total runtimes: " << totalRuntimes << endl << endl; + if(storedHardDel.size() > 0) + *output << "Total unique hard deletions: " << storedHardDel.size() << endl; + + if(totalHardDels > 0) + *output << "Total hard deletions: " << totalHardDels << endl << endl; + + + //If we have infinite loops, display them first. + if(storedInfiniteLoop.size() > 0) { + vector infiniteLoops; + infiniteLoops.reserve(storedInfiniteLoop.size()); + for (unordered_map::iterator it=storedInfiniteLoop.begin(); it != storedInfiniteLoop.end(); it++) + infiniteLoops.push_back(it->second); + storedInfiniteLoop.clear(); + sort(infiniteLoops.begin(), infiniteLoops.end(), runtimeComp); + *output << "** Infinite loops **"; + for (int i=0; i < infiniteLoops.size(); i++) { + runtime* R = &infiniteLoops[i]; + *output << endl << endl << "The following infinite loop has occurred " << R->count << " time(s).\n"; + *output << R->text << endl; + if(R->proc.length()) + *output << R->proc << endl; + if(R->source.length()) + *output << R->source << endl; + if(R->usr.length()) + *output << R->usr << endl; + if(R->src.length()) + *output << R->src << endl; + if(R->loc.length()) + *output << R->loc << endl; + } + *output << endl << endl; //For spacing + } + + + //Do runtimes next + *output << "** Runtimes **"; + vector runtimes; + runtimes.reserve(storedRuntime.size()); + for (unordered_map::iterator it=storedRuntime.begin(); it != storedRuntime.end(); it++) + runtimes.push_back(it->second); + storedRuntime.clear(); + sort(runtimes.begin(), runtimes.end(), runtimeComp); + for (int i=0; i < runtimes.size(); i++) { + runtime* R = &runtimes[i]; + *output << endl << endl << "The following runtime has occurred " << R->count << " time(s).\n"; + *output << R->text << endl; + if(R->proc.length()) + *output << R->proc << endl; + if(R->source.length()) + *output << R->source << endl; + if(R->usr.length()) + *output << R->usr << endl; + if(R->src.length()) + *output << R->src << endl; + if(R->loc.length()) + *output << R->loc << endl; + } + *output << endl << endl; //For spacing + + //and finally, hard deletes + if(totalHardDels > 0) { + *output << endl << "** Hard deletions **"; + vector hardDels; + hardDels.reserve(storedHardDel.size()); + for (unordered_map::iterator it=storedHardDel.begin(); it != storedHardDel.end(); it++) + hardDels.push_back(it->second); + storedHardDel.clear(); + sort(hardDels.begin(), hardDels.end(), hardDelComp); + for(int i=0; i < hardDels.size(); i++) { + harddel* D = &hardDels[i]; + *output << endl << D->type << " - " << D->count << " time(s).\n"; + } + } + if (!usestdio) { + outputFile->close(); + delete outputFile; + } + } else { + return false; + } + return true; +} + +int main(int argc, const char * argv[]) { + ios_base::sync_with_stdio(false); + ios::sync_with_stdio(false); + bool usestdio = false; + if (argc >= 2 && !strcmp(argv[1], "-s")) + usestdio = true; + + char exit; //Used to stop the program from immediately exiting + cerr << "Reading input.\n"; + if(readFromFile(usestdio)) { + cerr << "Input read successfully!\n"; + } else { + cerr << "Input failed to open, shutting down.\n"; + if (!usestdio) { + cerr << "\nEnter any letter to quit.\n"; + exit = cin.get(); + } + return 1; + } + + + cerr << "Writing output.\n"; + if(writeToFile(usestdio)) { + cerr << "Output was successful!\n"; + if (!usestdio) { + cerr << "\nEnter any letter to quit.\n"; + exit = cin.get(); + } + return 0; + } else { + cerr << "The output file could not be opened, shutting down.\n"; + if (!usestdio) { + cerr << "\nEnter any letter to quit.\n"; + exit = cin.get(); + } + return 1; + } + + return 0; +} diff --git a/tools/UnstandardnessTestForDM/readme.txt b/tools/UnstandardnessTestForDM/readme.txt index 3fb04ee4df..8d3c5168dc 100644 --- a/tools/UnstandardnessTestForDM/readme.txt +++ b/tools/UnstandardnessTestForDM/readme.txt @@ -1,4 +1,4 @@ -the compiled exe file for the Unstandardness text for DM program is in: -UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe - -You have to move it to the root folder (where the dme file is) and run it from there for it to work. +the compiled exe file for the Unstandardness text for DM program is in: +UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe + +You have to move it to the root folder (where the dme file is) and run it from there for it to work. diff --git a/tools/WebhookProcessor/secret.php b/tools/WebhookProcessor/secret.php index 9b8a27d490..9d1dc5a903 100644 --- a/tools/WebhookProcessor/secret.php +++ b/tools/WebhookProcessor/secret.php @@ -1,133 +1,133 @@ -