From f23858dbe379ee655d66a978a88a4acf2fc726e8 Mon Sep 17 00:00:00 2001 From: Helianthus00 <64755361+Helianthus00@users.noreply.github.com> Date: Fri, 28 Aug 2020 06:10:38 -0600 Subject: [PATCH 01/40] Adds a Central Maint Area to Delta (#53245) * Adds a Central Maint area to Delta * added cap's door to the area --- .../map_files/Deltastation/DeltaStation2.dmm | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index cee110ca599..b9ae22105bd 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -59126,7 +59126,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, -/area/crew_quarters/heads/captain/private) +/area/maintenance/central/secondary) "cik" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ @@ -59955,7 +59955,7 @@ dir = 5 }, /turf/open/floor/plasteel, -/area/teleporter) +/area/maintenance/central/secondary) "cjN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -59967,8 +59967,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plating, -/area/teleporter) +/area/maintenance/central/secondary) "cjO" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -59981,11 +59982,18 @@ dir = 10 }, /turf/open/floor/plating, -/area/teleporter) +/area/maintenance/central/secondary) "cjP" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/central"; + dir = 1; + name = "Central Maintenance APC"; + pixel_y = 23 + }, +/obj/structure/cable, /turf/open/floor/plating, -/area/teleporter) +/area/maintenance/central/secondary) "cjQ" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -59993,7 +60001,7 @@ dir = 4 }, /turf/open/floor/plasteel, -/area/teleporter) +/area/maintenance/central/secondary) "cjR" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral, @@ -60571,7 +60579,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plating, -/area/teleporter) +/area/maintenance/central/secondary) "cle" = ( /obj/machinery/light{ dir = 8 From 9ccab36d396d3628c1f851ebde2df7d85154f76f Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 28 Aug 2020 05:10:42 -0700 Subject: [PATCH 02/40] Automatic changelog generation for PR #53245 [ci skip] --- html/changelogs/AutoChangeLog-pr-53245.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53245.yml diff --git a/html/changelogs/AutoChangeLog-pr-53245.yml b/html/changelogs/AutoChangeLog-pr-53245.yml new file mode 100644 index 00000000000..5226193ffa4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53245.yml @@ -0,0 +1,4 @@ +author: "Helianthus00" +delete-after: True +changes: + - tweak: "Deltastation: made a maint area below the captain's office" From cb49d3301bb680629a0bd15f27f130f5cad77217 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 28 Aug 2020 17:21:04 -0400 Subject: [PATCH 03/40] Bump DMAPI to 5.2.4 (#53222) Runtime patches --- code/__DEFINES/tgs.dm | 2 +- code/modules/tgs/v5/api.dm | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 35d9dbefbdf..5a143b391ab 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "5.2.3" +#define TGS_DMAPI_VERSION "5.2.4" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 3cd47ec1a6c..524ca1a3c3a 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -15,8 +15,10 @@ var/datum/tgs_revision_information/revision var/list/chat_channels + var/initialized = FALSE + /datum/tgs_api/v5/ApiVersion() - return new /datum/tgs_version("5.2.3") + return new /datum/tgs_version("5.2.4") /datum/tgs_api/v5/OnWorldNew(minimum_required_security_level) server_port = world.params[DMAPI5_PARAM_SERVER_PORT] @@ -79,6 +81,7 @@ chat_channels = list() DecodeChannels(runtime_information) + initialized = TRUE return TRUE /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() @@ -95,10 +98,13 @@ return json_encode(response) /datum/tgs_api/v5/OnTopic(T) + if(!initialized) + return FALSE //continue world/Topic + var/list/params = params2list(T) var/json = params[DMAPI5_TOPIC_DATA] if(!json) - return FALSE //continue world/Topic + return FALSE var/list/topic_parameters = json_decode(json) if(!topic_parameters) From ca366c3ea17f1448c613b2f34209edb62eabb182 Mon Sep 17 00:00:00 2001 From: TiviPlus <57223640+TiviPlus@users.noreply.github.com> Date: Fri, 28 Aug 2020 23:26:37 +0200 Subject: [PATCH 04/40] Bools and returns super-pr (#53221) Replaces like 70-80% of 0 and such, as a side effect cleaned up a bunch of returns Edit: Most left out ones are in mecha which should be done in mecha refactor already Oh my look how clean it is Co-authored-by: TiviPlus Co-authored-by: Couls --- code/__HELPERS/files.dm | 4 +- code/__HELPERS/game.dm | 18 +- code/__HELPERS/text.dm | 8 +- code/__HELPERS/unsorted.dm | 20 +- code/_onclick/adjacent.dm | 16 +- code/_onclick/drag_drop.dm | 6 +- code/_onclick/hud/action_button.dm | 6 +- code/_onclick/hud/pai.dm | 5 +- code/_onclick/other_mobs.dm | 2 +- code/controllers/failsafe.dm | 2 +- code/controllers/globals.dm | 4 +- code/controllers/master.dm | 2 +- code/controllers/subsystem.dm | 2 +- code/controllers/subsystem/acid.dm | 2 +- code/controllers/subsystem/air.dm | 36 ++-- code/controllers/subsystem/discord.dm | 6 +- code/controllers/subsystem/events.dm | 2 +- code/controllers/subsystem/ipintel.dm | 4 +- code/controllers/subsystem/job.dm | 16 +- code/controllers/subsystem/machines.dm | 2 +- code/controllers/subsystem/mobs.dm | 2 +- code/controllers/subsystem/pai.dm | 4 +- .../subsystem/processing/processing.dm | 4 +- code/controllers/subsystem/shuttle.dm | 4 +- code/controllers/subsystem/spacedrift.dm | 2 +- code/controllers/subsystem/tgui.dm | 2 +- code/controllers/subsystem/ticker.dm | 12 +- code/datums/action.dm | 17 +- code/datums/browser.dm | 2 +- code/datums/components/honkspam.dm | 9 +- code/datums/components/mood.dm | 4 +- code/datums/components/spawner.dm | 4 +- code/datums/components/summoning.dm | 6 +- code/datums/datum.dm | 2 +- code/datums/diseases/advance/advance.dm | 10 +- code/datums/diseases/transformation.dm | 14 +- code/datums/dna.dm | 10 +- code/datums/elements/_element.dm | 4 +- code/datums/martial/boxing.dm | 4 +- code/datums/martial/krav_maga.dm | 26 +-- code/datums/martial/wrestling.dm | 40 ++-- code/datums/mind.dm | 4 +- code/game/area/areas.dm | 10 +- code/game/area/areas/holodeck.dm | 18 +- code/game/atoms.dm | 6 +- code/game/atoms_movable.dm | 20 +- code/game/communications.dm | 2 +- code/game/data_huds.dm | 8 +- .../game/gamemodes/changeling/traitor_chan.dm | 9 +- code/game/gamemodes/cult/cult.dm | 6 +- .../devil/devil_agent/devil_agent.dm | 4 +- .../gamemodes/dynamic/dynamic_rulesets.dm | 2 +- .../dynamic/dynamic_rulesets_roundstart.dm | 2 +- code/game/gamemodes/game_mode.dm | 36 ++-- code/game/gamemodes/meteor/meteors.dm | 14 +- code/game/gamemodes/objective.dm | 26 +-- code/game/gamemodes/objective_items.dm | 4 +- code/game/gamemodes/sandbox/airlock_maker.dm | 2 +- code/game/gamemodes/sandbox/h_sandbox.dm | 4 +- code/game/machinery/_machinery.dm | 16 +- code/game/machinery/autolathe.dm | 2 +- code/game/machinery/camera/tracking.dm | 6 +- code/game/machinery/computer/_computer.dm | 4 +- code/game/machinery/computer/card.dm | 10 +- code/game/machinery/computer/medical.dm | 14 +- code/game/machinery/computer/security.dm | 17 +- code/game/machinery/constructable_frame.dm | 8 +- code/game/machinery/doors/airlock_types.dm | 6 +- .../embedded_controller_base.dm | 7 +- code/game/machinery/lightswitch.dm | 2 +- code/game/machinery/magnet.dm | 10 +- code/game/machinery/medical_kiosk.dm | 2 +- code/game/machinery/newscaster.dm | 43 ++--- code/game/machinery/recycler.dm | 8 +- code/game/machinery/slotmachine.dm | 10 +- code/game/machinery/suit_storage_unit.dm | 2 +- code/game/machinery/syndicatebeacon.dm | 6 +- code/game/machinery/teleporter.dm | 4 +- code/game/machinery/washing_machine.dm | 4 +- .../game/mecha/equipment/tools/other_tools.dm | 4 +- code/game/objects/buckling.dm | 8 +- code/game/objects/effects/alien_acid.dm | 6 +- .../effects/decals/cleanable/aliens.dm | 2 +- .../effects/decals/cleanable/humans.dm | 4 +- .../effects/decals/cleanable/robots.dm | 2 +- .../effects/effect_system/effects_foam.dm | 6 +- .../effects/effect_system/effects_other.dm | 4 +- .../effects/effect_system/effects_smoke.dm | 36 ++-- .../effects/effect_system/effects_water.dm | 6 +- code/game/objects/effects/effects.dm | 5 +- code/game/objects/effects/overlays.dm | 6 +- code/game/objects/effects/step_triggers.dm | 6 +- .../objects/effects/temporary_visuals/cult.dm | 4 +- code/game/objects/items.dm | 6 +- code/game/objects/items/RCD.dm | 6 +- code/game/objects/items/airlock_painter.dm | 10 +- code/game/objects/items/body_egg.dm | 4 +- code/game/objects/items/chainsaw.dm | 4 +- code/game/objects/items/chrono_eraser.dm | 5 +- code/game/objects/items/cigs_lighters.dm | 24 +-- code/game/objects/items/devices/camera_bug.dm | 6 +- .../objects/items/devices/geiger_counter.dm | 10 +- code/game/objects/items/devices/scanners.dm | 2 +- .../objects/items/devices/taperecorder.dm | 30 +-- code/game/objects/items/extinguisher.dm | 6 +- .../game/objects/items/grenades/ghettobomb.dm | 2 +- .../objects/items/implants/implant_chem.dm | 2 +- .../items/implants/implant_mindshield.dm | 4 +- .../objects/items/implants/implant_misc.dm | 4 +- .../objects/items/implants/implantchair.dm | 4 +- code/game/objects/items/mop.dm | 1 - code/game/objects/items/robot/robot_parts.dm | 8 +- code/game/objects/items/stacks/rods.dm | 6 +- .../objects/items/stacks/sheets/mineral.dm | 8 +- code/game/objects/items/stacks/stack.dm | 6 +- code/game/objects/items/stacks/wrap.dm | 8 +- code/game/objects/items/storage/book.dm | 4 +- code/game/objects/items/storage/boxes.dm | 2 +- code/game/objects/items/storage/secure.dm | 22 +-- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 8 +- code/game/objects/items/weaponry.dm | 6 +- code/game/objects/structures/artstuff.dm | 2 +- .../objects/structures/beds_chairs/bed.dm | 4 +- .../objects/structures/beds_chairs/chair.dm | 4 +- .../structures/crates_lockers/closets.dm | 4 +- .../crates_lockers/closets/bodybag.dm | 6 +- code/game/objects/structures/fireaxe.dm | 4 +- code/game/objects/structures/girders.dm | 4 +- code/game/objects/structures/guillotine.dm | 2 +- code/game/objects/structures/janicart.dm | 4 +- .../objects/structures/petrified_statue.dm | 12 +- code/game/objects/structures/statues.dm | 8 +- code/game/objects/structures/tables_racks.dm | 2 +- .../transit_tube_construction.dm | 14 +- .../transit_tubes/transit_tube_pod.dm | 2 +- code/game/objects/structures/window.dm | 20 +- code/game/turfs/closed/_closed.dm | 2 +- code/game/turfs/closed/minerals.dm | 8 +- code/game/turfs/closed/wall/reinf_walls.dm | 46 ++--- code/game/turfs/open/_open.dm | 12 +- code/game/turfs/open/floor.dm | 10 +- code/game/turfs/open/floor/fancy_floor.dm | 9 +- code/game/turfs/open/floor/mineral_floor.dm | 19 +- code/game/turfs/open/floor/plasteel_floor.dm | 5 +- code/game/turfs/open/river.dm | 12 +- code/game/turfs/open/space/space.dm | 8 +- code/modules/admin/admin_verbs.dm | 2 +- code/modules/admin/callproc/callproc.dm | 2 +- code/modules/admin/holder2.dm | 24 +-- code/modules/admin/secrets.dm | 6 +- code/modules/admin/verbs/adminhelp.dm | 2 +- code/modules/admin/verbs/debug.dm | 10 +- code/modules/admin/verbs/mapping.dm | 4 +- code/modules/admin/verbs/one_click_antag.dm | 22 +-- code/modules/admin/verbs/playsound.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 8 +- .../abductor/equipment/abduction_gear.dm | 8 +- .../abductor/equipment/abduction_surgery.dm | 8 +- .../antagonists/abductor/equipment/gland.dm | 10 +- .../blob/blobstrains/_blobstrain.dm | 2 +- .../blob/blobstrains/energized_jelly.dm | 2 +- code/modules/antagonists/blob/overmind.dm | 10 +- code/modules/antagonists/blob/powers.dm | 22 +-- .../antagonists/blob/structures/_blob.dm | 10 +- .../antagonists/changeling/changeling.dm | 22 +-- .../changeling/changeling_power.dm | 6 +- .../antagonists/changeling/powers/headcrab.dm | 2 +- .../changeling/powers/tiny_prick.dm | 11 +- code/modules/antagonists/cult/cult.dm | 2 +- code/modules/antagonists/cult/cult_comms.dm | 2 +- code/modules/antagonists/cult/cult_items.dm | 4 +- code/modules/antagonists/cult/runes.dm | 6 +- code/modules/antagonists/devil/devil.dm | 24 +-- .../devil/true_devil/_true_devil.dm | 4 +- .../antagonists/devil/true_devil/inventory.dm | 5 +- code/modules/antagonists/morph/morph.dm | 2 +- code/modules/antagonists/ninja/ninja.dm | 4 +- code/modules/antagonists/revenant/revenant.dm | 2 +- .../antagonists/slaughter/slaughterevent.dm | 2 +- .../antagonists/wizard/equipment/artefact.dm | 4 +- .../antagonists/wizard/equipment/soulstone.dm | 2 +- .../environmental/LINDA_turf_tile.dm | 2 +- .../atmospherics/gasmixtures/gas_mixture.dm | 8 +- .../gasmixtures/immutable_mixtures.dm | 12 +- .../atmospherics/machinery/airalarm.dm | 12 +- .../components/unary_devices/cryo.dm | 2 +- .../components/unary_devices/vent_scrubber.dm | 2 +- .../atmospherics/machinery/other/meter.dm | 6 +- .../atmospherics/machinery/pipes/pipes.dm | 4 +- .../awaymissions/mission_code/Academy.dm | 6 +- .../awaymissions/mission_code/Cabin.dm | 4 +- .../mission_code/stationCollision.dm | 5 +- code/modules/client/client_procs.dm | 24 +-- code/modules/client/verbs/suicide.dm | 4 +- code/modules/clothing/gloves/_gloves.dm | 2 +- code/modules/clothing/head/misc_special.dm | 13 +- code/modules/clothing/head/soft_caps.dm | 6 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/shoes/_shoes.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- .../modules/clothing/spacesuits/chronosuit.dm | 14 +- code/modules/clothing/spacesuits/hardsuit.dm | 8 +- .../modules/clothing/suits/reactive_armour.dm | 38 ++-- code/modules/clothing/under/_under.dm | 11 +- .../under/jobs/Plasmaman/civilian_service.dm | 1 - code/modules/clothing/under/miscellaneous.dm | 1 - code/modules/detectivework/scanner.dm | 22 +-- code/modules/events/devil.dm | 6 +- code/modules/events/electrical_storm.dm | 2 +- code/modules/events/false_alarm.dm | 4 +- code/modules/events/immovable_rod.dm | 2 +- code/modules/events/operative.dm | 2 +- code/modules/events/portal_storm.dm | 5 +- code/modules/events/wizard/greentext.dm | 2 +- .../modules/food_and_drinks/food/condiment.dm | 6 +- code/modules/food_and_drinks/food/snacks.dm | 21 +-- .../food_and_drinks/food/snacks_other.dm | 2 +- code/modules/holiday/holidays.dm | 6 +- code/modules/hydroponics/grown.dm | 4 +- code/modules/hydroponics/growninedible.dm | 4 +- code/modules/library/lib_items.dm | 2 +- code/modules/lighting/lighting_object.dm | 2 +- code/modules/mining/fulton.dm | 6 +- code/modules/mining/lavaland/ash_flora.dm | 4 +- code/modules/mob/dead/new_player/login.dm | 2 +- .../modules/mob/dead/new_player/new_player.dm | 8 +- code/modules/mob/living/blood.dm | 12 +- code/modules/mob/living/brain/brain.dm | 4 +- code/modules/mob/living/brain/life.dm | 1 - code/modules/mob/living/carbon/alien/alien.dm | 4 +- .../mob/living/carbon/alien/alien_defense.dm | 13 +- .../carbon/alien/humanoid/alien_powers.dm | 40 ++-- .../carbon/alien/humanoid/caste/drone.dm | 10 +- .../carbon/alien/humanoid/caste/praetorian.dm | 8 +- .../mob/living/carbon/alien/humanoid/queen.dm | 10 +- .../mob/living/carbon/alien/larva/life.dm | 1 - .../mob/living/carbon/alien/larva/powers.dm | 4 +- .../modules/mob/living/carbon/alien/organs.dm | 7 +- .../living/carbon/alien/special/facehugger.dm | 19 +- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/examine.dm | 4 +- .../mob/living/carbon/human/human_defense.dm | 171 +++++++++--------- .../mob/living/carbon/human/human_defines.dm | 2 +- .../mob/living/carbon/human/human_movement.dm | 6 +- .../mob/living/carbon/human/human_say.dm | 6 +- code/modules/mob/living/carbon/human/life.dm | 5 +- .../mob/living/carbon/human/species.dm | 28 +-- .../carbon/human/species_types/felinid.dm | 3 - .../carbon/human/species_types/golems.dm | 10 +- .../carbon/human/species_types/humans.dm | 3 - .../carbon/human/species_types/jellypeople.dm | 29 +-- .../carbon/human/species_types/plasmamen.dm | 1 - code/modules/mob/living/carbon/life.dm | 11 +- .../mob/living/carbon/monkey/combat.dm | 16 +- code/modules/mob/living/carbon/monkey/life.dm | 2 - code/modules/mob/living/life.dm | 1 - code/modules/mob/living/living.dm | 6 +- code/modules/mob/living/living_defense.dm | 10 +- code/modules/mob/living/logout.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../mob/living/silicon/ai/ai_defense.dm | 4 +- code/modules/mob/living/silicon/ai/ai_say.dm | 4 +- .../mob/living/silicon/ai/freelook/eye.dm | 2 +- .../mob/living/silicon/pai/personality.dm | 4 +- code/modules/mob/living/silicon/robot/laws.dm | 4 +- code/modules/mob/living/silicon/robot/life.dm | 5 +- .../modules/mob/living/silicon/robot/robot.dm | 44 ++--- .../mob/living/silicon/robot/robot_defense.dm | 6 +- code/modules/mob/living/silicon/silicon.dm | 4 +- .../modules/mob/living/silicon/silicon_say.dm | 10 +- .../mob/living/simple_animal/bot/bot.dm | 14 +- .../living/simple_animal/bot/construction.dm | 2 +- .../mob/living/simple_animal/bot/honkbot.dm | 46 ++--- .../mob/living/simple_animal/constructs.dm | 14 +- .../mob/living/simple_animal/friendly/dog.dm | 8 +- .../simple_animal/friendly/drone/_drone.dm | 6 +- .../simple_animal/friendly/farm_animals.dm | 2 +- .../mob/living/simple_animal/hostile/bear.dm | 2 +- .../simple_animal/hostile/bosses/boss.dm | 31 ++-- .../mob/living/simple_animal/hostile/carp.dm | 4 +- .../simple_animal/hostile/giant_spider.dm | 30 +-- .../living/simple_animal/hostile/hostile.dm | 3 +- .../simple_animal/hostile/megafauna/drake.dm | 4 +- .../mob/living/simple_animal/hostile/mimic.dm | 4 +- .../hostile/mining_mobs/goliath.dm | 2 +- .../hostile/retaliate/retaliate.dm | 1 - .../living/simple_animal/hostile/statue.dm | 6 +- .../living/simple_animal/hostile/vatbeast.dm | 2 +- .../mob/living/simple_animal/parrot.dm | 12 +- .../modules/mob/living/simple_animal/shade.dm | 2 +- .../mob/living/simple_animal/slime/life.dm | 11 +- .../mob/living/simple_animal/slime/powers.dm | 23 ++- .../mob/living/simple_animal/slime/slime.dm | 4 +- code/modules/mob/mob.dm | 24 +-- code/modules/mob/mob_helpers.dm | 4 +- code/modules/mob/mob_say.dm | 2 +- code/modules/mob/transform_procs.dm | 26 +-- .../computers/item/computer.dm | 4 +- .../computers/item/computer_ui.dm | 10 +- .../computers/item/laptop.dm | 2 +- .../computers/item/processor.dm | 7 - .../modular_computers/file_system/program.dm | 10 +- .../file_system/programs/ntdownloader.dm | 38 ++-- .../modular_computers/hardware/hard_drive.dm | 34 ++-- .../hardware/portable_disk.dm | 2 +- .../modular_computers/hardware/recharger.dm | 23 ++- code/modules/ninja/ninja_event.dm | 2 +- code/modules/ninja/suit/gloves.dm | 4 +- .../ninja/suit/n_suit_verbs/ninja_net.dm | 2 +- .../ninja/suit/n_suit_verbs/ninja_stealth.dm | 6 +- code/modules/paperwork/contract.dm | 37 ++-- code/modules/power/apc.dm | 26 +-- code/modules/power/cell.dm | 6 +- code/modules/power/lighting.dm | 8 +- code/modules/power/power.dm | 2 +- code/modules/power/rtg.dm | 2 +- .../power/singularity/field_generator.dm | 32 ++-- code/modules/power/singularity/generator.dm | 2 +- code/modules/power/singularity/singularity.dm | 46 ++--- code/modules/power/solar.dm | 12 +- code/modules/power/tesla/coil.dm | 4 +- .../procedural_mapping/mapGenerator.dm | 15 +- .../procedural_mapping/mapGeneratorModule.dm | 11 +- .../boxes_magazines/internal/revolver.dm | 2 +- .../boxes_magazines/internal/rifle.dm | 2 +- .../boxes_magazines/internal/shotgun.dm | 4 +- .../guns/ballistic/laser_gatling.dm | 10 +- .../projectiles/guns/ballistic/pistol.dm | 2 +- .../projectiles/guns/ballistic/revolver.dm | 4 +- .../projectiles/guns/ballistic/shotgun.dm | 2 +- .../modules/projectiles/guns/ballistic/toy.dm | 2 +- code/modules/projectiles/guns/energy/laser.dm | 2 +- code/modules/projectiles/guns/misc/medbeam.dm | 16 +- .../projectiles/guns/misc/syringe_gun.dm | 4 +- code/modules/projectiles/pins.dm | 6 +- code/modules/reagents/chemistry/holder.dm | 15 +- code/modules/reagents/chemistry/reagents.dm | 6 +- code/modules/reagents/reagent_containers.dm | 6 +- .../reagents/reagent_containers/hypospray.dm | 2 +- .../reagents/reagent_containers/patch.dm | 4 +- .../xenobiology/crossbreeding/_weapons.dm | 4 +- .../research/xenobiology/xenobiology.dm | 2 +- .../security_levels/keycard_authentication.dm | 6 +- code/modules/spells/spell.dm | 8 +- code/modules/surgery/cavity_implant.dm | 4 +- code/modules/surgery/organ_manipulation.dm | 2 +- code/modules/surgery/organs/augments_chest.dm | 2 +- code/modules/surgery/organs/organ_internal.dm | 4 +- .../modules/surgery/prosthetic_replacement.dm | 5 +- code/modules/surgery/surgery_helpers.dm | 28 +-- code/modules/swarmers/swarmer_objs.dm | 2 +- code/modules/tooltip/tooltip.dm | 4 +- code/modules/vehicles/ridden.dm | 2 +- code/modules/vending/_vending.dm | 6 +- 355 files changed, 1549 insertions(+), 1591 deletions(-) diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index f102a96adfe..6fc48ded6a6 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -47,12 +47,12 @@ var/time_to_wait = GLOB.fileaccess_timer - world.time if(time_to_wait > 0) to_chat(src, "Error: file_spam_check(): Spam. Please wait [DisplayTimeText(time_to_wait)].") - return 1 + return TRUE var/delay = FTPDELAY if(holder) delay *= ADMIN_FTPDELAY_MODIFIER GLOB.fileaccess_timer = world.time + delay - return 0 + return FALSE #undef FTPDELAY #undef ADMIN_FTPDELAY_MODIFIER diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 7dd96e00f01..e4c6b403e05 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -94,8 +94,8 @@ if(C == must_be_alone) continue if(our_area == get_area(C)) - return 0 - return 1 + return FALSE + return TRUE //We used to use linear regression to approximate the answer, but Mloc realized this was actually faster. //And lo and behold, it is, and it's more accurate to boot. @@ -263,7 +263,7 @@ while(Y1!=Y2) T=locate(X1,Y1,Z) if(IS_OPAQUE_TURF(T)) - return 0 + return FALSE Y1+=s else var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) @@ -279,8 +279,8 @@ X1+=signX //Line exits tile horizontally T=locate(X1,Y1,Z) if(IS_OPAQUE_TURF(T)) - return 0 - return 1 + return FALSE + return TRUE #undef SIGNV @@ -289,13 +289,9 @@ var/turf/Bturf = get_turf(B) if(!Aturf || !Bturf) - return 0 + return FALSE - if(inLineOfSight(Aturf.x,Aturf.y, Bturf.x,Bturf.y,Aturf.z)) - return 1 - - else - return 0 + return inLineOfSight(Aturf.x,Aturf.y, Bturf.x,Bturf.y,Aturf.z) /proc/try_move_adjacent(atom/movable/AM, trydir) var/turf/T = get_turf(AM) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index cf58c075c73..6b20b969624 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -257,15 +257,15 @@ /proc/text_in_list(haystack, list/needle_list, start=1, end=0) for(var/needle in needle_list) if(findtext(haystack, needle, start, end)) - return 1 - return 0 + return TRUE + return FALSE //Like above, but case sensitive /proc/text_in_list_case(haystack, list/needle_list, start=1, end=0) for(var/needle in needle_list) if(findtextEx(haystack, needle, start, end)) - return 1 - return 0 + return TRUE + return FALSE //Adds 'char' ahead of 'text' until there are 'count' characters total /proc/add_leading(text, count, char = " ") diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 0b396ce67aa..9b1f6ec3c8c 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -669,28 +669,28 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( //Direction works sometimes if(is_type_in_typecache(O, GLOB.WALLITEMS_INVERSE)) if(O.dir == turn(dir, 180)) - return 1 + return TRUE else if(O.dir == dir) - return 1 + return TRUE //Some stuff doesn't use dir properly, so we need to check pixel instead //That's exactly what get_turf_pixel() does if(get_turf_pixel(O) == locdir) - return 1 + return TRUE if(is_type_in_typecache(O, GLOB.WALLITEMS_EXTERNAL) && check_external) if(is_type_in_typecache(O, GLOB.WALLITEMS_INVERSE)) if(O.dir == turn(dir, 180)) - return 1 + return TRUE else if(O.dir == dir) - return 1 + return TRUE //Some stuff is placed directly on the wallturf (signs) for(var/obj/O in locdir) if(is_type_in_typecache(O, GLOB.WALLITEMS) && check_external != 2) if(O.pixel_x == 0 && O.pixel_y == 0) - return 1 - return 0 + return TRUE + return FALSE /proc/format_text(text) return replacetext(replacetext(text,"\proper ",""),"\improper ","") @@ -976,13 +976,13 @@ B --><-- A /atom/proc/contains(atom/A) if(!A) - return 0 + return FALSE for(var/atom/location = A.loc, location, location = location.loc) if(location == src) - return 1 + return TRUE /proc/flick_overlay_static(O, atom/A, duration) - set waitfor = 0 + set waitfor = FALSE if(!A || !O) return A.add_overlay(O) diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index c9746fae980..db2f62052f4 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -11,7 +11,7 @@ to check that the mob is not inside of something */ /atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused - return 0 + return // Not a sane use of the function and (for now) indicative of an error elsewhere /area/Adjacent(atom/neighbor) @@ -57,9 +57,9 @@ if(!src.ClickCross(get_dir(src,T1), border_only = 1, target_atom = target, mover = mover)) continue // could not enter src - return 1 // we don't care about our own density + return TRUE // we don't care about our own density - return 0 + return FALSE /* Adjacency (to anything else): @@ -78,11 +78,11 @@ // This is necessary for storage items not on your person. /obj/item/Adjacent(atom/neighbor, recurse = 1) if(neighbor == loc) - return 1 + return TRUE if(isitem(loc)) if(recurse > 0) return loc.Adjacent(neighbor,recurse - 1) - return 0 + return FALSE return ..() /* @@ -99,7 +99,7 @@ if( O.flags_1&ON_BORDER_1) // windows are on border, check them first if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically - return 0 //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones + return FALSE //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones else if( !border_only ) // dense, not on border, cannot pass over - return 0 - return 1 + return FALSE + return TRUE diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index f70b6a86a65..d40d0e65504 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -78,13 +78,13 @@ . = automatic /atom/proc/IsAutoclickable() - . = 1 + return TRUE /obj/screen/IsAutoclickable() - . = 0 + return FALSE /obj/screen/click_catcher/IsAutoclickable() - . = 1 + return TRUE /client/MouseDrag(src_object,atom/over_object,src_location,over_location,src_control,over_control,params) var/list/L = params2list(params) diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 2809f851b05..1f588774511 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -40,7 +40,7 @@ /obj/screen/movable/action_button/Click(location,control,params) if (!can_use(usr)) - return + return FALSE var/list/modifiers = params2list(params) if(modifiers["shift"]) @@ -68,7 +68,7 @@ desc = "Shift-click any button to reset its position, and Control-click it to lock it in place. Alt-click this button to reset all buttons to their default positions." icon = 'icons/mob/actions.dmi' icon_state = "bg_default" - var/hidden = 0 + var/hidden = FALSE var/hide_icon = 'icons/mob/actions.dmi' var/hide_state = "hide" var/show_state = "show" @@ -78,7 +78,7 @@ /obj/screen/movable/action_button/hide_toggle/Initialize() . = ..() var/static/list/icon_cache = list() - + var/cache_key = "[hide_icon][hide_state]" hide_appearance = icon_cache[cache_key] if(!hide_appearance) diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm index a5f19e263f3..ca4bf1a5bc2 100644 --- a/code/_onclick/hud/pai.dm +++ b/code/_onclick/hud/pai.dm @@ -83,14 +83,15 @@ required_software = "host scan" /obj/screen/pai/host_monitor/Click() - if(!..()) + . = ..() + if(!.) return var/mob/living/silicon/pai/pAI = usr if(iscarbon(pAI.card.loc)) pAI.hostscan.attack(pAI.card.loc, pAI) else to_chat(src, "You are not being carried by anyone!") - return 0 + return FALSE /obj/screen/pai/crew_manifest name = "Crew Manifest" diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index eed8baa1339..e777f4a1778 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -81,7 +81,7 @@ */ /mob/living/carbon/RestrainedClickOn(atom/A) - return 0 + return /mob/living/carbon/human/RangedAttack(atom/A, mouseparams) . = ..() diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 3ce770b66d5..75d5cb22daf 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -31,7 +31,7 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) Initialize() /datum/controller/failsafe/Initialize() - set waitfor = 0 + set waitfor = FALSE Failsafe.Loop() if(!QDELETED(src)) qdel(src) //when Loop() returns, we delete ourselves and let the mc recreate us diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index 707adfc83fe..714f22f38de 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -22,13 +22,13 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) /datum/controller/global_vars/Destroy(force) // This is done to prevent an exploit where admins can get around protected vars - SHOULD_CALL_PARENT(0) + SHOULD_CALL_PARENT(FALSE) return QDEL_HINT_IWILLGC /datum/controller/global_vars/stat_entry() if(!statclick) statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - + stat("Globals:", statclick.update("Edit")) /datum/controller/global_vars/vv_edit_var(var_name, var_value) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index ffe29172f2e..b3a94cf1718 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -39,7 +39,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new ///Only run ticker subsystems for the next n ticks. var/skip_ticks = 0 - var/make_runtime = 0 + var/make_runtime = FALSE var/initializations_finished_with_no_players_logged_in //I wonder what this could be? diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 16558f5870d..cd029b58ed8 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -23,7 +23,7 @@ var/priority = FIRE_PRIORITY_DEFAULT /// [Subsystem Flags][SS_NO_INIT] to control binary behavior. Flags must be set at compile time or before preinit finishes to take full effect. (You can also restart the mc to force them to process again) - var/flags = 0 + var/flags = NONE /// This var is set to TRUE after the subsystem has been initialized. var/initialized = FALSE diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index 25d080a1b10..49c4f58ffa9 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(acid) return ..() -/datum/controller/subsystem/acid/fire(resumed = 0) +/datum/controller/subsystem/acid/fire(resumed = FALSE) if (!resumed) src.currentrun = processing.Copy() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 71b82973c6b..a2744cb27be 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -70,7 +70,7 @@ SUBSYSTEM_DEF(air) return ..() -/datum/controller/subsystem/air/fire(resumed = 0) +/datum/controller/subsystem/air/fire(resumed = FALSE) var/timer = TICK_USAGE_REAL if(currentpart == SSAIR_REBUILD_PIPENETS) @@ -90,7 +90,7 @@ SUBSYSTEM_DEF(air) cost_pipenets = MC_AVERAGE(cost_pipenets, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_ATMOSMACHINERY if(currentpart == SSAIR_ATMOSMACHINERY) @@ -99,7 +99,7 @@ SUBSYSTEM_DEF(air) cost_atmos_machinery = MC_AVERAGE(cost_atmos_machinery, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_ACTIVETURFS if(currentpart == SSAIR_ACTIVETURFS) @@ -108,7 +108,7 @@ SUBSYSTEM_DEF(air) cost_turfs = MC_AVERAGE(cost_turfs, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_EXCITEDGROUPS if(currentpart == SSAIR_EXCITEDGROUPS) @@ -117,7 +117,7 @@ SUBSYSTEM_DEF(air) cost_groups = MC_AVERAGE(cost_groups, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_HIGHPRESSURE if(currentpart == SSAIR_HIGHPRESSURE) @@ -126,7 +126,7 @@ SUBSYSTEM_DEF(air) cost_highpressure = MC_AVERAGE(cost_highpressure, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_HOTSPOTS if(currentpart == SSAIR_HOTSPOTS) @@ -135,7 +135,7 @@ SUBSYSTEM_DEF(air) cost_hotspots = MC_AVERAGE(cost_hotspots, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_SUPERCONDUCTIVITY if(currentpart == SSAIR_SUPERCONDUCTIVITY) @@ -144,13 +144,13 @@ SUBSYSTEM_DEF(air) cost_superconductivity = MC_AVERAGE(cost_superconductivity, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) if(state != SS_RUNNING) return - resumed = 0 + resumed = FALSE currentpart = SSAIR_REBUILD_PIPENETS SStgui.update_uis(SSair) //Lightning fast debugging motherfucker -/datum/controller/subsystem/air/proc/process_pipenets(resumed = 0) +/datum/controller/subsystem/air/proc/process_pipenets(resumed = FALSE) if (!resumed) src.currentrun = networks.Copy() //cache for sanic speed (lists are references anyways) @@ -169,7 +169,7 @@ SUBSYSTEM_DEF(air) if(istype(atmos_machine, /obj/machinery/atmospherics)) pipenets_needing_rebuilt += atmos_machine -/datum/controller/subsystem/air/proc/process_atmos_machinery(resumed = 0) +/datum/controller/subsystem/air/proc/process_atmos_machinery(resumed = FALSE) var/seconds = wait * 0.1 if (!resumed) src.currentrun = atmos_machinery.Copy() @@ -184,7 +184,7 @@ SUBSYSTEM_DEF(air) return -/datum/controller/subsystem/air/proc/process_super_conductivity(resumed = 0) +/datum/controller/subsystem/air/proc/process_super_conductivity(resumed = FALSE) if (!resumed) src.currentrun = active_super_conductivity.Copy() //cache for sanic speed (lists are references anyways) @@ -196,7 +196,7 @@ SUBSYSTEM_DEF(air) if(MC_TICK_CHECK) return -/datum/controller/subsystem/air/proc/process_hotspots(resumed = 0) +/datum/controller/subsystem/air/proc/process_hotspots(resumed = FALSE) if (!resumed) src.currentrun = hotspots.Copy() //cache for sanic speed (lists are references anyways) @@ -212,7 +212,7 @@ SUBSYSTEM_DEF(air) return -/datum/controller/subsystem/air/proc/process_high_pressure_delta(resumed = 0) +/datum/controller/subsystem/air/proc/process_high_pressure_delta(resumed = FALSE) while (high_pressure_delta.len) var/turf/open/T = high_pressure_delta[high_pressure_delta.len] high_pressure_delta.len-- @@ -221,7 +221,7 @@ SUBSYSTEM_DEF(air) if(MC_TICK_CHECK) return -/datum/controller/subsystem/air/proc/process_active_turfs(resumed = 0) +/datum/controller/subsystem/air/proc/process_active_turfs(resumed = FALSE) //cache for sanic speed var/fire_count = times_fired if (!resumed) @@ -236,7 +236,7 @@ SUBSYSTEM_DEF(air) if (MC_TICK_CHECK) return -/datum/controller/subsystem/air/proc/process_excited_groups(resumed = 0) +/datum/controller/subsystem/air/proc/process_excited_groups(resumed = FALSE) if (!resumed) src.currentrun = excited_groups.Copy() //cache for sanic speed (lists are references anyways) @@ -262,7 +262,7 @@ SUBSYSTEM_DEF(air) T.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_VIBRANT_LIME) #endif if(istype(T)) - T.excited = 0 + T.excited = FALSE if(T.excited_group) T.excited_group.garbage_collect() @@ -271,7 +271,7 @@ SUBSYSTEM_DEF(air) #ifdef VISUALIZE_ACTIVE_TURFS T.add_atom_colour(COLOR_VIBRANT_LIME, TEMPORARY_COLOUR_PRIORITY) #endif - T.excited = 1 + T.excited = TRUE active_turfs |= T if(currentpart == SSAIR_ACTIVETURFS) currentrun |= T @@ -370,7 +370,7 @@ SUBSYSTEM_DEF(air) else EG.add_turf(ET) if (!ET.excited) - ET.excited = 1 + ET.excited = TRUE . += ET /turf/open/space/resolve_active_graph() return list() diff --git a/code/controllers/subsystem/discord.dm b/code/controllers/subsystem/discord.dm index 2bd0ad695d8..f53c983acfc 100644 --- a/code/controllers/subsystem/discord.dm +++ b/code/controllers/subsystem/discord.dm @@ -42,14 +42,14 @@ SUBSYSTEM_DEF(discord) var/list/reverify_cache = list() var/notify_file = file("data/notify.json") /// Is TGS enabled (If not we won't fire because otherwise this is useless) - var/enabled = 0 + var/enabled = FALSE /datum/controller/subsystem/discord/Initialize(start_timeofday) // Check for if we are using TGS, otherwise return and disables firing if(world.TgsAvailable()) - enabled = 1 // Allows other procs to use this (Account linking, etc) + enabled = TRUE // Allows other procs to use this (Account linking, etc) else - can_fire = 0 // We dont want excess firing + can_fire = FALSE // We dont want excess firing return ..() // Cancel try diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 1c74266d6ac..43cce09c44d 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -25,7 +25,7 @@ SUBSYSTEM_DEF(events) return ..() -/datum/controller/subsystem/events/fire(resumed = 0) +/datum/controller/subsystem/events/fire(resumed = FALSE) if(!resumed) checkEvent() //only check these if we aren't resuming a paused fire src.currentrun = running.Copy() diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index fca394924d9..fb0ddead09a 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -2,13 +2,13 @@ SUBSYSTEM_DEF(ipintel) name = "XKeyScore" init_order = INIT_ORDER_XKEYSCORE flags = SS_NO_FIRE - var/enabled = 0 //disable at round start to avoid checking reconnects + var/enabled = FALSE //disable at round start to avoid checking reconnects var/throttle = 0 var/errors = 0 var/list/cache = list() /datum/controller/subsystem/ipintel/Initialize(timeofday, zlevel) - enabled = 1 + enabled = TRUE . = ..() diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 8d8874f1f70..cefc91b7107 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -45,7 +45,7 @@ SUBSYSTEM_DEF(job) var/list/all_jobs = subtypesof(/datum/job) if(!all_jobs.len) to_chat(world, "Error setting up jobs, no job datums found") - return 0 + return FALSE for(var/J in all_jobs) var/datum/job/job = new J() @@ -62,7 +62,7 @@ SUBSYSTEM_DEF(job) name_occupations[job.title] = job type_occupations[J] = job - return 1 + return TRUE /datum/controller/subsystem/job/proc/GetJob(rank) @@ -189,8 +189,8 @@ SUBSYSTEM_DEF(job) continue var/mob/dead/new_player/candidate = pick(candidates) if(AssignRole(candidate, command_position)) - return 1 - return 0 + return TRUE + return FALSE //This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level @@ -209,10 +209,10 @@ SUBSYSTEM_DEF(job) AssignRole(candidate, command_position) /datum/controller/subsystem/job/proc/FillAIPosition() - var/ai_selected = 0 + var/ai_selected = FALSE var/datum/job/job = GetJob("AI") if(!job) - return 0 + return FALSE for(var/i = job.total_positions, i > 0, i--) for(var/level in level_order) var/list/candidates = list() @@ -223,8 +223,8 @@ SUBSYSTEM_DEF(job) ai_selected++ break if(ai_selected) - return 1 - return 0 + return TRUE + return FALSE /** Proc DivideOccupations diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index f356009569e..60bf8314db3 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -27,7 +27,7 @@ SUBSYSTEM_DEF(machines) return ..() -/datum/controller/subsystem/machines/fire(resumed = 0) +/datum/controller/subsystem/machines/fire(resumed = FALSE) if (!resumed) for(var/datum/powernet/Powernet in powernets) Powernet.reset() //reset the power state. diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index 5a7dd30ce3b..94140c0f8fe 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -24,7 +24,7 @@ SUBSYSTEM_DEF(mobs) dead_players_by_zlevel.len++ dead_players_by_zlevel[dead_players_by_zlevel.len] = list() -/datum/controller/subsystem/mobs/fire(resumed = 0) +/datum/controller/subsystem/mobs/fire(resumed = FALSE) var/seconds = wait * 0.1 if (!resumed) src.currentrun = GLOB.mob_living_list.Copy() diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index 342392ec67f..c563e2a7452 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -68,7 +68,7 @@ SUBSYSTEM_DEF(pai) if("submit") if(candidate) - candidate.ready = 1 + candidate.ready = TRUE for(var/obj/item/paicard/p in pai_card_list) if(!p.pai) p.alertUpdate() @@ -195,4 +195,4 @@ SUBSYSTEM_DEF(pai) var/description var/role var/comments - var/ready = 0 + var/ready = FALSE diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 454709e1d52..f099c3afb2d 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -14,7 +14,7 @@ SUBSYSTEM_DEF(processing) msg = "[stat_tag]:[length(processing)]" return ..() -/datum/controller/subsystem/processing/fire(resumed = 0) +/datum/controller/subsystem/processing/fire(resumed = FALSE) if (!resumed) currentrun = processing.Copy() //cache for sanic speed (lists are references anyways) @@ -34,5 +34,5 @@ SUBSYSTEM_DEF(processing) ///This proc is called on a datum if it is being processed in a subsystem. If you override this do not call parent, as it will return PROCESS_KILL. This is done to prevent objects that dont override process() from staying in the processing list /datum/proc/process() - set waitfor = 0 + set waitfor = FALSE return PROCESS_KILL diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index f989e5ff359..6281c98d190 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -303,7 +303,7 @@ SUBSYSTEM_DEF(shuttle) if (!SSticker.IsRoundInProgress()) return - var/callShuttle = 1 + var/callShuttle = TRUE for(var/thing in GLOB.shuttle_caller_list) if(isAI(thing)) @@ -319,7 +319,7 @@ SUBSYSTEM_DEF(shuttle) var/turf/T = get_turf(thing) if(T && is_station_level(T.z)) - callShuttle = 0 + callShuttle = FALSE break if(callShuttle) diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index 0e9aa01753c..c1c7e2a872f 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(spacedrift) return ..() -/datum/controller/subsystem/spacedrift/fire(resumed = 0) +/datum/controller/subsystem/spacedrift/fire(resumed = FALSE) if (!resumed) src.currentrun = processing.Copy() diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index 2fe7c64c72d..511ab623da4 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -33,7 +33,7 @@ SUBSYSTEM_DEF(tgui) msg = "P:[length(open_uis)]" return ..() -/datum/controller/subsystem/tgui/fire(resumed = 0) +/datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) src.current_run = open_uis.Copy() // Cache for sanic speed (lists are references anyways) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 98578c9134c..02aff955936 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -14,7 +14,7 @@ SUBSYSTEM_DEF(ticker) var/start_immediately = FALSE var/setup_done = FALSE //All game setup done including mode post setup and - var/hide_mode = 0 + var/hide_mode = FALSE var/datum/game_mode/mode = null var/login_music //music played in pregame lobby @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(ticker) var/list/datum/mind/minds = list() //The characters in the game. Used for objective tracking. - var/delay_end = 0 //if set true, the round will not restart on it's own + var/delay_end = FALSE //if set true, the round will not restart on it's own var/admin_delay_notice = "" //a message to display to anyone who tries to restart the world after a delay var/ready_for_reboot = FALSE //all roundend preparation done with, all that's left is reboot @@ -32,7 +32,7 @@ SUBSYSTEM_DEF(ticker) ///Boolean to see if the game needs to set up a triumvirate ai (see tripAI.dm) var/triai = FALSE - var/tipped = 0 //Did we broadcast the tip of the day yet? + var/tipped = FALSE //Did we broadcast the tip of the day yet? var/selected_tip // What will be the tip of the day? var/timeLeft //pregame timer @@ -227,7 +227,7 @@ SUBSYSTEM_DEF(ticker) if(!mode) if(!runnable_modes.len) to_chat(world, "Unable to choose playable game mode. Reverting to pre-game lobby.") - return 0 + return FALSE mode = pickweight(runnable_modes) if(!mode) //too few roundtypes all run too recently mode = pick(runnable_modes) @@ -239,7 +239,7 @@ SUBSYSTEM_DEF(ticker) qdel(mode) mode = null SSjob.ResetOccupations() - return 0 + return FALSE CHECK_TICK //Configure mode and assign player to special mode stuff @@ -255,7 +255,7 @@ SUBSYSTEM_DEF(ticker) QDEL_NULL(mode) to_chat(world, "Error setting up [GLOB.master_mode]. Reverting to pre-game lobby.") SSjob.ResetOccupations() - return 0 + return FALSE else message_admins("DEBUG: Bypassing prestart checks...") diff --git a/code/datums/action.dm b/code/datums/action.dm index 5952340136b..8225d1e7f72 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -168,12 +168,13 @@ return ..() /datum/action/item_action/Trigger() - if(!..()) - return 0 + . = ..() + if(!.) + return FALSE if(target) var/obj/item/I = target I.ui_action_click(owner, src) - return 1 + return TRUE /datum/action/item_action/ApplyIcon(obj/screen/movable/action_button/current_button, force) if(button_icon && button_icon_state) @@ -315,7 +316,7 @@ if(istype(target, /obj/item/hierophant_club)) var/obj/item/hierophant_club/H = target if(H.teleporting) - return 0 + return FALSE return ..() /datum/action/item_action/toggle_helmet_flashlight @@ -384,7 +385,7 @@ /datum/action/item_action/jetpack_stabilization/IsAvailable() var/obj/item/tank/jetpack/J = target if(!istype(J) || !J.on) - return 0 + return FALSE return ..() /datum/action/item_action/hands_free @@ -439,7 +440,7 @@ /datum/action/item_action/organ_action/IsAvailable() var/obj/item/organ/I = target if(!I.owner) - return 0 + return FALSE return ..() /datum/action/item_action/organ_action/toggle/New(Target) @@ -586,12 +587,12 @@ /datum/action/innate/Trigger() if(!..()) - return 0 + return FALSE if(!active) Activate() else Deactivate() - return 1 + return TRUE /datum/action/innate/proc/Activate() return diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 0d44759a6f3..96ac651fdaf 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -198,7 +198,7 @@ opentime = 0 /datum/browser/modal/open(use_onclose) - set waitfor = 0 + set waitfor = FALSE opentime = world.time if (stealfocus) diff --git a/code/datums/components/honkspam.dm b/code/datums/components/honkspam.dm index 73b5e3335aa..7f2069d18df 100644 --- a/code/datums/components/honkspam.dm +++ b/code/datums/components/honkspam.dm @@ -2,9 +2,10 @@ // used ONLY on april's fool. I moved it to a component so it could be // used in other places +//This is copypasted on other obj so if you are readin this go refactor it, start on objs with var/limiting_spam /datum/component/honkspam dupe_mode = COMPONENT_DUPE_UNIQUE - var/spam_flag = FALSE + var/limiting_spam = FALSE /datum/component/honkspam/Initialize() if(!isitem(parent)) @@ -12,11 +13,11 @@ RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/interact) /datum/component/honkspam/proc/reset_spamflag() - spam_flag = FALSE + limiting_spam = FALSE /datum/component/honkspam/proc/interact(mob/user) - if(!spam_flag) - spam_flag = TRUE + if(!limiting_spam) + limiting_spam = TRUE var/obj/item/parent_item = parent playsound(parent_item.loc, 'sound/items/bikehorn.ogg', 50, TRUE) addtimer(CALLBACK(src, .proc/reset_spamflag), 2 SECONDS) diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 65da13931e7..6ef4d2e31cb 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -257,7 +257,7 @@ else if(the_event.timeout) addtimer(CALLBACK(src, .proc/clear_event, null, category), the_event.timeout, TIMER_UNIQUE|TIMER_OVERRIDE) - return 0 //Don't have to update the event. + return //Don't have to update the event. var/list/params = args.Copy(4) params.Insert(1, parent) the_event = new type(arglist(params)) @@ -276,7 +276,7 @@ category = REF(category) var/datum/mood_event/event = mood_events[category] if(!event) - return 0 + return mood_events -= category qdel(event) diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index 8600a59de0c..af7bd200799 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -40,9 +40,9 @@ /datum/component/spawner/proc/try_spawn_mob() var/atom/P = parent if(spawned_mobs.len >= max_mobs) - return 0 + return if(spawn_delay > world.time) - return 0 + return spawn_delay = world.time + spawn_time var/chosen_mob_type = pick(mob_types) var/mob/living/simple_animal/L = new chosen_mob_type(P.loc) diff --git a/code/datums/components/summoning.dm b/code/datums/components/summoning.dm index 9109e26b300..f23229c9d8d 100644 --- a/code/datums/components/summoning.dm +++ b/code/datums/components/summoning.dm @@ -52,11 +52,11 @@ /datum/component/summoning/proc/do_spawn_mob(atom/spawn_location, summoner) if(spawned_mobs.len >= max_mobs) - return 0 + return if(last_spawned_time > world.time) - return 0 + return if(!prob(spawn_chance)) - return 0 + return last_spawned_time = world.time + spawn_delay var/chosen_mob_type = pick(mob_types) var/mob/living/simple_animal/L = new chosen_mob_type(spawn_location) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 1061bc3e778..2c94fcaa766 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -92,7 +92,7 @@ * Returns [QDEL_HINT_QUEUE] */ /datum/proc/Destroy(force=FALSE, ...) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) tag = null datum_flags &= ~DF_USE_TAG //In case something tries to REF us weak_reference = null //ensure prompt GCing of weakref. diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index e7031761542..8e9fc5755ed 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -136,11 +136,11 @@ /datum/disease/advance/IsSame(datum/disease/advance/D) if(!(istype(D, /datum/disease/advance))) - return 0 + return FALSE if(GetDiseaseID() != D.GetDiseaseID()) - return 0 - return 1 + return FALSE + return TRUE // Returns the advance disease with a different reference memory. /datum/disease/advance/Copy() @@ -178,8 +178,8 @@ /datum/disease/advance/proc/HasSymptom(datum/symptom/S) for(var/datum/symptom/symp in symptoms) if(symp.type == S.type) - return 1 - return 0 + return TRUE + return FALSE // Will generate new unique symptoms, use this if there are none. Returns a list of symptoms that were generated. /datum/disease/advance/proc/GenerateSymptoms(level_min, level_max, amount_get = 0) diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 5a62dacbbc9..b573233c837 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -110,7 +110,7 @@ desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey." severity = DISEASE_SEVERITY_BIOHAZARD stage_prob = 4 - visibility_flags = 0 + visibility_flags = NONE agent = "Kongey Vibrion M-909" new_form = /mob/living/carbon/monkey bantype = ROLE_MONKEY @@ -172,7 +172,7 @@ agent = "R2D2 Nanomachines" desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg." severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 + visibility_flags = NONE stage1 = list() stage2 = list("Your joints feel stiff.", "Beep...boop..") stage3 = list("Your joints feel very stiff.", "Your skin feels loose.", "You can feel something move...inside.") @@ -209,7 +209,7 @@ agent = "Rip-LEY Alien Microbes" desc = "This disease changes the victim into a xenomorph." severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 + visibility_flags = NONE stage1 = list() stage2 = list("Your throat feels scratchy.", "Kill...") stage3 = list("Your throat feels very scratchy.", "Your skin feels tight.", "You can feel something move...inside.") @@ -242,7 +242,7 @@ agent = "Advanced Mutation Toxin" desc = "This highly concentrated extract converts anything into more of itself." severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 + visibility_flags = NONE stage1 = list("You don't feel very well.") stage2 = list("Your skin feels a little slimy.") stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.") @@ -275,7 +275,7 @@ agent = "Fell Doge Majicks" desc = "This disease transforms the victim into a corgi." severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 + visibility_flags = NONE stage1 = list("BARK.") stage2 = list("You feel the need to wear silly hats.") stage3 = list("Must... eat... chocolate....", "YAP") @@ -305,7 +305,7 @@ desc = "A 'gift' from somewhere terrible." stage_prob = 20 severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 + visibility_flags = NONE stage1 = list("Your stomach rumbles.") stage2 = list("Your skin feels saggy.") stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.") @@ -324,7 +324,7 @@ agent = "Tranquility" desc = "Consuming the flesh of a Gondola comes at a terrible price." severity = DISEASE_SEVERITY_BIOHAZARD - visibility_flags = 0 + visibility_flags = NONE stage1 = list("You seem a little lighter in your step.") stage2 = list("You catch yourself smiling for no reason.") stage3 = list("A cruel sense of calm overcomes you.", "You can't feel your arms!", "You let go of the urge to hurt clowns.") diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 82833241d55..e6aaf50246e 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -221,8 +221,8 @@ /datum/dna/proc/is_same_as(datum/dna/D) if(uni_identity == D.uni_identity && mutation_index == D.mutation_index && real_name == D.real_name) if(species.type == D.species.type && features == D.features && blood_type == D.blood_type) - return 1 - return 0 + return TRUE + return FALSE /datum/dna/proc/update_instability(alert=TRUE) stability = 100 @@ -438,7 +438,7 @@ /datum/dna/proc/check_block_string(mutation) if((LAZYLEN(mutation_index) > DNA_MUTATION_BLOCKS) || !(mutation in mutation_index)) - return 0 + return FALSE return is_gene_active(mutation) /datum/dna/proc/is_gene_active(mutation) @@ -549,7 +549,7 @@ /proc/scramble_dna(mob/living/carbon/M, ui=FALSE, se=FALSE, probability) if(!M.has_dna()) - return 0 + return FALSE if(se) for(var/i=1, i<=DNA_MUTATION_BLOCKS, i++) if(prob(probability)) @@ -560,7 +560,7 @@ if(prob(probability)) M.dna.uni_identity = setblock(M.dna.uni_identity, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters)) M.updateappearance(mutations_overlay_update=1) - return 1 + return TRUE //value in range 1 to values. values must be greater than 0 //all arguments assumed to be positive integers diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index 015267b5966..004c11071d8 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -18,7 +18,7 @@ /// Activates the functionality defined by the element on the given target datum /datum/element/proc/Attach(datum/target) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) if(type == /datum/element) return ELEMENT_INCOMPATIBLE SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src) @@ -30,7 +30,7 @@ SIGNAL_HANDLER SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) UnregisterSignal(source, COMSIG_PARENT_QDELETING) /datum/element/Destroy(force) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index d351a1f8aee..2760c333ece 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -23,7 +23,7 @@ "You avoid [A]'s [atk_verb]!", "You hear a swoosh!", COMBAT_MESSAGE_RANGE, A) to_chat(A, "Your [atk_verb] misses [D]!") log_combat(A, D, "attempted to hit", atk_verb) - return 0 + return FALSE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) @@ -46,7 +46,7 @@ D.apply_effect(200,EFFECT_KNOCKDOWN,armor_block) D.SetSleeping(100) log_combat(A, D, "knocked out (boxing) ") - return 1 + return TRUE /obj/item/clothing/gloves/boxing var/datum/martial_art/boxing/style = new diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 3e989d30b67..7406723cb93 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -75,20 +75,20 @@ if("neck_chop") streak = "" neck_chop(A,D) - return 1 + return TRUE if("leg_sweep") streak = "" leg_sweep(A,D) - return 1 + return TRUE if("quick_choke")//is actually lung punch streak = "" quick_choke(A,D) - return 1 - return 0 + return TRUE + return FALSE /datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D) if(D.stat || D.IsParalyzed()) - return 0 + return FALSE var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST) var/armor_block = D.run_armor_check(affecting, MELEE) D.visible_message("[A] leg sweeps [D]!", \ @@ -98,7 +98,7 @@ D.apply_damage(rand(20,30), STAMINA, affecting, armor_block) D.Knockdown(60) log_combat(A, D, "leg sweeped") - return 1 + return TRUE /datum/martial_art/krav_maga/proc/quick_choke(mob/living/carbon/human/A, mob/living/carbon/human/D)//is actually lung punch D.visible_message("[A] pounds [D] on the chest!", \ @@ -109,7 +109,7 @@ D.losebreath = clamp(D.losebreath + 5, 0, 10) D.adjustOxyLoss(10) log_combat(A, D, "quickchoked") - return 1 + return TRUE /datum/martial_art/krav_maga/proc/neck_chop(mob/living/carbon/human/A, mob/living/carbon/human/D) D.visible_message("[A] karate chops [D]'s neck!", \ @@ -120,17 +120,17 @@ if(D.silent <= 10) D.silent = clamp(D.silent + 10, 0, 10) log_combat(A, D, "neck chopped") - return 1 + return TRUE /datum/martial_art/krav_maga/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(check_streak(A,D)) - return 1 + return TRUE log_combat(A, D, "grabbed (Krav Maga)") ..() /datum/martial_art/krav_maga/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(check_streak(A,D)) - return 1 + return TRUE log_combat(A, D, "punched") var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, MELEE) @@ -150,11 +150,11 @@ "You're [picked_hit_type]ed by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A) to_chat(A, "You [picked_hit_type] [D]!") log_combat(A, D, "[picked_hit_type] with [name]") - return 1 + return TRUE /datum/martial_art/krav_maga/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) if(check_streak(A,D)) - return 1 + return TRUE var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, MELEE) if((D.mobility_flags & MOBILITY_STAND)) @@ -176,7 +176,7 @@ if(prob(D.getStaminaLoss())) D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!") D.drop_all_held_items() - return 1 + return TRUE //Krav Maga Gloves diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 8342897b9fc..04c7bc91aed 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -22,24 +22,24 @@ if("drop") streak = "" drop(A,D) - return 1 + return TRUE if("strike") streak = "" strike(A,D) - return 1 + return TRUE if("kick") streak = "" kick(A,D) - return 1 + return TRUE if("throw") streak = "" throw_wrassle(A,D) - return 1 + return TRUE if("slam") streak = "" slam(A,D) - return 1 - return 0 + return TRUE + return FALSE /datum/action/slam name = "Slam (Cinch) - Slam a grappled opponent into the floor." @@ -158,11 +158,11 @@ if (get_dist(A, D) > 1) to_chat(A, "[D] is too far away!") - return 0 + return if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't throw [D] from here!") - return 0 + return A.setDir(turn(A.dir, 90)) var/turf/T = get_step(A, A.dir) @@ -171,7 +171,7 @@ D.forceMove(T) D.setDir(get_dir(D, A)) else - return 0 + return sleep(delay) @@ -180,11 +180,11 @@ if (get_dist(A, D) > 1) to_chat(A, "[D] is too far away!") - return 0 + return if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't throw [D] from here!") - return 0 + return D.forceMove(A.loc) // Maybe this will help with the wallthrowing bug. @@ -198,7 +198,7 @@ D.emote("scream") D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/Paralyze, 20)) log_combat(A, D, "has thrown with wrestling") - return 0 + return /datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D) set waitfor = FALSE @@ -247,7 +247,7 @@ A.pixel_y = 0 D.pixel_x = 0 D.pixel_y = 0 - return 0 + return if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't slam [D] here!") @@ -255,7 +255,7 @@ A.pixel_y = 0 D.pixel_x = 0 D.pixel_y = 0 - return 0 + return else if (A) A.pixel_x = 0 @@ -263,7 +263,7 @@ if (D) D.pixel_x = 0 D.pixel_y = 0 - return 0 + return sleep(1) @@ -275,11 +275,11 @@ if (get_dist(A, D) > 1) to_chat(A, "[D] is too far away!") - return 0 + return if (!isturf(A.loc) || !isturf(D.loc)) to_chat(A, "You can't slam [D] here!") - return 0 + return D.forceMove(A.loc) @@ -318,7 +318,7 @@ log_combat(A, D, "body-slammed") - return 0 + return /datum/martial_art/wrestling/proc/CheckStrikeTurf(mob/living/carbon/human/A, turf/T) if (A && (T && isturf(T) && get_dist(A, T) <= 1)) @@ -401,12 +401,12 @@ A.adjustBruteLoss(rand(10,20)) A.Paralyze(60) to_chat(A, "[D] is too far away!") - return 0 + return if (!isturf(A.loc) || !isturf(D.loc)) A.pixel_y = 0 to_chat(A, "You can't drop onto [D] from here!") - return 0 + return if(A) animate(A, transform = matrix(90, MATRIX_ROTATE), time = 1, loop = 0) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a6bc5a3a3ff..562882b03dd 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -34,7 +34,7 @@ var/name //replaces mob/var/original_name var/ghostname //replaces name for observers name if set var/mob/living/current - var/active = 0 + var/active = FALSE var/memory @@ -779,7 +779,7 @@ /mob/proc/sync_mind() mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) - mind.active = 1 //indicates that the mind is currently synced with a client + mind.active = TRUE //indicates that the mind is currently synced with a client /datum/mind/proc/has_martialart(string) if(martial_art && martial_art.id == string) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index e02f51946a6..91da87f1a24 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -451,9 +451,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/proc/powered(chan) // return true if the area has power to given channel if(!requires_power) - return 1 + return TRUE if(always_unpowered) - return 0 + return FALSE switch(chan) if(AREA_USAGE_EQUIP) return power_equip @@ -462,13 +462,13 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(AREA_USAGE_ENVIRON) return power_environ - return 0 + return FALSE /** - * Space is not powered ever, so this returns 0 + * Space is not powered ever, so this returns false */ /area/space/powered(chan) //Nope.avi - return 0 + return FALSE /** * Called when the area power status changes diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm index 0fec5debd21..35f5314deb1 100644 --- a/code/game/area/areas/holodeck.dm +++ b/code/game/area/areas/holodeck.dm @@ -6,7 +6,7 @@ area_flags = VALID_TERRITORY | UNIQUE_AREA | NOTELEPORT | HIDDEN_AREA var/obj/machinery/computer/holodeck/linked - var/restricted = 0 // if true, program goes on emag list + var/restricted = FALSE // if true, program goes on emag list /* Power tracking: Use the holodeck computer's power grid @@ -33,7 +33,7 @@ /area/holodeck/use_power(amount, chan) if(!linked) - return 0 + return FALSE var/area/A = get_area(linked) ASSERT(!istype(A, /area/holodeck)) return ..() @@ -102,28 +102,28 @@ /area/holodeck/rec_center/medical name = "Holodeck - Emergency Medical" - restricted = 1 + restricted = TRUE /area/holodeck/rec_center/thunderdome1218 name = "Holodeck - 1218 AD" - restricted = 1 + restricted = TRUE /area/holodeck/rec_center/burn name = "Holodeck - Atmospheric Burn Test" - restricted = 1 + restricted = TRUE /area/holodeck/rec_center/wildlife name = "Holodeck - Wildlife Simulation" - restricted = 1 + restricted = TRUE /area/holodeck/rec_center/bunker name = "Holodeck - Holdout Bunker" - restricted = 1 + restricted = TRUE /area/holodeck/rec_center/anthophila name = "Holodeck - Anthophila" - restricted = 1 + restricted = TRUE /area/holodeck/rec_center/refuel name = "Holodeck - Refueling Station" - restricted = 1 + restricted = TRUE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 40fb1eef94e..354f9b6d098 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -643,7 +643,7 @@ /// Updates the overlays of the atom /atom/proc/update_overlays() - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) . = list() SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) @@ -1482,10 +1482,10 @@ return max_grav if(isspaceturf(T)) // Turf never has gravity - return FALSE + return 0 if(istype(T, /turf/open/transparent/openspace)) //openspace in a space area doesn't get gravity if(istype(get_area(T), /area/space)) - return FALSE + return 0 var/area/A = get_area(T) if(A.has_gravity) // Areas which always has gravity diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 5d6187ecd69..3a93d6c5c20 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -605,38 +605,38 @@ */ /atom/movable/proc/Process_Spacemove(movement_dir = 0) if(has_gravity(src)) - return 1 + return TRUE if(pulledby) - return 1 + return TRUE if(throwing) - return 1 + return TRUE if(!isturf(loc)) - return 1 + return TRUE if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier - return 1 + return TRUE - return 0 + return FALSE /// Only moves the object if it's under no gravity /atom/movable/proc/newtonian_move(direction) if(!loc || Process_Spacemove(0)) inertia_dir = 0 - return 0 + return FALSE inertia_dir = direction if(!direction) - return 1 + return TRUE inertia_last_loc = loc SSspacedrift.processing[src] = src - return 1 + return TRUE /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - set waitfor = 0 + set waitfor = FALSE var/hitpush = TRUE var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) diff --git a/code/game/communications.dm b/code/game/communications.dm index 9d7daeeec7b..615a829e4c5 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -150,7 +150,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( if(range) start_point = get_turf(source) if(!start_point) - return 0 + return //Send the data for(var/current_filter in filter_list) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 0044d18f106..8b582dd6478 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -24,13 +24,13 @@ /datum/atom_hud/data/human/medical/basic/proc/check_sensors(mob/living/carbon/human/H) if(!istype(H)) - return 0 + return FALSE var/obj/item/clothing/under/U = H.w_uniform if(!istype(U)) - return 0 + return FALSE if(U.sensor_mode <= SENSOR_VITALS) - return 0 - return 1 + return FALSE + return TRUE /datum/atom_hud/data/human/medical/basic/add_to_single_hud(mob/M, mob/living/carbon/H) if(check_sensors(H)) diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index e722505c2d3..80cdc0105cc 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -17,12 +17,13 @@ var/const/changeling_amount = 1 //hard limit on changelings if scaling is turned off /datum/game_mode/traitor/changeling/can_start() - if(!..()) - return 0 + . = ..() + if(!.) + return possible_changelings = get_players_for_role(ROLE_CHANGELING) if(possible_changelings.len < required_enemies) - return 0 - return 1 + return FALSE + return TRUE /datum/game_mode/traitor/changeling/pre_setup() if(CONFIG_GET(flag/protect_roles_from_antagonist)) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 519f4646fbd..d6376328014 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -48,8 +48,6 @@ Cultists: Carry out Nar'Sie's will.\n\ Crew: Prevent the cult from expanding and drive it out." - var/finished = 0 - var/acolytes_needed = 10 //for the survive objective var/acolytes_survived = 0 @@ -145,9 +143,9 @@ if(cult_mind.current.onCentCom() || cult_mind.current.onSyndieBase()) acolytes_survived++ if(acolytes_survived>=acolytes_needed) - return 0 + return FALSE else - return 1 + return TRUE /datum/game_mode/cult/generate_report() diff --git a/code/game/gamemodes/devil/devil_agent/devil_agent.dm b/code/game/gamemodes/devil/devil_agent/devil_agent.dm index c8fb62faba0..e3ccca09ac0 100644 --- a/code/game/gamemodes/devil/devil_agent/devil_agent.dm +++ b/code/game/gamemodes/devil/devil_agent/devil_agent.dm @@ -40,5 +40,5 @@ outsellobjective.target = target_mind outsellobjective.update_explanation_text() D.objectives += outsellobjective - return 1 - return 0 + return TRUE + return FALSE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index b47c0a4fd53..406b515e769 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -50,7 +50,7 @@ /// A flag that determines how the ruleset is handled /// HIGHLANDER_RULESET are rulesets can end the round. /// TRAITOR_RULESET and MINOR_RULESET can't end the round and have no difference right now. - var/flags = 0 + var/flags = NONE /// Pop range per requirement. If zero defaults to mode's pop_per_requirement. var/pop_per_requirement = 0 /// Requirements are the threat level requirements per pop range. diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 3d7e95b9869..b285ad00765 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -714,7 +714,7 @@ cost = 0 requirements = list(101,101,101,101,101,101,101,101,101,101) var/meteordelay = 2000 - var/nometeors = 0 + var/nometeors = FALSE var/rampupdelta = 5 /datum/dynamic_ruleset/roundstart/meteor/rule_process() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 3c65135dbe4..df2a1e99538 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -69,20 +69,20 @@ playerC++ if(!GLOB.Debug2) if(playerC < required_players || (maximum_players >= 0 && playerC > maximum_players)) - return 0 + return FALSE antag_candidates = get_players_for_role(antag_flag) if(!GLOB.Debug2) if(antag_candidates.len < required_enemies) - return 0 - return 1 + return FALSE + return TRUE else message_admins("DEBUG: GAME STARTING WITHOUT PLAYER NUMBER CHECKS, THIS WILL PROBABLY BREAK SHIT.") - return 1 + return TRUE ///Attempts to select players for special roles the mode might have. /datum/game_mode/proc/pre_setup() - return 1 + return TRUE ///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things /datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. @@ -119,7 +119,7 @@ addtimer(CALLBACK(src, .proc/send_intercept, 0), rand(waittime_l, waittime_h)) generate_station_goals() gamemode_ready = TRUE - return 1 + return TRUE ///Handles late-join antag assignments @@ -159,10 +159,10 @@ switch(SSshuttle.emergency.mode) //Rounds on the verge of ending don't get new antags, they just run out if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) - return 1 + return TRUE if(SHUTTLE_CALL) if(SSshuttle.emergency.timeLeft(1) < initial(SSshuttle.emergencyCallTime)*0.5) - return 1 + return TRUE var/matc = CONFIG_GET(number/midround_antag_time_check) if(world.time >= (matc * 600)) @@ -199,7 +199,7 @@ //somewhere between 1 and 3 minutes from now if(!CONFIG_GET(keyed_list/midround_antag)[SSticker.mode.config_tag]) round_converted = 0 - return 1 + return TRUE for(var/mob/living/carbon/human/H in antag_candidates) if(H.client) replacementmode.make_antag_chance(H) @@ -210,7 +210,7 @@ ///Called by the gameSSticker /datum/game_mode/process() - return 0 + return //For things that do not die easily /datum/game_mode/proc/are_special_antags_dead() @@ -234,41 +234,41 @@ if(Player.mind) if(Player.mind.special_role || LAZYLEN(Player.mind.antag_datums)) continuous_sanity_checked = 1 - return 0 + return FALSE if(!continuous_sanity_checked) message_admins("The roundtype ([config_tag]) has no antagonists, continuous round has been defaulted to on and midround_antag has been defaulted to off.") continuous[config_tag] = TRUE midround_antag[config_tag] = FALSE SSshuttle.clearHostileEnvironment(src) - return 0 + return FALSE if(living_antag_player && living_antag_player.mind && isliving(living_antag_player) && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player) && (living_antag_player.mind.special_role || LAZYLEN(living_antag_player.mind.antag_datums))) - return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark. + return FALSE //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark. for(var/mob/Player in GLOB.alive_mob_list) if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player) && Player.client && (Player.mind.special_role || LAZYLEN(Player.mind.antag_datums))) //Someone's still antagging but is their antagonist datum important enough to skip mulligan? for(var/datum/antagonist/antag_types in Player.mind.antag_datums) if(antag_types.prevent_roundtype_conversion) living_antag_player = Player //they were an important antag, they're our new mark - return 0 + return FALSE if(!are_special_antags_dead()) return FALSE if(!continuous[config_tag] || force_ending) - return 1 + return TRUE else round_converted = convert_roundtype() if(!round_converted) if(round_ends_with_antag_death) - return 1 + return TRUE else midround_antag[config_tag] = 0 - return 0 + return FALSE - return 0 + return FALSE /datum/game_mode/proc/send_intercept() diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 8545f4500ea..30f38889ccb 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -92,7 +92,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event var/hitpwr = 2 //Level of ex_act to be called on hit. var/dest pass_flags = PASSTABLE - var/heavy = 0 + var/heavy = FALSE var/meteorsound = 'sound/effects/meteorimpact.ogg' var/z_original var/threat = 0 // used for determining which meteors are most interesting @@ -245,7 +245,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event name = "big meteor" icon_state = "large" hits = 6 - heavy = 1 + heavy = TRUE dropamt = 4 threat = 10 @@ -258,7 +258,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event name = "flaming meteor" icon_state = "flaming" hits = 5 - heavy = 1 + heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' meteordrop = list(/obj/item/stack/ore/plasma) threat = 20 @@ -271,7 +271,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/irradiated name = "glowing meteor" icon_state = "glowing" - heavy = 1 + heavy = TRUE meteordrop = list(/obj/item/stack/ore/uranium) threat = 15 @@ -288,7 +288,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event icon_state = "meateor" desc = "Just... don't think too hard about where this thing came from." hits = 2 - heavy = 1 + heavy = TRUE meteorsound = 'sound/effects/blobattack.ogg' meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/slab/human, /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant, /obj/item/organ/heart, /obj/item/organ/lungs, /obj/item/organ/tongue, /obj/item/organ/appendix/) var/meteorgibs = /obj/effect/gibspawner/generic @@ -340,7 +340,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event desc = "Your life briefly passes before your eyes the moment you lay them on this monstrosity." hits = 30 hitpwr = 1 - heavy = 1 + heavy = TRUE meteorsound = 'sound/effects/bamf.ogg' meteordrop = list(/obj/item/stack/ore/plasma) threat = 50 @@ -371,7 +371,7 @@ GLOBAL_LIST_INIT(meteorsSPOOKY, list(/obj/effect/meteor/pumpkin)) icon = 'icons/obj/meteor_spooky.dmi' icon_state = "pumpkin" hits = 10 - heavy = 1 + heavy = TRUE dropamt = 1 meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/reagent_containers/food/snacks/grown/pumpkin) threat = 100 diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 06cba324617..0b309bcc312 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -8,8 +8,8 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list var/team_explanation_text //For when there are multiple owners. var/datum/mind/target = null //If they are focused on a particular person. var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter. - var/completed = 0 //currently only used for custom objectives. - var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead. + var/completed = FALSE //currently only used for custom objectives. + var/martyr_compatible = FALSE //If the objective is compatible with martyr objective, i.e. if you can still do it while dead. /datum/objective/New(text) if(text) @@ -170,7 +170,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/assassinate name = "assasinate" var/target_role_type=FALSE - martyr_compatible = 1 + martyr_compatible = TRUE /datum/objective/assassinate/find_target_by_role(role, role_type=FALSE,invert=FALSE) if(!invert) @@ -191,7 +191,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list admin_simple_target_pick(admin) /datum/objective/assassinate/internal - var/stolen = 0 //Have we already eliminated this target? + var/stolen = FALSE //Have we already eliminated this target? /datum/objective/assassinate/internal/update_explanation_text() ..() @@ -224,7 +224,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/maroon name = "maroon" var/target_role_type=FALSE - martyr_compatible = 1 + martyr_compatible = TRUE /datum/objective/maroon/find_target_by_role(role, role_type=FALSE,invert=FALSE) if(!invert) @@ -279,7 +279,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/protect//The opposite of killing a dude. name = "protect" - martyr_compatible = 1 + martyr_compatible = TRUE var/target_role_type = FALSE var/human_check = TRUE @@ -350,7 +350,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list name = "hijack" explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." team_explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody. Leave no team member behind." - martyr_compatible = 0 //Technically you won't get both anyway. + martyr_compatible = FALSE //Technically you won't get both anyway. /datum/objective/hijack/check_completion() // Requires all owners to escape. if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) @@ -378,7 +378,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/purge name = "no mutants on shuttle" explanation_text = "Ensure no mutant humanoid species are present aboard the escape shuttle." - martyr_compatible = 1 + martyr_compatible = TRUE /datum/objective/purge/check_completion() if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) @@ -393,7 +393,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/robot_army name = "robot army" explanation_text = "Have at least eight active cyborgs synced to you." - martyr_compatible = 0 + martyr_compatible = FALSE /datum/objective/robot_army/check_completion() var/counter = 0 @@ -497,7 +497,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/nuclear name = "nuclear" explanation_text = "Destroy the station with a nuclear device." - martyr_compatible = 1 + martyr_compatible = TRUE /datum/objective/nuclear/check_completion() if(SSticker && SSticker.mode && SSticker.mode.station_was_nuked) @@ -509,7 +509,7 @@ GLOBAL_LIST_EMPTY(possible_items) name = "steal" var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later. var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums). - martyr_compatible = 0 + martyr_compatible = FALSE /datum/objective/steal/get_target() return steal_target @@ -793,7 +793,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/destroy name = "destroy AI" - martyr_compatible = 1 + martyr_compatible = TRUE /datum/objective/destroy/find_target(dupe_search_range) var/list/possible_targets = active_ais(1) @@ -891,7 +891,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) //////////////////////////////// /datum/objective/changeling_team_objective //Abstract type - martyr_compatible = 0 //Suicide is not teamwork! + martyr_compatible = FALSE //Suicide is not teamwork! explanation_text = "Changeling Friendship!" var/min_lings = 3 //Minimum amount of lings for this team objective to be possible var/escape_objective_compatible = FALSE diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 8251619012a..b1a6cf48c8b 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -136,8 +136,8 @@ /datum/objective_item/steal/functionalai/check_special_completion(obj/item/aicard/C) for(var/mob/living/silicon/ai/A in C) if(isAI(A) && A.stat != DEAD) //See if any AI's are alive inside that card. - return 1 - return 0 + return TRUE + return FALSE /datum/objective_item/steal/blueprints name = "the station blueprints." diff --git a/code/game/gamemodes/sandbox/airlock_maker.dm b/code/game/gamemodes/sandbox/airlock_maker.dm index ab98aa80b42..9f1cba51a85 100644 --- a/code/game/gamemodes/sandbox/airlock_maker.dm +++ b/code/game/gamemodes/sandbox/airlock_maker.dm @@ -21,7 +21,7 @@ var/require_all = 1 var/paintjob = "none" - var/glassdoor = 0 + var/glassdoor = FALSE var/doorname = "airlock" diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 952b1093ba7..8f801af25d0 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -4,7 +4,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) sandbox = new/datum/h_sandbox sandbox.owner = src.ckey if(src.client.holder) - sandbox.admin = 1 + sandbox.admin = TRUE add_verb(src, /mob/proc/sandbox_panel) /mob/proc/sandbox_panel() @@ -14,7 +14,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) /datum/h_sandbox var/owner = null - var/admin = 0 + var/admin = FALSE var/static/clothinfo = null var/static/reaginfo = null diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 7bc293bf446..604b9bdc276 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -266,12 +266,12 @@ Class Procs: /obj/machinery/proc/auto_use_power() if(!powered(power_channel)) - return 0 + return FALSE if(use_power == 1) use_power(idle_power_usage,power_channel) else if(use_power >= 2) use_power(active_power_usage,power_channel) - return 1 + return TRUE ///Called when we want to change the value of the `is_operational` variable. Boolean. @@ -370,11 +370,11 @@ Class Procs: /obj/machinery/Topic(href, href_list) ..() if(!can_interact(usr)) - return 1 + return TRUE if(!usr.canUseTopic(src)) - return 1 + return TRUE add_fingerprint(usr) - return 0 + return FALSE //////////////////////////////////////////////////////////////////////////////////////////// @@ -467,7 +467,7 @@ Class Procs: M.icon_state = "box_1" /obj/machinery/obj_break(damage_flag) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) . = ..() if(!(machine_stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) set_machine_stat(machine_stat | BROKEN) @@ -513,8 +513,8 @@ Class Procs: I.play_tool_sound(src, 50) setDir(turn(dir,-90)) to_chat(user, "You rotate [src].") - return 1 - return 0 + return TRUE + return FALSE /obj/proc/can_be_unfasten_wrench(mob/user, silent) //if we can unwrench this object; returns SUCCESSFUL_UNFASTEN and FAILED_UNFASTEN, which are both TRUE, or CANT_UNFASTEN, which isn't. if(!(isfloorturf(loc) || istype(loc, /turf/open/indestructible)) && !anchored) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 5b1d2d54f74..b1eed4cbaf7 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -17,7 +17,7 @@ var/list/L = list() var/list/LL = list() var/hacked = FALSE - var/disabled = 0 + var/disabled = FALSE var/shocked = FALSE var/hack_wire var/disable_wire diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 1b4b01f204d..bb0424a7733 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -96,14 +96,14 @@ return if(!target.can_track(usr)) - U.tracking = 1 + U.tracking = TRUE if(!cameraticks) to_chat(U, "Target is not near any active cameras. Attempting to reacquire...") cameraticks++ if(cameraticks > 9) U.cameraFollow = null to_chat(U, "Unable to reacquire, cancelling track...") - tracking = 0 + tracking = FALSE return else sleep(10) @@ -111,7 +111,7 @@ else cameraticks = 0 - U.tracking = 0 + U.tracking = FALSE if(U.eyeobj) U.eyeobj.setLoc(get_turf(target)) diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 5c83748afea..9a9eef0371a 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -25,8 +25,8 @@ /obj/machinery/computer/process() if(machine_stat & (NOPOWER|BROKEN)) - return 0 - return 1 + return FALSE + return TRUE /obj/machinery/computer/update_overlays() . = ..() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 025b0f0843a..5647c351463 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -514,10 +514,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) updateUsrDialog() - return 0 + return if(can_open_job(j) != 1) updateUsrDialog() - return 0 + return if(opened_positions[edit_job_target] >= 0) GLOB.time_last_changed_position = world.time / 10 j.total_positions++ @@ -531,10 +531,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j) updateUsrDialog() - return 0 + return if(can_close_job(j) != 1) updateUsrDialog() - return 0 + return //Allow instant closing without cooldown if a position has been opened before if(opened_positions[edit_job_target] <= 0) GLOB.time_last_changed_position = world.time / 10 @@ -549,7 +549,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/datum/job/j = SSjob.GetJob(priority_target) if(!j) updateUsrDialog() - return 0 + return var/priority = TRUE if(j in SSjob.prioritized_jobs) SSjob.prioritized_jobs -= j diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index ac4dcd4abc3..9bc3af8e22d 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -559,14 +559,12 @@ continue /obj/machinery/computer/med_data/proc/canUseMedicalRecordsConsole(mob/user, message = 1, record1, record2) - if(user) - if(message) - if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) - if(!record1 || record1 == active1) - if(!record2 || record2 == active2) - return 1 - return 0 + if(user && message && authenticated) + if(user.canUseTopic(src, !issilicon(user))) + if(!record1 || record1 == active1) + if(!record2 || record2 == active2) + return TRUE + return FALSE /obj/machinery/computer/med_data/laptop name = "medical laptop" diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8079e397260..ed3bc77d8b9 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -855,12 +855,11 @@ What a mess.*/ continue /obj/machinery/computer/secure_data/proc/canUseSecurityRecordsConsole(mob/user, message1 = 0, record1, record2) - if(user) - if(authenticated) - if(user.canUseTopic(src, !issilicon(user))) - if(!trim(message1)) - return 0 - if(!record1 || record1 == active1) - if(!record2 || record2 == active2) - return 1 - return 0 + if(user && authenticated) + if(user.canUseTopic(src, !issilicon(user))) + if(!trim(message1)) + return FALSE + if(!record1 || record1 == active1) + if(!record2 || record2 == active2) + return TRUE + return FALSE diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index eaca2b74abb..efd71785d72 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -31,7 +31,7 @@ /obj/structure/frame/machine/examine(user) . = ..() if(state == 3 && req_components && req_component_names) - var/hasContent = 0 + var/hasContent = FALSE var/requires = "It requires" for(var/i = 1 to req_components.len) @@ -41,7 +41,7 @@ continue var/use_and = i == req_components.len requires += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" - hasContent = 1 + hasContent = TRUE if(hasContent) . += "[requires]." @@ -267,9 +267,9 @@ to_chat(user, "You add [P] to [src].") components += P req_components[I]-- - return 1 + return TRUE to_chat(user, "You cannot add that to the machine!") - return 0 + return FALSE if(user.a_intent == INTENT_HARM) return ..() diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 09307a846fa..275022e6437 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -472,11 +472,11 @@ /obj/machinery/door/airlock/cult/allowed(mob/living/L) if(!density) - return 1 + return TRUE if(friendly || iscultist(L) || istype(L, /mob/living/simple_animal/shade) || isconstruct(L)) if(!stealthy) new openingoverlaytype(loc) - return 1 + return TRUE else if(!stealthy) new /obj/effect/temp_visual/cult/sac(loc) @@ -486,7 +486,7 @@ flash_color(L, flash_color="#960000", flash_time=20) L.Paralyze(40) L.throw_at(throwtarget, 5, 1,src) - return 0 + return FALSE /obj/machinery/door/airlock/cult/proc/conceal() icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 5d0165189d5..2d9cc6cf983 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -35,15 +35,16 @@ /obj/machinery/embedded_controller/proc/return_text() /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) - return 0 + return /obj/machinery/embedded_controller/receive_signal(datum/signal/signal) if(istype(signal) && program) program.receive_signal(signal) /obj/machinery/embedded_controller/Topic(href, href_list) - if(..()) - return 0 + . = ..() + if(.) + return if(program) program.receive_user_command(href_list["command"]) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 72590088a06..5978c0b7fa3 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -52,7 +52,7 @@ area.power_change() /obj/machinery/light_switch/power_change() - SHOULD_CALL_PARENT(0) + SHOULD_CALL_PARENT(FALSE) if(area == get_area(src)) return ..() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 4c18e747af4..39ceb210414 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -201,8 +201,8 @@ var/speed = 1 // lowest = 1, highest = 10 var/list/rpath = list() // real path of the magnet, used in iterator - var/moving = 0 // 1 if scheduled to loop - var/looping = 0 // 1 if looping + var/moving = TRUE // true if scheduled to loop + var/looping = TRUE // true if looping var/datum/radio_frequency/radio_connection @@ -301,7 +301,7 @@ if("setpath") var/newpath = stripped_input(usr, "Please define a new path!", "New Path", path, MAX_MESSAGE_LEN) if(newpath && newpath != "") - moving = 0 // stop moving + moving = FALSE // stop moving path = newpath pathpos = 1 // reset position filter_path() // renders rpath @@ -323,7 +323,7 @@ if(machine_stat & (BROKEN|NOPOWER)) break - looping = 1 + looping = TRUE // Prepare the radio signal var/datum/signal/signal = new(list("code" = code)) @@ -353,7 +353,7 @@ else sleep(12-speed) - looping = 0 + looping = FALSE /obj/machinery/magnetic_controller/proc/filter_path() diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index 0b2f4f5db77..4f72b94eab0 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -234,7 +234,7 @@ if(altPatient.reagents.reagent_list.len) //Chemical Analysis details. for(var/datum/reagent/R in altPatient.reagents.reagent_list) chemical_list += list(list("name" = R.name, "volume" = round(R.volume, 0.01))) - if(R.overdosed == 1) + if(R.overdosed) overdose_list += list(list("name" = R.name)) if(altPatient.reagents.addiction_list.len) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 04fc034ff8d..83441347ea6 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_EMPTY(allCasters) var/body ="" var/list/authorCensorTime = list() var/list/bodyCensorTime = list() - var/is_admin_message = 0 + var/is_admin_message = FALSE var/icon/img = null var/time_stamp = "" var/list/datum/newscaster/feed_comment/comments = list() @@ -61,11 +61,11 @@ GLOBAL_LIST_EMPTY(allCasters) var/list/datum/newscaster/feed_message/messages = list() var/locked = FALSE var/author = "" - var/censored = 0 + var/censored = FALSE var/list/authorCensorTime = list() var/list/DclassCensorTime = list() var/authorCensor - var/is_admin_channel = 0 + var/is_admin_channel = FALSE /datum/newscaster/feed_channel/proc/returnAuthor(censor) if(censor == -1) @@ -110,7 +110,7 @@ GLOBAL_LIST_EMPTY(allCasters) CreateFeedChannel("Station Announcements", "SS13", 1) wanted_issue = new /datum/newscaster/wanted_message -/datum/newscaster/feed_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = 0) +/datum/newscaster/feed_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = FALSE) var/datum/newscaster/feed_channel/newChannel = new /datum/newscaster/feed_channel newChannel.channel_name = channel_name newChannel.author = author @@ -118,7 +118,7 @@ GLOBAL_LIST_EMPTY(allCasters) newChannel.is_admin_channel = adminChannel network_channels += newChannel -/datum/newscaster/feed_network/proc/SubmitArticle(msg, author, channel_name, datum/picture/picture, adminMessage = 0, allow_comments = 1, update_alert = TRUE) +/datum/newscaster/feed_network/proc/SubmitArticle(msg, author, channel_name, datum/picture/picture, adminMessage = FALSE, allow_comments = TRUE, update_alert = TRUE) var/datum/newscaster/feed_message/newMsg = new /datum/newscaster/feed_message newMsg.author = author newMsg.body = msg @@ -138,8 +138,8 @@ GLOBAL_LIST_EMPTY(allCasters) lastAction ++ newMsg.creationTime = lastAction -/datum/newscaster/feed_network/proc/submitWanted(criminal, body, scanned_user, datum/picture/picture, adminMsg = 0, newMessage = 0) - wanted_issue.active = 1 +/datum/newscaster/feed_network/proc/submitWanted(criminal, body, scanned_user, datum/picture/picture, adminMsg = FALSE, newMessage = FALSE) + wanted_issue.active = TRUE wanted_issue.criminal = criminal wanted_issue.body = body wanted_issue.scannedUser = scanned_user @@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(allCasters) N.update_icon() /datum/newscaster/feed_network/proc/deleteWanted() - wanted_issue.active = 0 + wanted_issue.active = FALSE wanted_issue.criminal = null wanted_issue.body = null wanted_issue.scannedUser = null @@ -273,9 +273,9 @@ GLOBAL_LIST_EMPTY(allCasters) dat+= "
Re-scan User" dat+= "

Exit" if(securityCaster) - var/wanted_already = 0 + var/wanted_already = FALSE if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 + wanted_already = TRUE dat+="
Feed Security functions:
" dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" dat+="
Censor Feed Stories" @@ -334,10 +334,10 @@ GLOBAL_LIST_EMPTY(allCasters) dat+="There is already a Feed channel under your name.
" if(channel_name=="" || channel_name == "\[REDACTED\]") dat+="Invalid channel name.
" - var/check = 0 + var/check = FALSE for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == channel_name) - check = 1 + check = TRUE break if(check) dat+="Channel name already in use.
" @@ -436,10 +436,10 @@ GLOBAL_LIST_EMPTY(allCasters) dat+="
Back" if(14) dat+="Wanted Issue Handler:" - var/wanted_already = 0 + var/wanted_already = FALSE var/end_param = 1 if(GLOB.news_network.wanted_issue.active) - wanted_already = 1 + wanted_already = TRUE end_param = 2 if(wanted_already) dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below.
" @@ -516,10 +516,10 @@ GLOBAL_LIST_EMPTY(allCasters) existing_authors += GLOB.news_network.redactedText else existing_authors += FC.author - var/check = 0 + var/check = FALSE for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels) if(FC.channel_name == channel_name) - check = 1 + check = TRUE break if(channel_name == "" || channel_name == "\[REDACTED\]" || scanned_user == "Unknown" || check || (scanned_user in existing_authors) ) screen=7 @@ -578,10 +578,7 @@ GLOBAL_LIST_EMPTY(allCasters) screen=11 updateUsrDialog() else if(href_list["menu_wanted"]) - var/already_wanted = 0 if(GLOB.news_network.wanted_issue.active) - already_wanted = 1 - if(already_wanted) channel_name = GLOB.news_network.wanted_issue.criminal msg = GLOB.news_network.wanted_issue.body screen = 14 @@ -971,17 +968,17 @@ GLOBAL_LIST_EMPTY(allCasters) /obj/item/newspaper/proc/notContent(list/L) if(!L.len) - return 0 + return FALSE for(var/i=L.len;i>0;i--) var/num = abs(L[i]) if(creationTime <= num) continue else if(L[i] > 0) - return 1 + return TRUE else - return 0 - return 0 + return FALSE + return FALSE /obj/item/newspaper/Topic(href, href_list) var/mob/living/U = usr diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index b041b9aca5c..90a8f3e3081 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -10,7 +10,7 @@ circuit = /obj/item/circuitboard/machine/recycler var/safety_mode = FALSE // Temporarily stops machine if it detects a mob var/icon_name = "grinder-o" - var/blood = 0 + var/bloody = FALSE var/eat_dir = WEST var/amount_produced = 50 var/crush_damage = 1000 @@ -76,7 +76,7 @@ var/is_powered = !(machine_stat & (BROKEN|NOPOWER)) if(safety_mode) is_powered = FALSE - icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end + icon_state = icon_name + "[is_powered]" + "[(bloody ? "bld" : "")]" // add the blood tag at the end /obj/machinery/recycler/CanAllowThrough(atom/movable/AM) . = ..() @@ -181,8 +181,8 @@ L.say("ARRRRRRRRRRRGH!!!", forced="recycler grinding") add_mob_blood(L) - if(!blood && !issilicon(L)) - blood = TRUE + if(!bloody && !issilicon(L)) + bloody = TRUE update_icon() // Instantly lie down, also go unconscious from the pain, before you die. diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index c1ec1a07811..f989b6ceed5 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -26,7 +26,7 @@ light_color = LIGHT_COLOR_BROWN var/money = 3000 //How much money it has CONSUMED var/plays = 0 - var/working = 0 + var/working = FALSE var/balance = 0 //How much money is in the machine, ready to be CONSUMED. var/jackpots = 0 var/paymode = HOLOCHIP //toggles between HOLOCHIP/COIN, defined above @@ -229,15 +229,17 @@ /obj/machinery/computer/slot_machine/proc/can_spin(mob/user) if(machine_stat & NOPOWER) to_chat(user, "The slot machine has no power!") + return FALSE if(machine_stat & BROKEN) to_chat(user, "The slot machine is broken!") + return FALSE if(working) to_chat(user, "You need to wait until the machine stops spinning before you can play again!") - return 0 + return FALSE if(balance < SPIN_PRICE) to_chat(user, "Insufficient money to play!") - return 0 - return 1 + return FALSE + return TRUE /obj/machinery/computer/slot_machine/proc/toggle_reel_spin(value, delay = 0) //value is 1 or 0 aka on or off for(var/list/reel in reels) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index c52a5bccbe3..0b693f28d03 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -360,7 +360,7 @@ dump_contents() /obj/machinery/suit_storage_unit/proc/resist_open(mob/user) - if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here. + if(!state_open && occupant && (user in src) && user.stat == CONSCIOUS) // Check they're still here. visible_message("You see [user] burst out of [src]!", \ "You escape the cramped confines of [src]!") open_machine() diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index edeec36ef10..78c52b44a4f 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -13,7 +13,7 @@ verb_say = "states" var/cooldown = 0 - var/active = 0 + var/active = FALSE var/icontype = "beacon" @@ -26,7 +26,7 @@ if(singulo.z == z) singulo.target = src icon_state = "[icontype]1" - active = 1 + active = TRUE if(user) to_chat(user, "You activate the beacon.") @@ -36,7 +36,7 @@ if(singulo.target == src) singulo.target = null icon_state = "[icontype]0" - active = 0 + active = FALSE if(user) to_chat(user, "You deactivate the beacon.") diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 4beb14a5233..96bbf82affc 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -13,7 +13,7 @@ circuit = /obj/item/circuitboard/machine/teleporter_hub var/accuracy = 0 var/obj/machinery/teleport/station/power_station - var/calibrated //Calibration prevents mutation + var/calibrated = FALSE//Calibration prevents mutation /obj/machinery/teleport/hub/Initialize() . = ..() @@ -83,7 +83,7 @@ log_game("[human] ([key_name(human)]) was turned into a fly person") human.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0) - calibrated = 0 + calibrated = FALSE return /obj/machinery/teleport/hub/update_icon_state() diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 1b5f1800b61..60c08003708 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -139,7 +139,7 @@ GLOBAL_LIST_INIT(dye_registry, list( density = TRUE state_open = TRUE var/busy = FALSE - var/bloody_mess = 0 + var/bloody_mess = FALSE var/obj/item/color_source var/max_wash_capacity = 5 @@ -264,7 +264,7 @@ GLOBAL_LIST_INIT(dye_registry, list( /obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/WM) if(chained) - chained = 0 + chained = FALSE slowdown = SHOES_SLOWDOWN new /obj/item/restraints/handcuffs(loc) ..() diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index dde9a408d00..da6648f3c49 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -45,10 +45,10 @@ var/turf/pos = get_turf(src) for(var/turf/T in get_area_turfs(thearea.type)) if(!T.density && pos.z == T.z) - var/clear = 1 + var/clear = TRUE for(var/obj/O in T) if(O.density) - clear = 0 + clear = FALSE break if(clear) L+=T diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 5379de73296..82564664fd4 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -1,7 +1,7 @@ /atom/movable - var/can_buckle = 0 + var/can_buckle = FALSE var/buckle_lying = -1 //bed-like behaviour, forces mob.lying = buckle_lying if != -1 - var/buckle_requires_restraints = 0 //require people to be handcuffed before being able to buckle. eg: pipes + var/buckle_requires_restraints = FALSE //require people to be handcuffed before being able to buckle. eg: pipes var/list/mob/living/buckled_mobs = null //list() var/max_buckled_mobs = 1 var/buckle_prevents_pull = FALSE @@ -15,10 +15,10 @@ if(buckled_mobs.len > 1) var/unbuckled = input(user, "Who do you wish to unbuckle?","Unbuckle Who?") as null|mob in sortNames(buckled_mobs) if(user_unbuckle_mob(unbuckled,user)) - return 1 + return TRUE else if(user_unbuckle_mob(buckled_mobs[1],user)) - return 1 + return TRUE /atom/movable/attackby(obj/item/W, mob/user, params) if(!can_buckle || !istype(W, /obj/item/riding_offhand) || !user.Adjacent(src)) diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index adabf3b7069..3c40c1366f2 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -32,10 +32,9 @@ return ..() /obj/effect/acid/process() - . = 1 if(!target) qdel(src) - return 0 + return FALSE if(prob(5)) playsound(loc, 'sound/items/welder.ogg', 100, TRUE) @@ -50,7 +49,8 @@ acid_level = max(acid_level - (5 + 2*round(sqrt(acid_level))), 0) if(acid_level <= 0) qdel(src) - return 0 + return FALSE + return TRUE /obj/effect/acid/Crossed(AM as mob|obj) . = ..() diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 6c3a455edde..f4cd4357fae 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -27,7 +27,7 @@ mergeable_decal = FALSE /obj/effect/decal/cleanable/xenoblood/xgibs/proc/streak(list/directions) - set waitfor = 0 + set waitfor = FALSE var/direction = pick(directions) for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++) sleep(2) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index ceb5f82d4cb..4500755446a 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -227,5 +227,5 @@ /obj/effect/decal/cleanable/blood/footprints/can_bloodcrawl_in() if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY)) - return 1 - return 0 + return TRUE + return FALSE diff --git a/code/game/objects/effects/decals/cleanable/robots.dm b/code/game/objects/effects/decals/cleanable/robots.dm index 79059b51f35..0d7c5f8e09e 100644 --- a/code/game/objects/effects/decals/cleanable/robots.dm +++ b/code/game/objects/effects/decals/cleanable/robots.dm @@ -13,7 +13,7 @@ beauty = -50 /obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions) - set waitfor = 0 + set waitfor = FALSE var/direction = pick(directions) for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++) sleep(2) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 770dcf9d62f..0431da86ca0 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -162,14 +162,14 @@ /obj/effect/particle_effect/foam/proc/foam_mob(mob/living/L) if(lifetime<1) - return 0 + return FALSE if(!istype(L)) - return 0 + return FALSE var/fraction = 1/initial(reagent_divisor) if(lifetime % reagent_divisor) reagents.expose(L, VAPOR, fraction) lifetime-- - return 1 + return TRUE /obj/effect/particle_effect/foam/proc/spread_foam() var/turf/t_loc = get_turf(src) diff --git a/code/game/objects/effects/effect_system/effects_other.dm b/code/game/objects/effects/effect_system/effects_other.dm index 3f2b6ecaf94..520e251a2a8 100644 --- a/code/game/objects/effects/effect_system/effects_other.dm +++ b/code/game/objects/effects/effect_system/effects_other.dm @@ -85,11 +85,11 @@ /datum/effect_system/reagents_explosion var/amount // TNT equivalent - var/flashing = 0 // does explosion creates flash effect? + var/flashing = FALSE // does explosion creates flash effect? var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion var/explosion_message = 1 //whether we show a message to mobs. -/datum/effect_system/reagents_explosion/set_up(amt, loca, flash = 0, flash_fact = 0, message = 1) +/datum/effect_system/reagents_explosion/set_up(amt, loca, flash = FALSE, flash_fact = 0, message = TRUE) amount = amt explosion_message = message if(isturf(loca)) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index ce2742ace3f..438a80e3297 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -12,7 +12,7 @@ layer = FLY_LAYER anchored = TRUE mouse_opacity = MOUSE_OPACITY_TRANSPARENT - animate_movement = 0 + animate_movement = FALSE var/amount = 4 var/lifetime = 5 var/opaque = 1 //whether the smoke can block the view when in enough amount @@ -49,23 +49,23 @@ lifetime-- if(lifetime < 1) kill_smoke() - return 0 + return FALSE for(var/mob/living/L in range(0,src)) smoke_mob(L) - return 1 + return TRUE /obj/effect/particle_effect/smoke/proc/smoke_mob(mob/living/carbon/C) if(!istype(C)) - return 0 + return FALSE if(lifetime<1) - return 0 + return FALSE if(C.internal != null || C.has_smoke_protection()) - return 0 + return FALSE if(C.smoke_delay) - return 0 + return FALSE C.smoke_delay++ addtimer(CALLBACK(src, .proc/remove_smoke_delay, C), 10) - return 1 + return TRUE /obj/effect/particle_effect/smoke/proc/remove_smoke_delay(mob/living/carbon/C) if(C) @@ -126,11 +126,12 @@ lifetime = 8 /obj/effect/particle_effect/smoke/bad/smoke_mob(mob/living/carbon/M) - if(..()) + . = ..() + if(.) M.drop_all_held_items() M.adjustOxyLoss(1) M.emote("cough") - return 1 + return TRUE /obj/effect/particle_effect/smoke/bad/Crossed(atom/movable/AM, oldloc) . = ..() @@ -148,7 +149,7 @@ /obj/effect/particle_effect/smoke/freezing name = "nanofrost smoke" color = "#B2FFFF" - opaque = 0 + opaque = FALSE /datum/effect_system/smoke_spread/freezing effect_type = /obj/effect/particle_effect/smoke/freezing @@ -226,7 +227,8 @@ /obj/effect/particle_effect/smoke/chem/process() - if(..()) + . = ..() + if(.) var/turf/T = get_turf(src) var/fraction = 1/initial(lifetime) for(var/atom/movable/AM in T) @@ -237,20 +239,20 @@ reagents.expose(AM, TOUCH, fraction) reagents.expose(T, TOUCH, fraction) - return 1 + return TRUE /obj/effect/particle_effect/smoke/chem/smoke_mob(mob/living/carbon/M) if(lifetime<1) - return 0 + return FALSE if(!istype(M)) - return 0 + return FALSE var/mob/living/carbon/C = M if(C.internal != null || C.has_smoke_protection()) - return 0 + return FALSE var/fraction = 1/initial(lifetime) reagents.copy_to(C, fraction*reagents.total_volume) reagents.expose(M, INGEST, fraction) - return 1 + return TRUE diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 44d9c485544..6d71fe9c2c7 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -14,10 +14,10 @@ /obj/effect/particle_effect/water/Move(turf/newloc) if (--src.life < 1) qdel(src) - return 0 + return FALSE if(newloc.density) - return 0 - .=..() + return FALSE + return ..() /obj/effect/particle_effect/water/Bump(atom/A) if(reagents) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 7e18077c841..23204da7d0b 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -5,7 +5,7 @@ icon = 'icons/effects/effects.dmi' resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF move_resist = INFINITY - obj_flags = 0 + obj_flags = NONE vis_flags = VIS_INHERIT_PLANE /obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) @@ -18,7 +18,7 @@ return /obj/effect/mech_melee_attack(obj/mecha/M) - return 0 + return /obj/effect/blob_act(obj/structure/blob/B) return @@ -45,7 +45,6 @@ /obj/effect/singularity_act() qdel(src) - return 0 /obj/effect/ConveyorMove() return diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 62cb31f1b6b..a036eb0c128 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -50,8 +50,10 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE vis_flags = NONE - var/unused = 0 //When detected to be unused it gets set to world.time, after a while it gets removed - var/cache_expiration = 2 MINUTES // overlays which go unused for 2 minutes get cleaned up + ///When detected to be unused it gets set to world.time, after a while it gets removed + var/unused = 0 + ///overlays which go unused for this amount of time get cleaned up + var/cache_expiration = 2 MINUTES /obj/effect/overlay/atmos_excited name = "excited group" diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index f8da95fee32..be6e574d656 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -56,7 +56,7 @@ return var/atom/movable/AM = A var/curtiles = 0 - var/stopthrow = 0 + var/stopthrow = FALSE for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) if(AM in T.affecting) return @@ -82,11 +82,11 @@ if(!nostop) for(var/obj/effect/step_trigger/T in get_step(AM, direction)) if(T.stopper && T != src) - stopthrow = 1 + stopthrow = TRUE else for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) if(T.stopper) - stopthrow = 1 + stopthrow = TRUE if(AM) var/predir = AM.dir diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm index 93bf8c498b7..1a77d2427cd 100644 --- a/code/game/objects/effects/temporary_visuals/cult.dm +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -1,11 +1,11 @@ //temporary visual effects(/obj/effect/temp_visual) used by cult stuff /obj/effect/temp_visual/cult icon = 'icons/effects/cult_effects.dmi' - randomdir = 0 + randomdir = FALSE duration = 10 /obj/effect/temp_visual/cult/sparks - randomdir = 1 + randomdir = TRUE name = "blood sparks" icon_state = "bloodsparkles" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 48dd5f90214..5d5d560ee2c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -460,7 +460,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return ITALICS | REDUCE_RANGE /obj/item/proc/dropped(mob/user, silent = FALSE) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) for(var/X in actions) var/datum/action/A = X A.Remove(user) @@ -474,7 +474,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /// called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ITEM_PICKUP, user) item_flags |= IN_INVENTORY @@ -491,7 +491,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb * * Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it */ /obj/item/proc/equipped(mob/user, slot, initial = FALSE) - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) for(var/X in actions) var/datum/action/A = X diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index d41036342af..ecf89751392 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -810,7 +810,7 @@ RLD playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) if(do_after(user, decondelay, target = A)) if(!useResource(deconcost, user)) - return 0 + return FALSE activate() qdel(A) return TRUE @@ -871,9 +871,9 @@ RLD playsound(src.loc, 'sound/effects/light_flicker.ogg', 50, TRUE) if(do_after(user, floordelay, target = A)) if(!istype(F)) - return 0 + return FALSE if(!useResource(floorcost, user)) - return 0 + return FALSE activate() var/destination = get_turf(A) var/obj/machinery/light/floor/FL = new /obj/machinery/light/floor(destination) diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index fd6ebbf9039..94f2045adc7 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -44,9 +44,9 @@ if(can_use(user)) ink.charges-- playsound(src.loc, 'sound/effects/spray2.ogg', 50, TRUE) - return 1 + return TRUE else - return 0 + return FALSE //This proc only checks if the painter can be used. //Call this if you don't want the painter to be used right after this check, for example @@ -54,12 +54,12 @@ /obj/item/airlock_painter/proc/can_use(mob/user) if(!ink) to_chat(user, "There is no toner cartridge installed in [src]!") - return 0 + return FALSE else if(ink.charges < 1) to_chat(user, "[src] is out of ink!") - return 0 + return FALSE else - return 1 + return TRUE /obj/item/airlock_painter/suicide_act(mob/user) var/obj/item/organ/lungs/L = user.getorganslot(ORGAN_SLOT_LUNGS) diff --git a/code/game/objects/items/body_egg.dm b/code/game/objects/items/body_egg.dm index cc4fd287c8b..95bbccf4602 100644 --- a/code/game/objects/items/body_egg.dm +++ b/code/game/objects/items/body_egg.dm @@ -14,14 +14,14 @@ if(iscarbon(loc)) Insert(loc) -/obj/item/organ/body_egg/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/body_egg/Insert(mob/living/carbon/M, special = FALSE) ..() ADD_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC) ADD_TRAIT(owner, TRAIT_XENO_IMMUNE, "xeno immune") owner.med_hud_set_status() INVOKE_ASYNC(src, .proc/AddInfectionImages, owner) -/obj/item/organ/body_egg/Remove(mob/living/carbon/M, special = 0) +/obj/item/organ/body_egg/Remove(mob/living/carbon/M, special = FALSE) if(owner) REMOVE_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC) REMOVE_TRAIT(owner, TRAIT_XENO_IMMUNE, "xeno immune") diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 4cd293dbff7..3ca29de0155 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -88,5 +88,5 @@ if(attack_type == PROJECTILE_ATTACK) owner.visible_message("Ranged attacks just make [owner] angrier!") playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) - return 1 - return 0 + return TRUE + return FALSE diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 4399e69af02..375d407ef54 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -112,9 +112,9 @@ var/turf/currentpos = get_turf(src) var/mob/living/user = loc if((currentpos == startpos) && (field in view(CHRONO_BEAM_RANGE, currentpos)) && (user.mobility_flags & MOBILITY_STAND) && (user.stat == CONSCIOUS)) - return 1 + return TRUE field_disconnect(F) - return 0 + return FALSE /obj/item/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M) if(TED) @@ -170,7 +170,6 @@ var/obj/item/gun/energy/chrono_gun/gun = null var/tickstokill = 15 var/mutable_appearance/mob_underlay - var/preloaded = 0 var/RPpos = null var/attached = TRUE //if the gun arg isn't included initially, then the chronofield will work without one diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 79482b3563e..b88352ef77c 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -519,7 +519,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM smoketime = 0 chem_volume = 100 list_reagents = null - var/packeditem = 0 + var/packeditem = FALSE /obj/item/clothing/mask/cigarette/pipe/Initialize() . = ..() @@ -537,11 +537,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(ismob(loc)) var/mob/living/M = loc to_chat(M, "Your [name] goes out.") - lit = 0 + lit = FALSE icon_state = icon_off inhand_icon_state = icon_off M.update_inv_wear_mask() - packeditem = 0 + packeditem = FALSE name = "empty [initial(name)]" STOP_PROCESSING(SSobj, src) return @@ -557,7 +557,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(G.dry == 1) to_chat(user, "You stuff [O] into [src].") smoketime = 400 - packeditem = 1 + packeditem = TRUE name = "[O.name]-packed [initial(name)]" if(O.reagents) O.reagents.trans_to(src, O.reagents.total_volume, transfered_by = user) @@ -580,7 +580,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/turf/location = get_turf(user) if(lit) user.visible_message("[user] puts out [src].", "You put out [src].") - lit = 0 + lit = FALSE icon_state = icon_off inhand_icon_state = icon_off STOP_PROCESSING(SSobj, src) @@ -588,7 +588,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!lit && smoketime > 0) to_chat(user, "You empty [src] onto [location].") new /obj/effect/decal/cleanable/ash(location) - packeditem = 0 + packeditem = FALSE smoketime = 0 reagents.clear_reagents() name = "empty [initial(name)]" @@ -626,7 +626,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM light_power = 0.6 light_color = LIGHT_COLOR_FIRE light_on = FALSE - var/lit = 0 + var/lit = FALSE var/fancy = TRUE var/overlay_state var/overlay_list = list( @@ -849,8 +849,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM w_class = WEIGHT_CLASS_TINY var/chem_volume = 100 var/vapetime = 0 //this so it won't puff out clouds every tick - var/screw = 0 // kinky - var/super = 0 //for the fattest vapes dude. + var/screw = FALSE // kinky + var/super = FALSE //for the fattest vapes dude. /obj/item/clothing/mask/vape/suicide_act(mob/user) user.visible_message("[user] is puffin hard on dat vape, [user.p_they()] trying to join the vape life on a whole notha plane!")//it doesn't give you cancer, it is cancer @@ -888,12 +888,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(screw && !(obj_flags & EMAGGED))//also kinky if(!super) cut_overlays() - super = 1 + super = TRUE to_chat(user, "You increase the voltage of [src].") add_overlay("vapeopen_med") else cut_overlays() - super = 0 + super = FALSE to_chat(user, "You decrease the voltage of [src].") add_overlay("vapeopen_low") @@ -908,7 +908,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!(obj_flags & EMAGGED)) cut_overlays() obj_flags |= EMAGGED - super = 0 + super = FALSE to_chat(user, "You maximize the voltage of [src].") add_overlay("vapeopen_high") var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index fe2de57337d..9302e5cb56b 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -62,15 +62,15 @@ /obj/item/camera_bug/check_eye(mob/user) if ( loc != user || user.incapacitated() || user.is_blind() || !current ) user.unset_machine() - return 0 + return FALSE var/turf/T_user = get_turf(user.loc) var/turf/T_current = get_turf(current) if(T_user.z != T_current.z || !current.can_use()) to_chat(user, "[src] has lost the signal.") current = null user.unset_machine() - return 0 - return 1 + return FALSE + return TRUE /obj/item/camera_bug/on_unset_machine(mob/user) user.reset_perspective(null) diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 48e6d58d48a..1425adc6041 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -161,15 +161,15 @@ if(I.tool_behaviour == TOOL_SCREWDRIVER && (obj_flags & EMAGGED)) if(scanning) to_chat(user, "Turn off [src] before you perform this action!") - return 0 + return FALSE user.visible_message("[user] unscrews [src]'s maintenance panel and begins fiddling with its innards...", "You begin resetting [src]...") if(!I.use_tool(src, user, 40, volume=50)) - return 0 + return FALSE user.visible_message("[user] refastens [src]'s maintenance panel!", "You reset [src] to its factory settings!") obj_flags &= ~EMAGGED radiation_count = 0 update_icon() - return 1 + return TRUE else return ..() @@ -178,7 +178,7 @@ return ..() if(!scanning) to_chat(usr, "[src] must be on to reset its radiation level!") - return 0 + return radiation_count = 0 to_chat(usr, "You flush [src]'s radiation counts, resetting it to normal.") update_icon() @@ -188,7 +188,7 @@ return if(scanning) to_chat(user, "Turn off [src] before you perform this action!") - return 0 + return to_chat(user, "You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.") obj_flags |= EMAGGED diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 797168179e3..b7656dd7dff 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -409,7 +409,7 @@ GENE SCANNER if(M.reagents.reagent_list.len) render_list += "Subject contains the following reagents:\n" for(var/datum/reagent/R in M.reagents.reagent_list) - render_list += "[round(R.volume, 0.001)] units of [R.name][R.overdosed == 1 ? " - OVERDOSING" : "."]\n" + render_list += "[round(R.volume, 0.001)] units of [R.name][R.overdosed ? " - OVERDOSING" : "."]\n" else render_list += "Subject contains no reagents.\n" if(M.reagents.addiction_list.len) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 3c4c856eaf1..2301a5516d9 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -13,13 +13,13 @@ custom_materials = list(/datum/material/iron=60, /datum/material/glass=30) force = 2 throwforce = 0 - var/recording = 0 - var/playing = 0 + var/recording = FALSE + var/playing = FALSE var/playsleepseconds = 0 var/obj/item/tape/mytape var/starting_tape_type = /obj/item/tape/random - var/open_panel = 0 - var/canprint = 1 + var/open_panel = FALSE + var/canprint = TRUE var/list/icons_available = list() var/icon_directory = 'icons/effects/icons.dmi' @@ -47,13 +47,13 @@ else if(!playing) icons_available += list("Record" = image(icon = icon_directory, icon_state = "record")) - + if(playing) icons_available += list("Pause" = image(icon = icon_directory, icon_state = "pause")) else if(!recording) icons_available += list("Play" = image(icon = icon_directory, icon_state = "play")) - + if(canprint && !recording && !playing) icons_available += list("Print Transcript" = image(icon = icon_directory, icon_state = "print")) if(mytape) @@ -147,7 +147,7 @@ mytape.used_capacity++ used++ sleep(10) - recording = 0 + recording = FALSE update_icon() else to_chat(usr, "The tape is full.") @@ -161,13 +161,13 @@ return if(recording) - recording = 0 + recording = FALSE mytape.timestamp += mytape.used_capacity mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] Recording stopped." to_chat(usr, "Recording stopped.") return else if(playing) - playing = 0 + playing = FALSE var/turf/T = get_turf(src) T.visible_message("Tape Recorder: Playback stopped.") update_icon() @@ -194,7 +194,7 @@ for(var/i = 1, used < max, sleep(10 * playsleepseconds)) if(!mytape) break - if(playing == 0) + if(playing == FALSE) break if(mytape.storedinfo.len < i) break @@ -211,7 +211,7 @@ playsleepseconds = 1 i++ - playing = 0 + playing = FALSE update_icon() @@ -222,7 +222,7 @@ if(mytape.ruined) to_chat(user, "The tape inside the [src] appears to be broken.") return - + update_available_icons() if(icons_available) var/selection = show_radial_menu(user, src, icons_available, radius = 38, require_near = TRUE, tooltips = TRUE) @@ -289,7 +289,7 @@ var/used_capacity = 0 var/list/storedinfo = list() var/list/timestamp = list() - var/ruined = 0 + var/ruined = FALSE /obj/item/tape/fire_act(exposed_temperature, exposed_volume) ruin() @@ -306,12 +306,12 @@ //repeatedly if(!ruined) add_overlay("ribbonoverlay") - ruined = 1 + ruined = TRUE /obj/item/tape/proc/fix() cut_overlay("ribbonoverlay") - ruined = 0 + ruined = FALSE /obj/item/tape/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index b0a55aa5bb1..b5bc00308c5 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -108,7 +108,7 @@ if(reagents.total_volume == reagents.maximum_volume) to_chat(user, "\The [src] is already full!") safety = safety_save - return 1 + return TRUE var/obj/structure/reagent_dispensers/W = target //will it work? var/transferred = W.reagents.trans_to(src, max_water, transfered_by = user) if(transferred > 0) @@ -119,9 +119,9 @@ else to_chat(user, "\The [W] is empty!") safety = safety_save - return 1 + return TRUE else - return 0 + return FALSE /obj/item/extinguisher/afterattack(atom/target, mob/user , flag) . = ..() diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index 80b820d6672..cc0d7e335a6 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -13,7 +13,7 @@ throw_range = 7 flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT - active = 0 + active = FALSE det_time = 50 display_timer = 0 var/check_parts = FALSE diff --git a/code/game/objects/items/implants/implant_chem.dm b/code/game/objects/items/implants/implant_chem.dm index a7f98646d2f..44900a56739 100644 --- a/code/game/objects/items/implants/implant_chem.dm +++ b/code/game/objects/items/implants/implant_chem.dm @@ -38,7 +38,7 @@ /obj/item/implant/chem/activate(cause) . = ..() if(!cause || !imp_in) - return 0 + return var/mob/living/carbon/R = imp_in var/injectamount = null if (cause == "action_button") diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 78732e7e944..163940267c0 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -59,8 +59,8 @@ L.sec_hud_set_implants() if(target.stat != DEAD && !silent) to_chat(target, "Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.") - return 1 - return 0 + return TRUE + return FALSE /obj/item/implanter/mindshield name = "implanter (mindshield)" diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 87c11c54507..09f910f8c04 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -2,7 +2,7 @@ name = "firearms authentication implant" desc = "Lets you shoot your guns." icon_state = "auth" - activated = 0 + activated = FALSE /obj/item/implant/weapons_auth/get_data() var/dat = {"Implant Specifications:
@@ -67,7 +67,7 @@ /obj/item/implant/health name = "health implant" - activated = 0 + activated = FALSE var/healthstring = "" /obj/item/implant/health/proc/sensehealth() diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm index 193049d998a..2d0b25b9585 100644 --- a/code/game/objects/items/implants/implantchair.dm +++ b/code/game/objects/items/implants/implantchair.dm @@ -164,11 +164,11 @@ /obj/machinery/implantchair/genepurge/implant_action(mob/living/carbon/human/H,mob/user) if(!istype(H)) - return 0 + return FALSE H.set_species(/datum/species/human, 1)//lizards go home purrbation_remove(H)//remove cats H.dna.remove_all_mutations()//hulks out - return 1 + return TRUE /obj/machinery/implantchair/brainwash diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index 540e6bf33e2..51b3af2c794 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -13,7 +13,6 @@ attack_verb_continuous = list("mops", "bashes", "bludgeons", "whacks") attack_verb_simple = list("mop", "bash", "bludgeon", "whack") resistance_flags = FLAMMABLE - var/mopping = 0 var/mopcount = 0 var/mopcap = 15 var/mopspeed = 15 diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 1e6360c7dd7..1e1db65be32 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -256,8 +256,8 @@ if(!O) return if(M.laws && M.laws.id != DEFAULT_AI_LAWID) - aisync = 0 - lawsync = 0 + aisync = FALSE + lawsync = FALSE O.laws = M.laws M.laws.associate(O) @@ -266,14 +266,14 @@ O.custom_name = created_name O.locked = panel_locked if(!aisync) - lawsync = 0 + lawsync = FALSE O.connected_ai = null else O.notify_ai(NEW_BORG) if(forced_ai) O.connected_ai = forced_ai if(!lawsync) - O.lawupdate = 0 + O.lawupdate = FALSE if(M.laws.id == DEFAULT_AI_LAWID) O.make_laws() diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 2c7758db401..365289345ec 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -1,8 +1,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_floor = FALSE), \ - new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \ - new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = 0), \ + new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = FALSE), \ + new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = FALSE), \ new/datum/stack_recipe("railing", /obj/structure/railing, 3, time = 18, window_checks = TRUE), \ )) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index c86b3c8fe39..0c27a9b503d 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -24,10 +24,10 @@ Mineral Sheets */ GLOBAL_LIST_INIT(sandstone_recipes, list ( \ - new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = 0, on_floor = 1) \ + new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = FALSE, on_floor = TRUE) \ )) /obj/item/stack/sheet/mineral/sandstone diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 2a9ec5cf4b8..376c424e7f4 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -84,7 +84,7 @@ update_icon() /obj/item/stack/proc/get_main_recipes() - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) return list()//empty list /obj/item/stack/proc/update_weight() @@ -369,8 +369,8 @@ return source.energy < cost if(amount < 1) qdel(src) - return 1 - return 0 + return TRUE + return FALSE /obj/item/stack/proc/add(amount) if (is_cyborg) diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 40f3d8f2922..d673021ee11 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -53,16 +53,16 @@ return SHAME /obj/item/proc/can_be_package_wrapped() //can the item be wrapped with package wrapper into a delivery package - return 1 + return TRUE /obj/item/storage/can_be_package_wrapped() - return 0 + return FALSE /obj/item/storage/box/can_be_package_wrapped() - return 1 + return TRUE /obj/item/small_delivery/can_be_package_wrapped() - return 0 + return FALSE /obj/item/stack/package_wrap/afterattack(obj/target, mob/user, proximity) . = ..() diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index d848e06749c..15384d70145 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -158,7 +158,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", if (!heal_mode) return ..() - var/smack = 1 + var/smack = TRUE if (M.stat != DEAD) if(chaplain && user == M) @@ -166,7 +166,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", return if(prob(60) && bless(M, user)) - smack = 0 + smack = FALSE else if(iscarbon(M)) var/mob/living/carbon/C = M if(!istype(C.head, /obj/item/clothing/head/helmet)) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 0e1c273fe14..f7bae8b357b 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -72,7 +72,7 @@ /obj/item/storage/box/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/package_wrap)) - return 0 + return FALSE return ..() //Mime spell boxes diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index c4df38c4486..67b8000bc05 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -17,9 +17,9 @@ var/icon_opened = "secure0" var/code = "" var/l_code = null - var/l_set = 0 - var/l_setshort = 0 - var/l_hacking = 0 + var/l_set = FALSE + var/l_setshort = FALSE + var/l_hacking = FALSE var/open = FALSE w_class = WEIGHT_CLASS_NORMAL desc = "This shouldn't exist. If it does, create an issue report." @@ -44,15 +44,15 @@ if (W.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "[src] is protected from this sort of tampering, yet it appears the internal memory wires can still be pulsed.") if ((W.tool_behaviour == TOOL_MULTITOOL) && (!l_hacking)) - if(open == 1) + if(open == TRUE) to_chat(user, "Now attempting to reset internal memory, please hold.") - l_hacking = 1 + l_hacking = TRUE if (W.use_tool(src, user, 400)) to_chat(user, "Internal memory reset - lock has been disengaged.") - l_set = 0 - l_hacking = 0 + l_set = FALSE + l_hacking = FALSE else - l_hacking = 0 + l_hacking = FALSE else to_chat(user, "You must unscrew the service panel before you can pulse the wiring!") return @@ -84,10 +84,10 @@ return if (href_list["type"]) if (href_list["type"] == "E") - if ((l_set == 0) && (length(code) == 5) && (!l_setshort) && (code != "ERROR")) + if (!l_set && (length(code) == 5) && (!l_setshort) && (code != "ERROR")) l_code = code - l_set = 1 - else if ((code == l_code) && (l_set == 1)) + l_set = TRUE + else if ((code == l_code) && l_set) SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) cut_overlays() add_overlay(icon_opened) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index ce2b709512a..b33ea6bf97f 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -117,7 +117,7 @@ possible_transfer_amounts = list(25,50,100) volume = 500 item_flags = NOBLUDGEON | ABSTRACT // don't put in storage - slot_flags = 0 + slot_flags = NONE var/obj/item/watertank/tank diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index d9b6d1d7922..a200e63a17b 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -213,8 +213,8 @@ set_light_on(FALSE) switched_on(user) update_icon() - return 0 - return 1 + return FALSE + return TRUE //Switches the welder on /obj/item/weldingtool/proc/switched_on(mob/user) @@ -336,7 +336,7 @@ max_fuel = 10 w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron=30, /datum/material/glass=10) - change_icons = 0 + change_icons = FALSE /obj/item/weldingtool/mini/flamethrower_screwdriver() return @@ -349,7 +349,7 @@ toolspeed = 0.1 light_system = NO_LIGHT_SUPPORT light_range = 0 - change_icons = 0 + change_icons = FALSE /obj/item/weldingtool/abductor/process() if(get_fuel() <= max_fuel) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 0f60485e4f1..3d12584d25e 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -931,8 +931,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(attack_type == PROJECTILE_ATTACK) owner.visible_message("[owner] deflects [attack_text] with [src]!") playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) - return 1 + return TRUE else owner.visible_message("[owner] parries [attack_text] with [src]!") - return 1 - return 0 + return TRUE + return FALSE diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 36fd5226951..2cb503f7d3b 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -220,7 +220,7 @@ desc = "The perfect showcase for your favorite deathtrap memories." icon = 'icons/obj/decals.dmi' custom_materials = list(/datum/material/wood = 2000) - flags_1 = 0 + flags_1 = NONE icon_state = "frame-empty" result_path = /obj/structure/sign/painting diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index ae0d17c7456..ef079d1270b 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -79,9 +79,9 @@ . = ..() if(over_object == usr && Adjacent(usr)) if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE)) - return 0 + return FALSE if(has_buckled_mobs()) - return 0 + return FALSE usr.visible_message("[usr] collapses \the [src.name].", "You collapse \the [src.name].") var/obj/structure/bed/roller/B = new foldabletype(get_turf(src)) usr.put_in_hands(B) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index a2182bbb146..d9d9c44915c 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -325,8 +325,8 @@ /obj/item/chair/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(attack_type == UNARMED_ATTACK && prob(hit_reaction_chance)) owner.visible_message("[owner] fends off [attack_text] with [src]!") - return 1 - return 0 + return TRUE + return FALSE /obj/item/chair/afterattack(atom/target, mob/living/carbon/user, proximity) . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 3eb02423395..252f6a35454 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -393,8 +393,8 @@ /obj/structure/closet/Exit(atom/movable/AM) open() if(AM.loc == src) - return 0 - return 1 + return FALSE + return TRUE /obj/structure/closet/container_resist_act(mob/living/user) if(opened) diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 81cc66b9e7a..2502d6eee8c 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -18,7 +18,7 @@ drag_slowdown = 0 var/foldedbag_path = /obj/item/bodybag var/obj/item/bodybag/foldedbag_instance = null - var/tagged = 0 // so closet code knows to put the tag overlay back + var/tagged = FALSE // so closet code knows to put the tag overlay back /obj/structure/closet/body_bag/Destroy() // If we have a stored bag, and it's in nullspace (not in someone's hand), delete it. @@ -38,7 +38,7 @@ return if(t) name = "body bag - [t]" - tagged = 1 + tagged = TRUE update_icon() else name = "body bag" @@ -46,7 +46,7 @@ else if(I.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "You cut the tag off [src].") name = "body bag" - tagged = 0 + tagged = FALSE update_icon() /obj/structure/closet/body_bag/update_overlays() diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 45b73f5caea..68cb6568c52 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -45,7 +45,7 @@ return to_chat(user, "You start fixing [src]...") if(do_after(user, 20, target = src) && G.use(2)) - broken = 0 + broken = FALSE obj_integrity = max_integrity update_icon() else if(open || broken) @@ -75,7 +75,7 @@ if(BURN) playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) -/obj/structure/fireaxecabinet/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) +/obj/structure/fireaxecabinet/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = TRUE, attack_dir) if(open) return . = ..() diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 833cf07cf60..ef878ed4c4b 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -361,7 +361,7 @@ var/obj/item/stack/sheet/runed_metal/R = W if(R.get_amount() < 1) to_chat(user, "You need at least one sheet of runed metal to construct a runed wall!") - return 0 + return user.visible_message("[user] begins laying runed metal on [src]...", "You begin constructing a runed wall...") if(do_after(user, 50, target = src)) if(R.get_amount() < 1) @@ -428,7 +428,7 @@ var/obj/item/stack/tile/bronze/B = W if(B.get_amount() < 2) to_chat(user, "You need at least two bronze sheets to build a bronze wall!") - return 0 + return user.visible_message("[user] begins plating [src] with bronze...", "You begin constructing a bronze wall...") if(do_after(user, 50, target = src)) if(B.get_amount() < 2) diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index 86a20291725..f4779664e52 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -21,7 +21,7 @@ anchored = TRUE density = TRUE max_buckled_mobs = 1 - buckle_lying = FALSE + buckle_lying = 0 buckle_prevents_pull = TRUE layer = ABOVE_MOB_LAYER var/blade_status = GUILLOTINE_BLADE_RAISED diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index eedb3c3b439..9d3aa9c6f4d 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -23,13 +23,13 @@ /obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user) if(reagents.total_volume < 1) to_chat(user, "[src] is out of water!") - return 0 + return FALSE else var/obj/item/mop/M = mop reagents.trans_to(mop, M.mopcap, transfered_by = user) to_chat(user, "You wet [mop] in [src].") playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) - return 1 + return TRUE /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) if(!user.transferItemToLoc(I, src)) diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm index c8b80446925..fa30cb34eb7 100644 --- a/code/game/objects/structures/petrified_statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -77,28 +77,28 @@ /mob/living/carbon/human/petrify(statue_timer) if(!isturf(loc)) - return 0 + return FALSE var/obj/structure/statue/petrified/S = new(loc, src, statue_timer) S.name = "statue of [name]" bleedsuppress = 1 S.copy_overlays(src) var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY) - return 1 + return TRUE /mob/living/carbon/monkey/petrify(statue_timer) if(!isturf(loc)) - return 0 + return FALSE var/obj/structure/statue/petrified/S = new(loc, src, statue_timer) S.name = "statue of a monkey" S.icon_state = "monkey" - return 1 + return TRUE /mob/living/simple_animal/pet/dog/corgi/petrify(statue_timer) if(!isturf(loc)) - return 0 + return FALSE var/obj/structure/statue/petrified/S = new (loc, src, statue_timer) S.name = "statue of a corgi" S.icon_state = "corgi" S.desc = "If it takes forever, I will wait for you..." - return 1 + return TRUE diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 9c881f72711..edcf6df50e0 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -227,7 +227,7 @@ material_drop_type = /obj/item/stack/sheet/mineral/bananium impressiveness = 50 desc = "A bananium statue with a small engraving:'HOOOOOOONK'." - var/spam_flag = 0 + var/limiting_spam = FALSE /obj/structure/statue/bananium/clown name = "statue of a clown" @@ -250,10 +250,10 @@ ..() /obj/structure/statue/bananium/proc/honk() - if(!spam_flag) - spam_flag = TRUE + if(!limiting_spam) + limiting_spam = TRUE playsound(src.loc, 'sound/items/bikehorn.ogg', 50, TRUE) - addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), 2 SECONDS) + addtimer(VARSET_CALLBACK(src, limiting_spam, FALSE), 2 SECONDS) /////////////////////sandstone///////////////////////////////////////// diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index d57f8388d18..c69100442d2 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -536,7 +536,7 @@ canSmoothWith = null can_buckle = 1 buckle_lying = -1 - buckle_requires_restraints = 1 + buckle_requires_restraints = TRUE var/mob/living/carbon/human/patient = null var/obj/machinery/computer/operating/computer = null diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm index 354a9f98cdd..9ed25a0bafb 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm @@ -9,7 +9,7 @@ density = FALSE layer = LOW_ITEM_LAYER //same as the built tube anchored = FALSE - var/flipped = 0 + var/flipped = FALSE var/build_type = /obj/structure/transit_tube var/flipped_build_type var/base_icon @@ -62,7 +62,7 @@ /obj/structure/c_transit_tube/station/flipped icon_state = "closed_station1" - flipped = 1 + flipped = TRUE build_type = /obj/structure/transit_tube/station/flipped flipped_build_type = /obj/structure/transit_tube/station @@ -77,7 +77,7 @@ /obj/structure/c_transit_tube/station/reverse/flipped icon_state = "closed_terminus1" - flipped = 1 + flipped = TRUE build_type = /obj/structure/transit_tube/station/reverse/flipped flipped_build_type = /obj/structure/transit_tube/station/reverse @@ -91,7 +91,7 @@ /obj/structure/c_transit_tube/station/dispenser/flipped icon_state = "closed_station1" - flipped = 1 + flipped = TRUE build_type = /obj/structure/transit_tube/station/dispenser/flipped flipped_build_type = /obj/structure/transit_tube/station/dispenser @@ -106,7 +106,7 @@ /obj/structure/c_transit_tube/station/dispenser/reverse/flipped icon_state = "closed_terminus1" - flipped = 1 + flipped = TRUE build_type = /obj/structure/transit_tube/station/dispenser/reverse/flipped flipped_build_type = /obj/structure/transit_tube/station/dispenser/reverse @@ -136,7 +136,7 @@ icon_state = "curved1" build_type = /obj/structure/transit_tube/curved/flipped flipped_build_type = /obj/structure/transit_tube/curved - flipped = 1 + flipped = TRUE /obj/structure/c_transit_tube/junction @@ -148,7 +148,7 @@ /obj/structure/c_transit_tube/junction/flipped icon_state = "junction1" - flipped = 1 + flipped = TRUE build_type = /obj/structure/transit_tube/junction/flipped flipped_build_type = /obj/structure/transit_tube/junction diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 6159e6640a9..961a37948b1 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -98,7 +98,7 @@ return ..() /obj/structure/transit_tube_pod/proc/follow_tube() - set waitfor = 0 + set waitfor = FALSE if(moving) return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 092dcf2cbee..499ffe5c044 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -99,9 +99,9 @@ /obj/structure/window/CanAllowThrough(atom/movable/mover, turf/target) . = ..() if(istype(mover) && (mover.pass_flags & PASSGLASS)) - return 1 + return TRUE if(dir == FULLTILE_WINDOW_DIR) - return 0 //full tile window, you can't move into it! + return FALSE //full tile window, you can't move into it! var/attempted_dir = get_dir(loc, target) if(attempted_dir == dir) return @@ -120,10 +120,10 @@ /obj/structure/window/CheckExit(atom/movable/O, turf/target) if(istype(O) && (O.pass_flags & PASSGLASS)) - return 1 + return TRUE if(get_dir(O.loc, target) == dir) - return 0 - return 1 + return FALSE + return TRUE /obj/structure/window/attack_tk(mob/user) user.changeNext_move(CLICK_CD_MELEE) @@ -227,8 +227,8 @@ if(get_dir(user,src) & dir) for(var/obj/O in loc) if(!O.CanPass(user, user.loc, 1)) - return 0 - return 1 + return FALSE + return TRUE /obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) . = ..() @@ -337,11 +337,11 @@ /obj/structure/window/CanAStarPass(ID, to_dir) if(!density) - return 1 + return TRUE if((dir == FULLTILE_WINDOW_DIR) || (dir == to_dir)) - return 0 + return FALSE - return 1 + return TRUE /obj/structure/window/GetExplosionBlock() return reinf && fulltile ? real_explosion_block : 0 diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index e1705332786..bb3a77d64d1 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -30,7 +30,7 @@ return /turf/closed/indestructible/acid_act(acidpwr, acid_volume, acid_id) - return 0 + return FALSE /turf/closed/indestructible/Melt() to_be_destroyed = FALSE diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 5780f3fb129..0cc9ae9be12 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -656,8 +656,8 @@ countdown(notify_admins) -/turf/closed/mineral/gibtonite/proc/countdown(notify_admins = 0) - set waitfor = 0 +/turf/closed/mineral/gibtonite/proc/countdown(notify_admins = FALSE) + set waitfor = FALSE while(istype(src, /turf/closed/mineral/gibtonite) && stage == GIBTONITE_ACTIVE && det_time > 0 && mineralAmt >= 1) det_time-- sleep(5) @@ -679,7 +679,7 @@ det_time = 0 visible_message("The chain reaction stopped! The gibtonite had [det_time] reactions left till the explosion!") -/turf/closed/mineral/gibtonite/gets_drilled(mob/user, triggered_by_explosion = 0) +/turf/closed/mineral/gibtonite/gets_drilled(mob/user, triggered_by_explosion = FALSE) if(stage == GIBTONITE_UNSTRUCK && mineralAmt >= 1) //Gibtonite deposit is activated playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,TRUE) explosive_reaction(user, triggered_by_explosion) @@ -688,7 +688,7 @@ var/turf/bombturf = get_turf(src) mineralAmt = 0 stage = GIBTONITE_DETONATE - explosion(bombturf,1,2,5, adminlog = 0) + explosion(bombturf,1,2,5, adminlog = FALSE) if(stage == GIBTONITE_STABLE) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore. var/obj/item/gibtonite/G = new (src) if(det_time <= 0) diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index 648b3014eac..0c48b1a5379 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -59,25 +59,25 @@ d_state = SUPPORT_LINES update_icon() to_chat(user, "You cut the outer grille.") - return 1 + return TRUE if(SUPPORT_LINES) if(W.tool_behaviour == TOOL_SCREWDRIVER) to_chat(user, "You begin unsecuring the support lines...") if(W.use_tool(src, user, 40, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_LINES) - return 1 + return TRUE d_state = COVER update_icon() to_chat(user, "You unsecure the support lines.") - return 1 + return TRUE else if(W.tool_behaviour == TOOL_WIRECUTTER) W.play_tool_sound(src, 100) d_state = INTACT update_icon() to_chat(user, "You repair the outer grille.") - return 1 + return TRUE if(COVER) if(W.tool_behaviour == TOOL_WELDER) @@ -86,32 +86,32 @@ to_chat(user, "You begin slicing through the metal cover...") if(W.use_tool(src, user, 60, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER) - return 1 + return TRUE d_state = CUT_COVER update_icon() to_chat(user, "You press firmly on the cover, dislodging it.") - return 1 + return TRUE if(W.tool_behaviour == TOOL_SCREWDRIVER) to_chat(user, "You begin securing the support lines...") if(W.use_tool(src, user, 40, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER) - return 1 + return TRUE d_state = SUPPORT_LINES update_icon() to_chat(user, "The support lines have been secured.") - return 1 + return TRUE if(CUT_COVER) if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, "You struggle to pry off the cover...") if(W.use_tool(src, user, 100, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER) - return 1 + return TRUE d_state = ANCHOR_BOLTS update_icon() to_chat(user, "You pry off the cover.") - return 1 + return TRUE if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=0)) @@ -123,28 +123,28 @@ d_state = COVER update_icon() to_chat(user, "The metal cover has been welded securely to the frame.") - return 1 + return TRUE if(ANCHOR_BOLTS) if(W.tool_behaviour == TOOL_WRENCH) to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame...") if(W.use_tool(src, user, 40, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS) - return 1 + return TRUE d_state = SUPPORT_RODS update_icon() to_chat(user, "You remove the bolts anchoring the support rods.") - return 1 + return TRUE if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, "You start to pry the cover back into place...") if(W.use_tool(src, user, 20, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS) - return 1 + return TRUE d_state = CUT_COVER update_icon() to_chat(user, "The metal cover has been pried back into place.") - return 1 + return TRUE if(SUPPORT_RODS) if(W.tool_behaviour == TOOL_WELDER) @@ -153,32 +153,32 @@ to_chat(user, "You begin slicing through the support rods...") if(W.use_tool(src, user, 100, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS) - return 1 + return TRUE d_state = SHEATH update_icon() to_chat(user, "You slice through the support rods.") - return 1 + return TRUE if(W.tool_behaviour == TOOL_WRENCH) to_chat(user, "You start tightening the bolts which secure the support rods to their frame...") W.play_tool_sound(src, 100) if(W.use_tool(src, user, 40)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS) - return 1 + return TRUE d_state = ANCHOR_BOLTS update_icon() to_chat(user, "You tighten the bolts anchoring the support rods.") - return 1 + return TRUE if(SHEATH) if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, "You struggle to pry off the outer sheath...") if(W.use_tool(src, user, 100, volume=100)) if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH) - return 1 + return TRUE to_chat(user, "You pry off the outer sheath.") dismantle_wall() - return 1 + return TRUE if(W.tool_behaviour == TOOL_WELDER) if(!W.tool_start_check(user, amount=0)) @@ -190,8 +190,8 @@ d_state = SUPPORT_RODS update_icon() to_chat(user, "You weld the support rods back together.") - return 1 - return 0 + return TRUE + return FALSE /turf/closed/wall/r_wall/update_icon() . = ..() diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index dd2a714c55c..f80c206dc8a 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -156,7 +156,7 @@ baseturfs = /turf/open/indestructible/airblock /turf/open/Initalize_Atmos(times_fired) - excited = 0 + excited = FALSE update_visuals() current_cycle = times_fired @@ -207,18 +207,18 @@ /turf/open/handle_slip(mob/living/carbon/C, knockdown_amount, obj/O, lube, paralyze_amount, force_drop) if(C.movement_type & FLYING) - return 0 + return FALSE if(has_gravity(src)) var/obj/buckled_obj if(C.buckled) buckled_obj = C.buckled if(!(lube&GALOSHES_DONT_HELP)) //can't slip while buckled unless it's lube. - return 0 + return FALSE else if(!(lube&SLIP_WHEN_CRAWLING) && (!(C.mobility_flags & MOBILITY_STAND) || !(C.status_flags & CANKNOCKDOWN))) // can't slip unbuckled mob if they're lying or can't fall. - return 0 + return FALSE if(C.m_intent == MOVE_INTENT_WALK && (lube&NO_SLIP_WHEN_WALKING)) - return 0 + return FALSE if(!(lube&SLIDE_ICE)) to_chat(C, "You slipped[ O ? " on the [O.name]" : ""]!") playsound(C.loc, 'sound/misc/slip.ogg', 50, TRUE, -3) @@ -247,7 +247,7 @@ if(C.force_moving) //If we're already slipping extend it qdel(C.force_moving) new /datum/forced_movement(C, get_ranged_target_turf(C, olddir, 1), 1, FALSE) //spinning would be bad for ice, fucks up the next dir - return 1 + return TRUE /turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0, max_wet_time = MAXIMUM_WET_TIME, permanent) AddComponent(/datum/component/wet_floor, wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index 6677a31d266..dc325c53f3d 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -18,9 +18,9 @@ var/icon_plating = "plating" thermal_conductivity = 0.040 heat_capacity = 10000 - intact = 1 - var/broken = 0 - var/burnt = 0 + intact = TRUE + var/broken = FALSE + var/burnt = FALSE var/floor_tile = null //tile that this floor drops var/list/broken_states var/list/burnt_states @@ -200,8 +200,8 @@ /turf/open/floor/proc/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, force_plating) if(broken || burnt) - broken = 0 - burnt = 0 + broken = FALSE + burnt = FALSE if(user && !silent) to_chat(user, "You remove the broken plating.") else diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index e38b0fd8f6f..72d042a8881 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -46,8 +46,8 @@ /turf/open/floor/wood/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, force_plating) if(broken || burnt) - broken = 0 - burnt = 0 + broken = FALSE + burnt = FALSE if(user && !silent) to_chat(user, "You remove the broken planks.") else @@ -196,8 +196,9 @@ update_icon() /turf/open/floor/carpet/update_icon() - if(!..()) - return 0 + . = ..() + if(!.) + return if(!broken && !burnt) if(smoothing_flags) QUEUE_SMOOTH(src) diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm index 89cc708e54b..5b4a89651ab 100644 --- a/code/game/turfs/open/floor/mineral_floor.dm +++ b/code/game/turfs/open/floor/mineral_floor.dm @@ -24,8 +24,9 @@ /turf/open/floor/mineral/update_icon() - if(!..()) - return 0 + . = ..() + if(!.) + return if(!broken && !burnt) if( !(icon_state in icons) ) icon_state = initial(icon_state) @@ -147,7 +148,7 @@ icon_state = "bananium" floor_tile = /obj/item/stack/tile/mineral/bananium icons = list("bananium","bananium_dam") - var/spam_flag = 0 + var/sound_cooldown = 0 /turf/open/floor/mineral/bananium/Entered(atom/movable/AM) .=..() @@ -171,14 +172,14 @@ honk() /turf/open/floor/mineral/bananium/proc/honk() - if(spam_flag < world.time) + if(sound_cooldown < world.time) playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) - spam_flag = world.time + 20 + sound_cooldown = world.time + 20 /turf/open/floor/mineral/bananium/proc/squeak() - if(spam_flag < world.time) + if(sound_cooldown < world.time) playsound(src, "clownstep", 50, TRUE) - spam_flag = world.time + 10 + sound_cooldown = world.time + 10 /turf/open/floor/mineral/bananium/airless initial_gas_mix = AIRLESS_ATMOS @@ -226,12 +227,12 @@ /turf/open/floor/mineral/uranium/proc/radiate() if(!active) if(world.time > last_event+15) - active = 1 + active = TRUE radiation_pulse(src, 10) for(var/turf/open/floor/mineral/uranium/T in orange(1,src)) T.radiate() last_event = world.time - active = 0 + active = FALSE return // ALIEN ALLOY diff --git a/code/game/turfs/open/floor/plasteel_floor.dm b/code/game/turfs/open/floor/plasteel_floor.dm index 5c966778784..00614c80392 100644 --- a/code/game/turfs/open/floor/plasteel_floor.dm +++ b/code/game/turfs/open/floor/plasteel_floor.dm @@ -14,8 +14,9 @@ ChangeTurf(/turf/open/floor/plating/rust) /turf/open/floor/plasteel/update_icon() - if(!..()) - return 0 + . = ..() + if(!.) + return if(!broken && !burnt) icon_state = icon_regular_floor diff --git a/code/game/turfs/open/river.dm b/code/game/turfs/open/river.dm index adc6b57960d..6e4695b0fe9 100644 --- a/code/game/turfs/open/river.dm +++ b/code/game/turfs/open/river.dm @@ -22,22 +22,22 @@ var/obj/effect/landmark/river_waypoint/W = A if (W.z != target_z || W.connected) continue - W.connected = 1 + W.connected = TRUE var/turf/cur_turf = get_turf(W) cur_turf.ChangeTurf(turf_type, new_baseturfs, CHANGETURF_IGNORE_AIR) var/turf/target_turf = get_turf(pick(river_nodes - W)) if(!target_turf) break - var/detouring = 0 + var/detouring = FALSE var/cur_dir = get_dir(cur_turf, target_turf) while(cur_turf != target_turf) if(detouring) //randomly snake around a bit if(prob(20)) - detouring = 0 + detouring = FALSE cur_dir = get_dir(cur_turf, target_turf) else if(prob(20)) - detouring = 1 + detouring = TRUE if(prob(50)) cur_dir = turn(cur_dir, 45) else @@ -48,7 +48,7 @@ cur_turf = get_step(cur_turf, cur_dir) var/area/new_area = get_area(cur_turf) if(!istype(new_area, whitelist_area) || (cur_turf.flags_1 & NO_LAVA_GEN_1)) //Rivers will skip ruins - detouring = 0 + detouring = FALSE cur_dir = get_dir(cur_turf, target_turf) cur_turf = get_step(cur_turf, cur_dir) continue @@ -62,7 +62,7 @@ /obj/effect/landmark/river_waypoint name = "river waypoint" - var/connected = 0 + var/connected = FALSE invisibility = INVISIBILITY_ABSTRACT diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm index 0519926ca7f..356f382c75a 100644 --- a/code/game/turfs/open/space/space.dm +++ b/code/game/turfs/open/space/space.dm @@ -206,16 +206,16 @@ /turf/open/space/can_have_cabling() if(locate(/obj/structure/lattice/catwalk, src)) - return 1 - return 0 + return TRUE + return FALSE /turf/open/space/is_transition_turf() if(destination_x || destination_y || destination_z) - return 1 + return TRUE /turf/open/space/acid_act(acidpwr, acid_volume) - return 0 + return FALSE /turf/open/space/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/space.dmi' diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 39de5098c53..514b06977b1 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -487,7 +487,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) switch(choice) if(null) - return 0 + return if("Small Bomb (1, 2, 3, 3)") explosion(epicenter, 1, 2, 3, 3, TRUE, TRUE) if("Medium Bomb (2, 3, 4, 4)") diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 1f60597e12c..daff5ffeb16 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -130,7 +130,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) /client/proc/callproc_datum(datum/A as null|area|mob|obj|turf) set category = "Debug" set name = "Atom ProcCall" - set waitfor = 0 + set waitfor = FALSE if(!check_rights(R_DEBUG)) return diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index e10c8dc15e1..2dab412e0c4 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -130,21 +130,21 @@ GLOBAL_PROTECT(href_token) /datum/admins/proc/check_for_rights(rights_required) if(rights_required && !(rights_required & rank.rights)) - return 0 - return 1 + return FALSE + return TRUE /datum/admins/proc/check_if_greater_rights_than_holder(datum/admins/other) if(!other) - return 1 //they have no rights + return TRUE //they have no rights if(rank.rights == R_EVERYTHING) - return 1 //we have all the rights + return TRUE //we have all the rights if(src == other) - return 1 //you always have more rights than yourself + return TRUE //you always have more rights than yourself if(rank.rights != other.rank.rights) if( (rank.rights & other.rank.rights) == other.rank.rights ) - return 1 //we have all the rights they have and more - return 0 + return TRUE //we have all the rights they have and more + return FALSE /datum/admins/vv_edit_var(var_name, var_value) return FALSE //nice try trialmin @@ -166,26 +166,26 @@ you will have to do something like if(client.rights & R_ADMIN) yourself. /proc/check_rights(rights_required, show_msg=1) if(usr && usr.client) if (check_rights_for(usr.client, rights_required)) - return 1 + return TRUE else if(show_msg) to_chat(usr, "Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].", confidential = TRUE) - return 0 + return FALSE //probably a bit iffy - will hopefully figure out a better solution /proc/check_if_greater_rights_than(client/other) if(usr && usr.client) if(usr.client.holder) if(!other || !other.holder) - return 1 + return TRUE return usr.client.holder.check_if_greater_rights_than_holder(other.holder) - return 0 + return FALSE //This proc checks whether subject has at least ONE of the rights specified in rights_required. /proc/check_rights_for(client/subject, rights_required) if(subject && subject.holder) return subject.holder.check_for_rights(rights_required) - return 0 + return FALSE /proc/GenerateToken() . = "" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 3a51fa91ad8..1dbab89d88e 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -95,7 +95,7 @@ /datum/admins/proc/Secrets_topic(item,href_list) var/datum/round_event/E - var/ok = 0 + var/ok = FALSE switch(item) if("admin_log") var/dat = "Admin Log
" @@ -290,7 +290,7 @@ for(var/i in GLOB.human_list) var/mob/living/carbon/human/H = i INVOKE_ASYNC(H, /mob/living/carbon.proc/monkeyize) - ok = 1 + ok = TRUE if("allspecies") if(!check_rights(R_FUN)) @@ -709,7 +709,7 @@ to_chat(world, text("A secret has been activated by []!", usr.key), confidential = TRUE) /proc/portalAnnounce(announcement, playlightning) - set waitfor = 0 + set waitfor = FALSE if (playlightning) sound_to_playing_players('sound/magic/lightning_chargeup.ogg') sleep(80) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index ae10d77657c..76e9a07cd9d 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -562,7 +562,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) . = list("total" = list(), "noflags" = list(), "afk" = list(), "stealth" = list(), "present" = list()) for(var/client/X in GLOB.admins) .["total"] += X - if(requiredflags != 0 && !check_rights_for(X, requiredflags)) + if(requiredflags != NONE && !check_rights_for(X, requiredflags)) .["noflags"] += X else if(X.is_afk()) .["afk"] += X diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 2677bdc82e0..a5676a8e03b 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -98,11 +98,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that available.Add(C) var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in sortNames(available) if(!choice) - return 0 + return if(!isobserver(choice)) var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank him out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No") if(confirm != "Yes") - return 0 + return var/obj/item/paicard/card = new(T) var/mob/living/silicon/pai/pai = new(card) @@ -590,12 +590,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that for(var/obj/machinery/power/emitter/E in GLOB.machines) if(E.anchored) - E.active = 1 + E.active = TRUE for(var/obj/machinery/field/generator/F in GLOB.machines) - if(F.active == 0) + if(F.active == FALSE) F.set_anchored(TRUE) - F.active = 1 + F.active = TRUE F.state = 2 F.power = 250 F.warming_up = 3 diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index b187de8f6bc..843e53ee386 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -66,7 +66,7 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping) icon_state = "yellow" /obj/effect/debugging/marker/Move() - return 0 + return FALSE /client/proc/camera_view() set category = "Mapping" @@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) if(!Master) alert(usr,"Master_controller not found.","Sec Camera Report") - return 0 + return FALSE var/list/obj/machinery/camera/CL = list() diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 89e0827149c..cef021f35c2 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -69,10 +69,10 @@ H.mind.make_Traitor() candidates.Remove(H) - return 1 + return TRUE - return 0 + return FALSE /datum/admins/proc/makeChangelings() @@ -101,9 +101,9 @@ H.mind.make_Changeling() candidates.Remove(H) - return 1 + return TRUE - return 0 + return FALSE /datum/admins/proc/makeRevs() @@ -130,9 +130,9 @@ H = pick(candidates) H.mind.make_Rev() candidates.Remove(H) - return 1 + return TRUE - return 0 + return FALSE /datum/admins/proc/makeWizard() @@ -170,9 +170,9 @@ H.mind.make_Cultist() candidates.Remove(H) - return 1 + return TRUE - return 0 + return FALSE @@ -200,7 +200,7 @@ break //Making sure we have atleast 3 Nuke agents, because less than that is kinda bad if(agentcount < 3) - return 0 + return FALSE //Let's find the spawn locations var/leader_chosen = FALSE @@ -213,9 +213,9 @@ nuke_team = N.nuke_team else new_character.mind.add_antag_datum(/datum/antagonist/nukeop,nuke_team) - return 1 + return TRUE else - return 0 + return FALSE diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 701351b238d..6c992bdab85 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -16,7 +16,7 @@ admin_sound.channel = CHANNEL_ADMIN admin_sound.frequency = freq admin_sound.wait = 1 - admin_sound.repeat = 0 + admin_sound.repeat = FALSE admin_sound.status = SOUND_STREAM admin_sound.volume = vol diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 52b6eff05cd..dd4d7b5bf4b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -300,7 +300,7 @@ else to_chat(usr, "Error: create_xeno(): no suitable candidates.", confidential = TRUE) if(!istext(ckey)) - return 0 + return FALSE var/alien_caste = input(usr, "Please choose which caste to spawn.","Pick a caste",null) as null|anything in list("Queen","Praetorian","Hunter","Sentinel","Drone","Larva") var/obj/effect/landmark/spawn_here = GLOB.xeno_spawn.len ? pick(GLOB.xeno_spawn) : null @@ -319,7 +319,7 @@ if("Larva") new_xeno = new /mob/living/carbon/alien/larva(spawn_here) else - return 0 + return FALSE if(!spawn_here) SSjob.SendToLateJoin(new_xeno, FALSE) @@ -327,7 +327,7 @@ var/msg = "[key_name_admin(usr)] has spawned [ckey] as a filthy xeno [alien_caste]." message_admins(msg) admin_ticket_log(new_xeno, msg) - return 1 + return TRUE /* If a guy was gibbed and you want to revive him, this is a good way to do so. @@ -831,7 +831,7 @@ Traitors and the like can also be revived with the previous role mostly intact. /client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list) set name = "Toggle Nuke" set category = "Admin - Events" - set popup_menu = 0 + set popup_menu = FALSE if(!check_rights(R_DEBUG)) return diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 2b3050343c1..0523b095fd7 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -23,7 +23,7 @@ /obj/item/restraints/handcuffs ) var/mode = VEST_STEALTH - var/stealth_active = 0 + var/stealth_active = FALSE var/combat_cooldown = 10 var/datum/icon_snapshot/disguise var/stealth_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 25, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70) @@ -70,7 +70,7 @@ /obj/item/clothing/suit/armor/abductor/vest/proc/ActivateStealth() if(disguise == null) return - stealth_active = 1 + stealth_active = TRUE if(ishuman(loc)) var/mob/living/carbon/human/M = loc new /obj/effect/temp_visual/dir_setting/ninja/cloak(get_turf(M), M.dir) @@ -84,7 +84,7 @@ /obj/item/clothing/suit/armor/abductor/vest/proc/DeactivateStealth() if(!stealth_active) return - stealth_active = 0 + stealth_active = FALSE if(ishuman(loc)) var/mob/living/carbon/human/M = loc new /obj/effect/temp_visual/dir_setting/ninja(get_turf(M), M.dir) @@ -876,4 +876,4 @@ Congratulations! You are now trained for invasive xenobiology research!"} inhand_icon_state = "bl_suit" worn_icon = 'icons/mob/clothing/under/syndicate.dmi' armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0) - can_adjust = 0 + can_adjust = FALSE diff --git a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm index 641c21bd5b2..28e2d174484 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_surgery.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_surgery.dm @@ -6,13 +6,13 @@ /datum/surgery/organ_extraction/can_start(mob/user, mob/living/carbon/target) if(!ishuman(user)) - return 0 + return FALSE var/mob/living/carbon/human/H = user if(H.dna.species.id == "abductor") - return 1 + return TRUE for(var/obj/item/implant/abductor/A in H.implants) - return 1 - return 0 + return TRUE + return FALSE /datum/surgery_step/extract_organ diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index a9f31b8ecc6..0fcb5357c6b 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -73,8 +73,8 @@ active_mind_control = FALSE return TRUE -/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = 0) - active = 0 +/obj/item/organ/heart/gland/Remove(mob/living/carbon/M, special = FALSE) + active = FALSE if(initial(uses) == 1) uses = initial(uses) var/datum/atom_hud/abductor/hud = GLOB.huds[DATA_HUD_ABDUCTOR] @@ -82,7 +82,7 @@ clear_mind_control() ..() -/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0) +/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = FALSE) ..() if(special != 2 && uses) // Special 2 means abductor surgery Start() @@ -97,14 +97,14 @@ if(!active) return if(!ownerCheck()) - active = 0 + active = FALSE return if(next_activation <= world.time) activate() uses-- next_activation = world.time + rand(cooldown_low,cooldown_high) if(!uses) - active = 0 + active = FALSE /obj/item/organ/heart/gland/proc/activate() return diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index f6c61109512..5a2d9b5edef 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -65,7 +65,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ return /datum/blobstrain/proc/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this - return 1 //return 0 to ignore damage + return TRUE //return 0 to ignore damage /datum/blobstrain/proc/extinguish_reaction(obj/structure/blob/B, coefficient = 1) //when the blob is hit with water, do this return diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm index f0ab16706a5..1bf4b0b54f4 100644 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm @@ -15,7 +15,7 @@ return ..() /datum/blobstrain/reagent/energized_jelly/tesla_reaction(obj/structure/blob/B, power) - return 0 + return FALSE /datum/blobstrain/reagent/energized_jelly/emp_reaction(obj/structure/blob/B, severity) var/damage = rand(30, 50) - severity * rand(10, 15) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index e1c09d065b7..9cdacdc9884 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -30,8 +30,8 @@ GLOBAL_LIST_EMPTY(blob_nodes) var/list/resource_blobs = list() var/free_strain_rerolls = 1 //one free strain reroll var/last_reroll_time = 0 //time since we last rerolled, used to give free rerolls - var/nodes_required = 1 //if the blob needs nodes to place resource and factory blobs - var/placed = 0 + var/nodes_required = TRUE //if the blob needs nodes to place resource and factory blobs + var/placed = FALSE var/manualplace_min_time = 600 //in deciseconds //a minute, to get bearings var/autoplace_max_time = 3600 //six minutes, as long as should be needed var/list/blobs_legit = list() @@ -271,13 +271,13 @@ GLOBAL_LIST_EMPTY(blob_nodes) if(B) forceMove(NewLoc) else - return 0 + return FALSE else var/area/A = get_area(NewLoc) if(isspaceturf(NewLoc) || istype(A, /area/shuttle)) //if unplaced, can't go on shuttles or space tiles - return 0 + return FALSE forceMove(NewLoc) - return 1 + return TRUE /mob/camera/blob/mind_initialize() . = ..() diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm index 1e542f994c6..40de8330ce5 100644 --- a/code/modules/antagonists/blob/powers.dm +++ b/code/modules/antagonists/blob/powers.dm @@ -1,15 +1,15 @@ /mob/camera/blob/proc/can_buy(cost = 15) if(blob_points < cost) to_chat(src, "You cannot afford this, you need at least [cost] resources!") - return 0 + return FALSE add_points(-cost) - return 1 + return TRUE // Power verbs /mob/camera/blob/proc/place_blob_core(placement_override, pop_override = FALSE) if(placed && placement_override != -1) - return 1 + return TRUE if(!placement_override) if(!pop_override) for(var/mob/living/M in range(7, src)) @@ -17,34 +17,34 @@ continue if(M.client) to_chat(src, "There is someone too close to place your blob core!") - return 0 + return FALSE for(var/mob/living/M in view(13, src)) if(ROLE_BLOB in M.faction) continue if(M.client) to_chat(src, "Someone could see your blob core from here!") - return 0 + return FALSE var/turf/T = get_turf(src) if(T.density) to_chat(src, "This spot is too dense to place a blob core on!") - return 0 + return FALSE var/area/A = get_area(T) if(isspaceturf(T) || A && !(A.area_flags & BLOBS_ALLOWED)) to_chat(src, "You cannot place your core here!") - return 0 + return FALSE for(var/obj/O in T) if(istype(O, /obj/structure/blob)) if(istype(O, /obj/structure/blob/normal)) qdel(O) else to_chat(src, "There is already a blob here!") - return 0 + return FALSE else if(O.density) to_chat(src, "This spot is too dense to place a blob core on!") - return 0 + return FALSE if(!pop_override && world.time <= manualplace_min_time && world.time <= autoplace_max_time) to_chat(src, "It is too early to place your blob core!") - return 0 + return FALSE else if(placement_override == 1) var/turf/T = pick(GLOB.blobstart) forceMove(T) //got overrided? you're somewhere random, motherfucker @@ -58,7 +58,7 @@ core.update_icon() update_health_hud() placed = 1 - return 1 + return TRUE /mob/camera/blob/verb/transport_core() set category = "Blob" diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index 086f3835a02..6336fa4c7a1 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -129,8 +129,8 @@ heal_timestamp = world.time + 20 update_icon() pulse_timestamp = world.time + 10 - return 1 //we did it, we were pulsed! - return 0 //oh no we failed + return TRUE//we did it, we were pulsed! + return FALSE //oh no we failed /obj/structure/blob/proc/ConsumeTile() for(var/atom/A in loc) @@ -163,7 +163,7 @@ else T = null if(!T) - return 0 + return var/make_blob = TRUE //can we make a blob? if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T) && prob(80)) @@ -193,10 +193,10 @@ blob_attack_animation(T, controller) T.blob_act(src) //if we can't move in hit the turf again qdel(B) //we should never get to this point, since we checked before moving in. destroy the blob so we don't have two blobs on one tile - return null + return else blob_attack_animation(T, controller) //if we can't, animate that we attacked - return null + return /obj/structure/blob/emp_act(severity) . = ..() diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index b9feb88dece..0801c30a09f 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -31,8 +31,8 @@ var/changelingID = "Changeling" var/geneticdamage = 0 var/was_absorbed = FALSE //if they were absorbed by another ling already. - var/isabsorbing = 0 - var/islinking = 0 + var/isabsorbing = FALSE + var/islinking = FALSE var/geneticpoints = 10 var/total_geneticspoints = 10 var/total_chem_storage = 75 @@ -210,12 +210,12 @@ if(canrespec) to_chat(owner.current, "We have removed our evolutions from this form, and are now ready to readapt.") reset_powers() - canrespec = 0 + canrespec = FALSE SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt") - return 1 + return TRUE else to_chat(owner.current, "You lack the power to readapt your evolutions!") - return 0 + return FALSE //Called in life() /datum/antagonist/changeling/proc/regenerate()//grants the HuD in life.dm @@ -276,7 +276,7 @@ if(verbose) to_chat(user, "[target] is not compatible with our biology.") return - return 1 + return TRUE /datum/antagonist/changeling/proc/create_profile(mob/living/carbon/human/H, protect = 0) @@ -348,8 +348,8 @@ var/datum/changelingprofile/removeprofile = get_profile_to_remove() if(removeprofile) stored_profiles -= removeprofile - return 1 - return 0 + return TRUE + return FALSE /datum/antagonist/changeling/proc/create_initial_profile() @@ -562,9 +562,9 @@ /datum/antagonist/changeling/roundend_report() var/list/parts = list() - var/changelingwin = 1 + var/changelingwin = TRUE if(!owner.current) - changelingwin = 0 + changelingwin = FALSE parts += printplayer(owner) @@ -579,7 +579,7 @@ parts += "Objective #[count]: [objective.explanation_text] Success!" else parts += "Objective #[count]: [objective.explanation_text] Fail." - changelingwin = 0 + changelingwin = FALSE count++ if(changelingwin) diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index c03f817b43e..4df63b04377 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -58,10 +58,10 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/proc/sting_action(mob/user, mob/target) SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) - return 0 + return FALSE /datum/action/changeling/proc/sting_feedback(mob/user, mob/target) - return 0 + return FALSE //Fairly important to remember to return 1 on success >.< @@ -91,7 +91,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/proc/can_be_used_by(mob/user) if(!user || QDELETED(user)) - return 0 + return FALSE if(!ishuman(user) && !ismonkey(user)) return FALSE if(req_human && !ishuman(user)) diff --git a/code/modules/antagonists/changeling/powers/headcrab.dm b/code/modules/antagonists/changeling/powers/headcrab.dm index 05bb3558a2e..22cad0e0b7e 100644 --- a/code/modules/antagonists/changeling/powers/headcrab.dm +++ b/code/modules/antagonists/changeling/powers/headcrab.dm @@ -38,6 +38,6 @@ I.forceMove(crab) crab.origin = M if(crab.origin) - crab.origin.active = 1 + crab.origin.active = TRUE crab.origin.transfer_to(crab) to_chat(crab, "You burst out of the remains of your former body in a shower of gore!") diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index dc2db854d48..0d73cc096f5 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -87,12 +87,13 @@ ..() /datum/action/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) - if(!..()) + . = ..() + if(!.) return if((HAS_TRAIT(target, TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 + return FALSE + return TRUE /datum/action/changeling/sting/transformation/sting_action(mob/user, mob/target) log_combat(user, target, "stung", "transformation sting", " new identity is '[selected_dna.dna.real_name]'") @@ -130,8 +131,8 @@ var/mob/living/L = target if((HAS_TRAIT(L, TRAIT_HUSK)) || !L.has_dna()) to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 + return FALSE + return TRUE /datum/action/changeling/sting/false_armblade/sting_action(mob/user, mob/target) log_combat(user, target, "stung", object="false armblade sting") diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 6ab1d073506..0b030b5e9fb 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -91,7 +91,7 @@ var/where = mob.equip_in_one_of_slots(T, slots) if(!where) to_chat(mob, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).") - return 0 + return FALSE else to_chat(mob, "You have a [item_name] in your [where].") if(where == "backpack") diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 525457fcbbb..7310dc225f5 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -141,7 +141,7 @@ /datum/action/innate/cult/master/IsAvailable() if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master) || GLOB.cult_narsie) - return 0 + return FALSE return ..() /datum/action/innate/cult/master/finalreck diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 17382d0e888..d7ff7ad1411 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -402,8 +402,8 @@ if(!current_charges) owner.visible_message("The runed shield around [owner] suddenly disappears!") owner.update_inv_wear_suit() - return 1 - return 0 + return TRUE + return FALSE /obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands) . = list() diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index f3865f348df..a51cd0bb8aa 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -230,12 +230,12 @@ structure_check() searches for nearby cultist structures required for the invoca for(var/M in invokers) to_chat(M, "You need at least two invokers to convert [convertee]!") log_game("Offer rune failed - tried conversion with one invoker") - return 0 + return FALSE if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed for(var/M in invokers) to_chat(M, "Something is shielding [convertee]'s mind!") log_game("Offer rune failed - convertee had anti-magic") - return 0 + return FALSE var/brutedamage = convertee.getBruteLoss() var/burndamage = convertee.getFireLoss() if(brutedamage || burndamage) @@ -258,7 +258,7 @@ structure_check() searches for nearby cultist structures required for the invoca H.cultslurring = 0 if(prob(1) || SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) H.say("You son of a bitch! I'm in.", forced = "That son of a bitch! They're in.") - return 1 + return TRUE /obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) var/mob/living/first_invoker = invokers[1] diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm index 1f5f68a39f7..0add4f4a825 100644 --- a/code/modules/antagonists/devil/devil.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -386,43 +386,43 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", if(iscarbon(body)) var/mob/living/carbon/H = body return H.reagents.has_reagent(/datum/reagent/water/holywater) - return 0 + return FALSE if(BANISH_COFFIN) return (body && istype(body.loc, /obj/structure/closet/crate/coffin)) if(BANISH_FORMALDYHIDE) if(iscarbon(body)) var/mob/living/carbon/H = body return H.reagents.has_reagent(/datum/reagent/toxin/formaldehyde) - return 0 + return FALSE if(BANISH_RUNES) if(body) for(var/obj/effect/decal/cleanable/crayon/R in range(0,body)) if (R.name == "rune") - return 1 - return 0 + return TRUE + return FALSE if(BANISH_CANDLES) if(body) var/count = 0 for(var/obj/item/candle/C in range(1,body)) count += C.lit if(count>=4) - return 1 - return 0 + return TRUE + return FALSE if(BANISH_DESTRUCTION) if(body) - return 0 - return 1 + return FALSE + return TRUE if(BANISH_FUNERAL_GARB) if(ishuman(body)) var/mob/living/carbon/human/H = body if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/misc/burial)) - return 1 - return 0 + return TRUE + return FALSE else for(var/obj/item/clothing/under/misc/burial/B in range(0,body)) if(B.loc == get_turf(B)) //Make sure it's not in someone's inventory or something. - return 1 - return 0 + return TRUE + return FALSE /datum/antagonist/devil/proc/hellish_resurrection(mob/living/body) message_admins("[key_name_admin(owner)] (true name is: [truename]) is resurrecting using hellish energy.") diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index a937c9c39de..eed7939a691 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -119,7 +119,7 @@ return ..() //flashes don't stop devils UNLESS it's their bane. /mob/living/carbon/true_devil/soundbang_act() - return 0 + return FALSE /mob/living/carbon/true_devil/get_ear_protection() return 2 @@ -146,7 +146,7 @@ /mob/living/carbon/true_devil/singularity_act() if(ascended) - return 0 + return FALSE return ..() //ATTACK GHOST IGNORING PARENT RETURN VALUE diff --git a/code/modules/antagonists/devil/true_devil/inventory.dm b/code/modules/antagonists/devil/true_devil/inventory.dm index a3d0dbdf582..b680a2c10e2 100644 --- a/code/modules/antagonists/devil/true_devil/inventory.dm +++ b/code/modules/antagonists/devil/true_devil/inventory.dm @@ -1,8 +1,7 @@ /mob/living/carbon/true_devil/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) - if(..()) + . = ..() + if(.) update_inv_hands() - return 1 - return 0 /mob/living/carbon/true_devil/update_inv_hands() //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_overlay should use the down sprite when facing down, left, or right, and the up sprite when facing up. diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm index d6a9d9ee728..f2afc164eb1 100644 --- a/code/modules/antagonists/morph/morph.dm +++ b/code/modules/antagonists/morph/morph.dm @@ -230,7 +230,7 @@ var/mob/dead/selected = pick_n_take(candidates) var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = 1 + player_mind.active = TRUE if(!GLOB.xeno_spawn) return MAP_ERROR var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(GLOB.xeno_spawn)) diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm index 3a1c8fec4d3..110673043ae 100644 --- a/code/modules/antagonists/ninja/ninja.dm +++ b/code/modules/antagonists/ninja/ninja.dm @@ -38,9 +38,9 @@ if(M.current && M.current.stat != DEAD) if(ishuman(M.current)) if(M.special_role) - possible_targets[M] = 0 //bad-guy + possible_targets[M] = FALSE //bad-guy else if(M.assigned_role in GLOB.command_positions) - possible_targets[M] = 1 //good-guy + possible_targets[M] = TRUE //good-guy var/list/possible_objectives = list(1,2,3,4) diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index 07a8f400276..475ed7ebbb7 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -223,7 +223,7 @@ /mob/living/simple_animal/revenant/death() if(!revealed || stasis) //Revenants cannot die if they aren't revealed //or are already dead - return 0 + return stasis = TRUE to_chat(src, "NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]...") notransform = TRUE diff --git a/code/modules/antagonists/slaughter/slaughterevent.dm b/code/modules/antagonists/slaughter/slaughterevent.dm index aeda14e67fd..8015b9d6a71 100644 --- a/code/modules/antagonists/slaughter/slaughterevent.dm +++ b/code/modules/antagonists/slaughter/slaughterevent.dm @@ -20,7 +20,7 @@ var/mob/dead/selected = pick_n_take(candidates) var/datum/mind/player_mind = new /datum/mind(selected.key) - player_mind.active = 1 + player_mind.active = TRUE var/list/spawn_locs = list() for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index d2979a59c91..7afcf80b6c8 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -20,7 +20,7 @@ var/spawn_amt = 1 var/activate_descriptor = "reality" var/rend_desc = "You should run now." - var/spawn_fast = 0 //if 1, ignores checking for mobs on loc before spawning + var/spawn_fast = FALSE //if TRUE, ignores checking for mobs on loc before spawning /obj/item/veilrender/attack_self(mob/user) if(charges > 0) @@ -39,7 +39,7 @@ anchored = TRUE var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies var/spawn_amt_left = 20 - var/spawn_fast = 0 + var/spawn_fast = FALSE /obj/effect/rend/New(loc, spawn_type, spawn_amt, desc, spawn_fast) src.spawn_path = spawn_type diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 4c199645448..d799ef67981 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -297,7 +297,7 @@ newstruct.cancel_camera() -/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, message_user = 0 , mob/shade_controller) +/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, message_user = FALSE, mob/shade_controller) if(!shade_controller) shade_controller = T new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 9b7eceb05be..d32f929861b 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -285,7 +285,7 @@ var/const/PROBABILITY_OFFSET = 25 var/const/PROBABILITY_BASE_PRECENT = 75 var/max_force = sqrt(pressure_difference)*(MOVE_FORCE_DEFAULT / 5) - set waitfor = 0 + set waitfor = FALSE var/move_prob = 100 if (pressure_resistance > 0) move_prob = (pressure_difference/pressure_resistance*PROBABILITY_BASE_PRECENT)-PROBABILITY_OFFSET diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index 5085442516f..9f5a5122c9a 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) /// Calculate pressure in kilopascals /datum/gas_mixture/proc/return_pressure() - if(volume > 0) // to prevent division by zero + if(volume) // to prevent division by zero var/cached_gases = gases TOTAL_MOLES(cached_gases, .) . *= R_IDEAL_GAS_EQUATION * temperature / volume @@ -132,12 +132,12 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) for(var/id in cached_gases) cached_gases[id][ARCHIVE] = cached_gases[id][MOLES] - return 1 + return TRUE ///Merges all air from giver into self. Deletes giver. Returns: 1 if we are mutable, 0 otherwise /datum/gas_mixture/proc/merge(datum/gas_mixture/giver) if(!giver) - return 0 + return FALSE //heat transfer if(abs(temperature - giver.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) @@ -154,7 +154,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) ASSERT_GAS(giver_id, src) cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES] - return 1 + return TRUE ///Proportionally removes amount of gas from the gas_mixture. ///Returns: gas_mixture with the gases removed diff --git a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm index dcea095d3cd..66ed5bc1c62 100644 --- a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm +++ b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm @@ -15,29 +15,29 @@ gases.Cut() /datum/gas_mixture/immutable/archive() - return 1 //nothing changes, so we do nothing and the archive is successful + return TRUE //nothing changes, so we do nothing and the archive is successful /datum/gas_mixture/immutable/merge() - return 0 //we're immutable. + return FALSE //we're immutable. /datum/gas_mixture/immutable/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) . = ..(sharer, 0) garbage_collect() /datum/gas_mixture/immutable/react() - return 0 //we're immutable. + return FALSE //we're immutable. /datum/gas_mixture/immutable/copy() return new type //we're immutable, so we can just return a new instance. /datum/gas_mixture/immutable/copy_from() - return 0 //we're immutable. + return FALSE //we're immutable. /datum/gas_mixture/immutable/copy_from_turf() - return 0 //we're immutable. + return FALSE //we're immutable. /datum/gas_mixture/immutable/parse_gas_string() - return 0 //we're immutable. + return FALSE //we're immutable. /datum/gas_mixture/immutable/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity) . = ..() diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index b1a3c907116..5faac36c2f3 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -448,16 +448,16 @@ /obj/machinery/airalarm/proc/shock(mob/user, prb) if((machine_stat & (NOPOWER))) // unpowered, no shock - return 0 + return FALSE if(!prob(prb)) - return 0 //you lucked out, no shock for you + return FALSE //you lucked out, no shock for you var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(5, 1, src) s.start() //sparks always. if (electrocute_mob(user, get_area(src), src, 1, TRUE)) - return 1 + return TRUE else - return 0 + return FALSE /obj/machinery/airalarm/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) @@ -466,7 +466,7 @@ /obj/machinery/airalarm/proc/send_signal(target, list/command, atom/user)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise if(!radio_connection) - return 0 + return FALSE var/datum/signal/signal = new(command) signal.data["tag"] = target @@ -474,7 +474,7 @@ signal.data["user"] = user radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) - return 1 + return TRUE /obj/machinery/airalarm/proc/get_mode_name(mode_value) switch(mode_value) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 4597c0cc401..db4b1dc8fd7 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -484,7 +484,7 @@ return // can't ventcrawl in or out of cryo. /obj/machinery/atmospherics/components/unary/cryo_cell/can_see_pipes() - return 0 // you can't see the pipe network when inside a cryo cell. + return FALSE // you can't see the pipe network when inside a cryo cell. /obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature() var/datum/gas_mixture/G = airs[1] diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 260c8a589dd..483d86b91aa 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -218,7 +218,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/receive_signal(datum/signal/signal) if(!is_operational || !signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) - return 0 + return var/atom/signal_sender = signal.data["user"] diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 17687f5f5d6..2a7f3602b47 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -55,18 +55,18 @@ /obj/machinery/meter/process_atmos() if(!(target?.flags_1 & INITIALIZED_1)) icon_state = "meterX" - return 0 + return FALSE if(machine_stat & (BROKEN|NOPOWER)) icon_state = "meter0" - return 0 + return FALSE use_power(5) var/datum/gas_mixture/environment = target.return_air() if(!environment) icon_state = "meterX" - return 0 + return FALSE var/env_pressure = environment.return_pressure() if(env_pressure <= 0.15*ONE_ATMOSPHERE) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index a8db804a537..55f39a55506 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -8,8 +8,8 @@ var/datum/pipeline/parent = null //Buckling - can_buckle = 1 - buckle_requires_restraints = 1 + can_buckle = TRUE + buckle_requires_restraints = TRUE buckle_lying = -1 /obj/machinery/atmospherics/pipe/New() diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index 0d8c5fcd0fe..2c93f33367e 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -62,9 +62,9 @@ /obj/singularity/academy - dissipate = 0 - move_self = 0 - grav_pull = 1 + dissipate = FALSE + move_self = FALSE + grav_pull = TRUE /obj/singularity/academy/admin_investigate_setup() return diff --git a/code/modules/awaymissions/mission_code/Cabin.dm b/code/modules/awaymissions/mission_code/Cabin.dm index 5194b7348e2..33dfa19b508 100644 --- a/code/modules/awaymissions/mission_code/Cabin.dm +++ b/code/modules/awaymissions/mission_code/Cabin.dm @@ -122,8 +122,8 @@ /datum/map_generator_module/snow/checkPlaceAtom(turf/T) if(istype(T, /turf/open/floor/plating/asteroid/snow)) - return ..(T) - return 0 + return ..() + return FALSE /datum/map_generator_module/bottomlayer/snow spawnableTurfs = list(/turf/open/floor/plating/asteroid/snow/atmosphere = 100) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index c13dda15ba0..4858ec39ddb 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -43,8 +43,7 @@ name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces." -// projectile_type = "/obj/projectile/practice" - clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face + clumsy_check = FALSE //No sense in having a harmless gun blow up in the clowns face //Syndicate sub-machine guns. /obj/item/gun/ballistic/automatic/c20r/sc_c20r @@ -68,7 +67,7 @@ /obj/item/gun/energy/laser/practice/sc_laser name = "Old laser" desc = "A once potent weapon, years of dust have collected in the chamber and lens of this weapon, weakening the beam significantly." - clumsy_check = 0 + clumsy_check = FALSE /* * Safe code hints diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 03fa982b2a1..923882a4f14 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -125,8 +125,8 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( /client/proc/is_content_unlocked() if(!prefs.unlock_content) to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Only 10 bucks for 3 months! Click Here to find out more.") - return 0 - return 1 + return FALSE + return TRUE /* * Call back proc that should be checked in all paths where a client can send messages * @@ -157,11 +157,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( total_message_count = 0 total_count_reset = 0 cmd_admin_mute(src, mute_type, 1) - return 1 + return TRUE //Otherwise just supress the message else if(cache >= SPAM_TRIGGER_AUTOMUTE) - return 1 + return TRUE if(CONFIG_GET(flag/automute_on) && !holder && last_message == message) @@ -169,21 +169,21 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(src.last_message_count >= SPAM_TRIGGER_AUTOMUTE) to_chat(src, "You have exceeded the spam filter limit for identical messages. An auto-mute was applied.") cmd_admin_mute(src, mute_type, 1) - return 1 + return TRUE if(src.last_message_count >= SPAM_TRIGGER_WARNING) to_chat(src, "You are nearing the spam filter limit for identical messages.") - return 0 + return FALSE else last_message = message src.last_message_count = 0 - return 0 + return FALSE //This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc. /client/AllowUpload(filename, filelength) if(filelength > UPLOAD_LIMIT) to_chat(src, "Error: AllowUpload(): File Upload too large. Upload Limit: [UPLOAD_LIMIT/1024]KiB.") - return 0 - return 1 + return FALSE + return TRUE /////////// @@ -333,7 +333,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( to_chat(src, "Because you are an admin, you are being allowed to walk past this limitation, But it is still STRONGLY suggested you upgrade") else qdel(src) - return 0 + return else if (byond_version < cwv) //We have words for this client. if(CONFIG_GET(flag/client_warn_popup)) var/msg = "Your version of byond may be getting out of date:
" @@ -353,11 +353,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if (!CONFIG_GET(flag/allow_webclient)) to_chat(src, "Web client is disabled") qdel(src) - return 0 + return if (CONFIG_GET(flag/webclient_only_byond_members) && !IsByondMember()) to_chat(src, "Sorry, but the web client is restricted to byond members only.") qdel(src) - return 0 + return if( (world.address == address || !address) && !GLOB.host ) GLOB.host = key diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 625e448c5d0..0cf9013d364 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -1,4 +1,4 @@ -/mob/var/suiciding = 0 +/mob/var/suiciding = FALSE /mob/proc/set_suicide(suicide_state) suiciding = suicide_state @@ -22,7 +22,7 @@ mmi.brainmob.suiciding = suicide_state /mob/living/carbon/human/verb/suicide() - set hidden = 1 + set hidden = TRUE if(!canSuicide()) return var/oldkey = ckey diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 20e557028f3..bce61a4adb1 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -38,4 +38,4 @@ // Called just before an attack_hand(), in mob/UnarmedAttack() /obj/item/clothing/gloves/proc/Touch(atom/A, proximity) - return 0 // return 1 to cancel attack_hand() + return FALSE // return 1 to cancel attack_hand() diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 76714b4b90a..77e52192d6c 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -120,7 +120,7 @@ icon_state = "ushankadown" inhand_icon_state = "ushankadown" flags_inv = HIDEEARS|HIDEHAIR - var/earflaps = 1 + var/earflaps = TRUE cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT @@ -128,15 +128,14 @@ /obj/item/clothing/head/ushanka/attack_self(mob/user) if(earflaps) - src.icon_state = "ushankaup" - src.inhand_icon_state = "ushankaup" - earflaps = 0 + icon_state = "ushankaup" + inhand_icon_state = "ushankaup" to_chat(user, "You raise the ear flaps on the ushanka.") else - src.icon_state = "ushankadown" - src.inhand_icon_state = "ushankadown" - earflaps = 1 + icon_state = "ushankadown" + inhand_icon_state = "ushankadown" to_chat(user, "You lower the ear flaps on the ushanka.") + earflaps = !earflaps /* * Pumpkin head diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index cfc90174c0b..80030e26cfa 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -7,11 +7,11 @@ dog_fashion = /datum/dog_fashion/head/cargo_tech - var/flipped = 0 + var/flipped = FALSE /obj/item/clothing/head/soft/dropped() icon_state = "[soft_type]soft" - flipped=0 + flipped = FALSE ..() /obj/item/clothing/head/soft/verb/flipcap() @@ -32,7 +32,7 @@ /obj/item/clothing/head/soft/proc/flip(mob/user) if(!user.incapacitated()) flipped = !flipped - if(src.flipped) + if(flipped) icon_state = "[soft_type]soft_flipped" to_chat(user, "You flip the hat backwards.") else diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 4fc0dc41d93..1ccb2c3c176 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -6,7 +6,7 @@ strip_delay = 40 equip_delay_other = 40 var/modifies_speech = FALSE - var/mask_adjusted = 0 + var/mask_adjusted = FALSE var/adjusted_flags = null /obj/item/clothing/mask/attack_self(mob/user) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 57d6a49e83a..ca8f591308e 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/clothing/shoes.dmi' desc = "Comfortable-looking shoes." gender = PLURAL //Carn: for grammarically correct text-parsing - var/chained = 0 + var/chained = FALSE body_parts_covered = FEET slot_flags = ITEM_SLOT_FEET diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 15fe1838b0f..c3ea63da314 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -3,7 +3,7 @@ name = "magboots" icon_state = "magboots0" var/magboot_state = "magboots" - var/magpulse = 0 + var/magpulse = FALSE var/slowdown_active = 2 permeability_coefficient = 0.05 actions_types = list(/datum/action/item_action/toggle) diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 4a612f9041e..383957b531e 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -30,10 +30,10 @@ var/obj/item/clothing/head/helmet/space/chronos/helmet var/obj/effect/chronos_cam/camera var/datum/action/innate/chrono_teleport/teleport_now = new - var/activating = 0 - var/activated = 0 + var/activating = FALSE + var/activated = FALSE var/cooldowntime = 50 //deciseconds - var/teleporting = 0 + var/teleporting = FALSE var/phase_timer_id /obj/item/clothing/suit/space/chronos/Initialize() @@ -96,7 +96,7 @@ user.animate_movement = FORWARD_STEPS user.notransform = 0 user.set_anchored(FALSE) - teleporting = 0 + teleporting = FALSE for(var/obj/item/I in user.held_items) REMOVE_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT) if(camera) @@ -204,7 +204,7 @@ to_chat(user, "FATAL: Unable to locate /dev/helm. Aborting...") teleport_now.Grant(user) cooldown = world.time + cooldowntime - activating = 0 + activating = FALSE /obj/item/clothing/suit/space/chronos/proc/deactivate(force = 0, silent = FALSE) if(activated && (!teleporting || force)) @@ -213,8 +213,8 @@ var/hard_landing = teleporting && force REMOVE_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT) cooldown = world.time + cooldowntime * 1.5 - activated = 0 - activating = 0 + activated = FALSE + activating = FALSE finish_chronowalk() if(user && ishuman(user)) teleport_now.Remove(user) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 3e5be8a6262..d9a54c34417 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -751,12 +751,8 @@ owner.visible_message("[owner]'s shield overloads!") shield_state = "broken" owner.update_inv_wear_suit() - return 1 - return 0 - - -/obj/item/clothing/suit/space/hardsuit/shielded/Destroy() - return ..() + return TRUE + return FALSE /obj/item/clothing/suit/space/hardsuit/shielded/process() . = ..() diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index fcd1633b03b..1a142c1045c 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -27,7 +27,7 @@ /obj/item/clothing/suit/armor/reactive name = "reactive armor" desc = "Doesn't seem to do much for some reason." - var/active = 0 + var/active = FALSE var/reactivearmor_cooldown_duration = 0 //cooldown specific to reactive armor var/reactivearmor_cooldown = 0 icon_state = "reactiveoff" @@ -55,7 +55,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - active = 0 + active = FALSE icon_state = "reactiveoff" inhand_icon_state = "reactiveoff" reactivearmor_cooldown = world.time + 200 @@ -70,12 +70,12 @@ /obj/item/clothing/suit/armor/reactive/teleport/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(!active) - return 0 + return FALSE if(prob(hit_reaction_chance)) var/mob/living/carbon/human/H = owner if(world.time < reactivearmor_cooldown) owner.visible_message("The reactive teleport system is still recharging! It fails to teleport [H]!") - return + return FALSE owner.visible_message("The reactive teleport system flings [H] clear of [attack_text], shutting itself off in the process!") playsound(get_turf(owner),'sound/magic/blink.ogg', 100, TRUE) var/list/turfs = new/list() @@ -95,8 +95,8 @@ H.forceMove(picked) H.rad_act(rad_amount) reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - return 0 + return TRUE + return FALSE //Fire @@ -106,11 +106,11 @@ /obj/item/clothing/suit/armor/reactive/fire/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(!active) - return 0 + return FALSE if(prob(hit_reaction_chance)) if(world.time < reactivearmor_cooldown) owner.visible_message("The reactive incendiary armor on [owner] activates, but fails to send out flames as it is still recharging its flame jets!") - return + return FALSE owner.visible_message("[src] blocks [attack_text], sending out jets of flame!") playsound(get_turf(owner),'sound/magic/fireball.ogg', 100, TRUE) for(var/mob/living/carbon/C in range(6, owner)) @@ -119,8 +119,8 @@ C.IgniteMob() owner.fire_stacks = -20 reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - return 0 + return TRUE + return FALSE //Stealth @@ -130,7 +130,7 @@ /obj/item/clothing/suit/armor/reactive/stealth/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(!active) - return 0 + return FALSE if(prob(hit_reaction_chance)) if(world.time < reactivearmor_cooldown) owner.visible_message("The reactive stealth system on [owner] activates, but is still recharging its holographic emitters!") @@ -143,7 +143,7 @@ owner.visible_message("[owner] is hit by [attack_text] in the chest!") //We pretend to be hit, since blocking it would stop the message otherwise addtimer(VARSET_CALLBACK(owner, alpha, initial(owner.alpha)), 4 SECONDS) reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 + return TRUE //Tesla @@ -189,11 +189,11 @@ /obj/item/clothing/suit/armor/reactive/repulse/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(!active) - return 0 + return FALSE if(prob(hit_reaction_chance)) if(world.time < reactivearmor_cooldown) owner.visible_message("The repulse generator is still recharging!") - return 0 + return FALSE playsound(get_turf(owner),'sound/magic/repulse.ogg', 100, TRUE) owner.visible_message("[src] blocks [attack_text], converting the attack into a wave of force!") var/turf/T = get_turf(owner) @@ -206,7 +206,7 @@ thrown_items[A] = A reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 + return TRUE /obj/item/clothing/suit/armor/reactive/table name = "reactive table armor" @@ -215,12 +215,12 @@ /obj/item/clothing/suit/armor/reactive/table/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(!active) - return 0 + return FALSE if(prob(hit_reaction_chance)) var/mob/living/carbon/human/H = owner if(world.time < reactivearmor_cooldown) owner.visible_message("The reactive table armor's fabricators are still on cooldown!") - return + return FALSE owner.visible_message("The reactive teleport system flings [H] clear of [attack_text] and slams [H.p_them()] into a fabricated table!") owner.visible_message("[H] GOES ON THE TABLE!!!") owner.Paralyze(40) @@ -241,8 +241,8 @@ H.forceMove(picked) new /obj/structure/table(get_turf(owner)) reactivearmor_cooldown = world.time + reactivearmor_cooldown_duration - return 1 - return 0 + return TRUE + return FALSE /obj/item/clothing/suit/armor/reactive/table/emp_act() return diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 4a8b62cc503..9149e1fd396 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -204,13 +204,13 @@ return if(has_sensor == LOCKED_SENSORS) to_chat(usr, "The controls are locked.") - return 0 + return if(has_sensor == BROKEN_SENSORS) to_chat(usr, "The sensors have shorted out!") - return 0 + return if(has_sensor <= NO_SENSORS) to_chat(usr, "This suit does not have any sensors.") - return 0 + return var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes @@ -235,8 +235,9 @@ H.update_suit_sensors() /obj/item/clothing/under/AltClick(mob/user) - if(..()) - return 1 + . = ..() + if(.) + return if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm index c79e4e1d0fe..04ee1dd5a8f 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm @@ -79,4 +79,3 @@ H.visible_message("[H]'s suit spews space lube everywhere!","Your suit spews space lube everywhere!") H.ExtinguishMob() new /obj/effect/particle_effect/foam(loc) //Truely terrifying. - return 0 diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index b9f141cd85e..ca6f58a5ab5 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -114,7 +114,6 @@ H.visible_message("[H]'s suit automatically extinguishes [H.p_them()]!","Your suit automatically extinguishes you.") H.ExtinguishMob() new /obj/effect/particle_effect/water(get_turf(H)) - return 0 /obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params) ..() diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index c35e5fee7a6..a38a5ed31b8 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -15,7 +15,7 @@ flags_1 = CONDUCT_1 item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT - var/scanning = 0 + var/scanning = FALSE var/list/log = list() var/range = 8 var/view_check = TRUE @@ -32,7 +32,7 @@ /obj/item/detective_scanner/attack_self(mob/user) if(log.len && !scanning) - scanning = 1 + scanning = TRUE to_chat(user, "Printing report, please wait...") addtimer(CALLBACK(src, .proc/PrintReport), 100) else @@ -61,7 +61,7 @@ // Clear the logs log = list() - scanning = 0 + scanning = FALSE /obj/item/detective_scanner/afterattack(atom/A, mob/user, params) . = ..() @@ -69,13 +69,13 @@ return FALSE /obj/item/detective_scanner/proc/scan(atom/A, mob/user) - set waitfor = 0 + set waitfor = FALSE if(!scanning) // Can remotely scan objects and mobs. if((get_dist(A, user) > range) || (!(A in view(range, user)) && view_check) || (loc != user)) return - scanning = 1 + scanning = TRUE user.visible_message("\The [user] points the [src.name] at \the [A] and performs a forensic scan.") to_chat(user, "You scan \the [A]. The scanner is now analysing the results...") @@ -120,7 +120,7 @@ // We gathered everything. Create a fork and slowly display the results to the holder of the scanner. - var/found_something = 0 + var/found_something = FALSE add_log("[station_time_timestamp()][get_timestamp()] - [target_name]", 0) // Fingerprints @@ -129,13 +129,13 @@ add_log("Prints:") for(var/finger in fingerprints) add_log("[finger]") - found_something = 1 + found_something = TRUE // Blood if (length(blood)) sleep(30) add_log("Blood:") - found_something = 1 + found_something = TRUE for(var/B in blood) add_log("Type: [blood[B]] DNA (UE): [B]") @@ -145,7 +145,7 @@ add_log("Fibers:") for(var/fiber in fibers) add_log("[fiber]") - found_something = 1 + found_something = TRUE //Reagents if(length(reagents)) @@ -153,7 +153,7 @@ add_log("Reagents:") for(var/R in reagents) add_log("Reagent: [R] Volume: [reagents[R]]") - found_something = 1 + found_something = TRUE // Get a new user var/mob/holder = null @@ -169,7 +169,7 @@ to_chat(holder, "You finish scanning \the [target_name].") add_log("---------------------------------------------------------", 0) - scanning = 0 + scanning = FALSE return /obj/item/detective_scanner/proc/add_log(msg, broadcast = 1) diff --git a/code/modules/events/devil.dm b/code/modules/events/devil.dm index 3760cbe05d9..6d9bb3a5065 100644 --- a/code/modules/events/devil.dm +++ b/code/modules/events/devil.dm @@ -26,11 +26,11 @@ var/mob/dead/selected_candidate = pick_n_take(candidates) var/key = selected_candidate.key - var/datum/mind/Mind = create_devil_mind(key) - Mind.active = 1 + var/datum/mind/mind = create_devil_mind(key) + mind.active = TRUE var/mob/living/carbon/human/devil = create_event_devil() - Mind.transfer_to(devil) + mind.transfer_to(devil) add_devil(devil, ascendable = FALSE) spawned_mobs += devil diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index db0eccf0c5c..a769bad1588 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -4,7 +4,7 @@ earliest_start = 10 MINUTES min_players = 5 weight = 20 - alert_observers = 0 + alert_observers = FALSE /datum/round_event/electrical_storm var/lightsoutAmount = 1 diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index 5b032f85f87..e68f5a0e3f5 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -24,8 +24,8 @@ return ..() && length(gather_false_events()) /datum/round_event/falsealarm - announceWhen = 0 - endWhen = 1 + announceWhen = 0 + endWhen = 1 fakeable = FALSE /datum/round_event/falsealarm/announce(fake) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index 783bc9d9ba7..8867157194b 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -120,7 +120,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 walk_towards(src, destination, 1) /obj/effect/immovablerod/ex_act(severity, target) - return 0 + return /obj/effect/immovablerod/singularity_act() return diff --git a/code/modules/events/operative.dm b/code/modules/events/operative.dm index 7fca4188b76..9e92364b89d 100644 --- a/code/modules/events/operative.dm +++ b/code/modules/events/operative.dm @@ -29,7 +29,7 @@ var/datum/mind/Mind = new /datum/mind(selected.key) Mind.assigned_role = "Lone Operative" Mind.special_role = "Lone Operative" - Mind.active = 1 + Mind.active = TRUE Mind.transfer_to(operative) Mind.add_antag_datum(/datum/antagonist/nukeop/lone) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 716fbd13e26..ad9eae0e278 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -106,11 +106,12 @@ /datum/round_event/portal_storm/proc/spawn_boss() if(!boss_types || !boss_types.len) - return 0 + return FALSE if(activeFor == next_boss_spawn) next_boss_spawn += CEILING(number_of_hostiles / number_of_bosses, 1) - return 1 + return TRUE + return FALSE /datum/round_event/portal_storm/proc/time_to_end() if(!hostile_types.len && !boss_types.len) diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index 82e72df3b9d..431c249bf19 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -12,7 +12,7 @@ if(!ishuman(M)) holder_canadates -= M if(!holder_canadates) //Very unlikely, but just in case - return 0 + return FALSE var/mob/living/carbon/human/H = pick(holder_canadates) new /obj/item/greentext(H.loc) diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 4dc24de4659..e8177822bf2 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -72,10 +72,10 @@ if(!reagents || !reagents.total_volume) to_chat(user, "None of [src] left, oh no!") - return 0 + return FALSE if(!canconsume(M, user)) - return 0 + return FALSE if(M == user) user.visible_message("[user] swallows some of the contents of \the [src].", \ @@ -92,7 +92,7 @@ log_combat(user, M, "fed", reagents.log_list()) reagents.trans_to(M, 10, transfered_by = user, methods = INGEST) playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE) - return 1 + return TRUE /obj/item/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity) . = ..() diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index c9929b20eb9..72e37f6079f 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -141,14 +141,14 @@ All foods are distributed among various categories. Use common sense. return FALSE if(!do_mob(user, M)) - return + return FALSE log_combat(user, M, "fed", reagents.log_list()) M.visible_message("[user] forces [M] to eat [src]!", \ "[user] forces you to eat [src]!") else to_chat(user, "[M] doesn't seem to have a mouth!") - return + return FALSE if(reagents) //Handle ingestion of the reagent. if(M.satiety > -200) @@ -163,7 +163,7 @@ All foods are distributed among various categories. Use common sense. checkLiked(fraction, M) return TRUE - return 0 + return FALSE /obj/item/reagent_containers/food/snacks/examine(mob/user) . = ..() @@ -179,29 +179,28 @@ All foods are distributed among various categories. Use common sense. . += "[src] was bitten multiple times!" /obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/storage)) - ..() // -> item/attackby() - return 0 + if(istype(W, /obj/item/storage))// -> item/attackby() + return ..() if(istype(W, /obj/item/reagent_containers/food/snacks)) var/obj/item/reagent_containers/food/snacks/S = W if(custom_food_type && ispath(custom_food_type)) if(S.w_class > WEIGHT_CLASS_SMALL) to_chat(user, "[S] is too big for [src]!") - return 0 + return FALSE if(!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(W, /obj/item/reagent_containers/food/snacks/cakeslice/custom)) to_chat(user, "[src] can't be filled with [S]!") - return 0 + return FALSE if(contents.len >= 20) to_chat(user, "You can't add more ingredients to [src]!") - return 0 + return FALSE var/obj/item/reagent_containers/food/snacks/customizable/C = new custom_food_type(get_turf(src)) C.initialize_custom_food(src, S, user) - return 0 + return FALSE if(user.a_intent != INTENT_DISARM) var/sharp = W.get_sharpness() return sharp && slice(sharp, W, user) else - ..() + return ..() //Called when you finish tablecrafting a snack. /obj/item/reagent_containers/food/snacks/CheckParts(list/parts_list, datum/crafting_recipe/food/R) diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 08e92760dc2..652176caa70 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -760,7 +760,7 @@ /obj/item/reagent_containers/food/snacks/canned/attack(mob/living/M, mob/user, def_zone) if (!is_drainable()) to_chat(user, "[src]'s lid hasn't been opened!") - return 0 + return FALSE return ..() /obj/item/reagent_containers/food/snacks/canned/beans diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 5f431f4cc7d..799f5223a4b 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -322,11 +322,11 @@ if(mm == 9) if(yy/4 == round(yy/4)) //Note: Won't work right on September 12th, 2200 (at least it's a Friday!) if(dd == 12) - return 1 + return TRUE else if(dd == 13) - return 1 - return 0 + return TRUE + return FALSE /datum/holiday/programmers/getStationPrefix() return pick("span>","DEBUG: ","null","/list","EVENT PREFIX NOT FOUND") //Portability diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 14b8cf3bc84..f4d3dd477ba 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -54,8 +54,8 @@ if(reagents) if(bitesize_mod) bitesize = 1 + round(reagents.total_volume / bitesize_mod) - return 1 - return 0 + return TRUE + return FALSE /obj/item/reagent_containers/food/snacks/grown/examine(user) . = ..() diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index fb794db0e76..565f3ac6d1a 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -44,8 +44,8 @@ /obj/item/grown/proc/add_juice() if(reagents) - return 1 - return 0 + return TRUE + return FALSE /obj/item/grown/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!..()) //was it caught by a mob? diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index ffed7d17489..6c8dfaae8dc 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -217,7 +217,7 @@ var/dat //Actual page content var/due_date = 0 //Game time in 1/10th seconds var/author //Who wrote the thing, can be changed by pen or PC. It is not automatically assigned - var/unique = 0 //0 - Normal book, 1 - Should not be treated as normal book, unable to be copied, unable to be modified + var/unique = FALSE //false - Normal book, true - Should not be treated as normal book, unable to be copied, unable to be modified var/title //The real name of the book. var/window_size = null // Specific window size for the book, i.e: "1920x1080", Size x Width diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 6c2db404e0f..72cc4c20a04 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -130,7 +130,7 @@ // Variety of overrides so the overlays don't get affected by weird things. /atom/movable/lighting_object/ex_act(severity) - return 0 + return /atom/movable/lighting_object/singularity_act() return diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index f9486a89776..eb464cc0ad7 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -181,13 +181,13 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) if(isliving(A)) var/mob/living/L = A if(L.stat != DEAD) - return 1 + return TRUE for(var/thing in A.GetAllContents()) if(isliving(A)) var/mob/living/L = A if(L.stat != DEAD) - return 1 - return 0 + return TRUE + return FALSE /obj/effect/extraction_holder/singularity_act() return diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index ebf6e1e2c0f..4de3dec7bbd 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -30,7 +30,7 @@ /obj/structure/flora/ash/proc/harvest(user) if(harvested) - return 0 + return FALSE var/rand_harvested = rand(harvest_amount_low, harvest_amount_high) if(rand_harvested) @@ -49,7 +49,7 @@ desc = harvested_desc harvested = TRUE addtimer(CALLBACK(src, .proc/regrow), rand(regrowth_time_low, regrowth_time_high)) - return 1 + return TRUE /obj/structure/flora/ash/proc/regrow() icon_state = base_icon diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm index 237ce7f9e7e..2cc7ae74708 100644 --- a/code/modules/mob/dead/new_player/login.dm +++ b/code/modules/mob/dead/new_player/login.dm @@ -6,7 +6,7 @@ client.set_db_player_flags() if(!mind) mind = new /datum/mind(key) - mind.active = 1 + mind.active = TRUE mind.current = src . = ..() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 527f0df3ae4..0825bc2be8f 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -108,10 +108,10 @@ /mob/dead/new_player/Topic(href, href_list[]) if(src != usr) - return 0 + return if(!client) - return 0 + return //Determines Relevent Population Cap var/relevant_cap @@ -124,7 +124,7 @@ if(href_list["show_preferences"]) client.prefs.ShowChoices(src) - return 1 + return TRUE if(href_list["ready"]) var/tready = text2num(href_list["ready"]) @@ -451,7 +451,7 @@ if(mind) if(transfer_after) mind.late_joiner = TRUE - mind.active = 0 //we wish to transfer the key manually + mind.active = FALSE //we wish to transfer the key manually mind.transfer_to(H) //won't transfer key since the mind is not active mind.original_character = H diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index c3af832fe70..79edeb9ff14 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -120,16 +120,16 @@ //Gets blood from mob to a container or other mob, preserving all data in it. /mob/living/proc/transfer_blood_to(atom/movable/AM, amount, forced) if(!blood_volume || !AM.reagents) - return 0 + return FALSE if(blood_volume < BLOOD_VOLUME_BAD && !forced) - return 0 + return FALSE if(blood_volume < amount) amount = blood_volume var/blood_id = get_blood_id() if(!blood_id) - return 0 + return FALSE blood_volume -= amount @@ -147,13 +147,13 @@ C.ForceContractDisease(D) if(!(blood_data["blood_type"] in get_safe_blood(C.dna.blood_type))) C.reagents.add_reagent(/datum/reagent/toxin, amount * 0.5) - return 1 + return TRUE C.blood_volume = min(C.blood_volume + round(amount, 0.1), BLOOD_VOLUME_MAX_LETHAL) - return 1 + return TRUE AM.reagents.add_reagent(blood_id, amount, blood_data, bodytemperature) - return 1 + return TRUE /mob/living/proc/get_blood_data(blood_id) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 25830066b9e..2faa23b800d 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -56,9 +56,9 @@ return // no eyes, no flashing /mob/living/brain/can_be_revived() - . = 1 if(!container || health <= HEALTH_THRESHOLD_DEAD) - return 0 + return FALSE + return TRUE /mob/living/brain/fully_replace_character_name(oldname,newname) ..() diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm index ff4b85bdcf5..4128235e45a 100644 --- a/code/modules/mob/living/brain/life.dm +++ b/code/modules/mob/living/brain/life.dm @@ -1,6 +1,5 @@ /mob/living/brain/Life() - set invisibility = 0 if (notransform) return if(!loc) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 8bc8f9eb40b..62c2e35faea 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -19,9 +19,9 @@ heat_protection = 0.5 // minor heat insulation - var/leaping = 0 + var/leaping = FALSE gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs - unique_name = 1 + unique_name = TRUE var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?") diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index be92b6d7089..9a98d00a892 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -54,8 +54,9 @@ In all, this is a lot like the monkey code. /N /mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M) - if(..()) //to allow surgery to return properly. - return 0 + . = ..() + if(.) //to allow surgery to return properly. + return FALSE switch(M.a_intent) if("help") @@ -64,11 +65,11 @@ In all, this is a lot like the monkey code. /N grabbedby(M) if ("harm") M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - return 1 + return TRUE if("disarm") M.do_attack_animation(src, ATTACK_EFFECT_DISARM) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M) @@ -133,4 +134,4 @@ In all, this is a lot like the monkey code. /N return 0 /mob/living/carbon/alien/acid_act(acidpwr, acid_volume) - return 0//aliens are immune to acid. + return FALSE//aliens are immune to acid. diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 1fc9e2853ea..4b175560a2d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -77,10 +77,10 @@ Doesn't work on other aliens/AI.*/ /obj/effect/proc_holder/alien/plant/fire(mob/living/carbon/user) if(locate(/obj/structure/alien/weeds/node) in get_turf(user)) to_chat(user, "There's already a weed node here!") - return 0 + return FALSE user.visible_message("[user] plants some alien weeds!") new/obj/structure/alien/weeds/node(user.loc) - return 1 + return TRUE /obj/effect/proc_holder/alien/whisper name = "Whisper" @@ -94,7 +94,7 @@ Doesn't work on other aliens/AI.*/ options += Ms var/mob/living/M = input("Select who to whisper to:","Whisper to?",null) as null|mob in sortNames(options) if(!M) - return 0 + return FALSE if(M.anti_magic_check(FALSE, FALSE, TRUE, 0)) to_chat(user, "As you try to communicate with [M], you're suddenly stopped by a vision of a massive tinfoil wall that streches beyond visible range. It seems you've been foiled.") return FALSE @@ -113,8 +113,8 @@ Doesn't work on other aliens/AI.*/ var/follow_link_whispee = FOLLOW_LINK(ded, M) to_chat(ded, "[follow_link_user] [user] Alien Whisper --> [follow_link_whispee] [M] [msg]") else - return 0 - return 1 + return FALSE + return TRUE /obj/effect/proc_holder/alien/transfer name = "Transfer Plasma" @@ -129,7 +129,7 @@ Doesn't work on other aliens/AI.*/ aliens_around.Add(A) var/mob/living/carbon/M = input("Select who to transfer to:","Transfer plasma to?",null) as mob in sortNames(aliens_around) if(!M) - return 0 + return var/amount = input("Amount:", "Transfer Plasma to [M]") as num|null if (amount) amount = min(abs(round(amount)), user.getPlasma()) @@ -158,21 +158,19 @@ Doesn't work on other aliens/AI.*/ if(target in oview(1,user)) if(target.acid_act(200, 100)) user.visible_message("[user] vomits globs of vile stuff all over [target]. It begins to sizzle and melt under the bubbling mess of acid!") - return 1 + return TRUE else to_chat(user, "You cannot dissolve this object.") + return FALSE - - return 0 - else - to_chat(src, "[target] is too far away.") - return 0 + to_chat(src, "[target] is too far away.") + return FALSE /obj/effect/proc_holder/alien/acid/fire(mob/living/carbon/alien/user) var/O = input("Select what to dissolve:","Dissolve",null) as obj|turf in oview(1,user) if(!O || user.incapacitated()) - return 0 + return FALSE else return corrode(O,user) @@ -208,19 +206,20 @@ Doesn't work on other aliens/AI.*/ action.UpdateButtonIcon() /obj/effect/proc_holder/alien/neurotoxin/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) + . = ..() + if(.) return var/p_cost = 50 if(!iscarbon(ranged_ability_user) || ranged_ability_user.stat) remove_ranged_ability() - return + return FALSE var/mob/living/carbon/user = ranged_ability_user if(user.getPlasma() < p_cost) to_chat(user, "You need at least [p_cost] plasma to spit.") remove_ranged_ability() - return + return FALSE var/turf/T = user.loc var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction @@ -315,14 +314,14 @@ Doesn't work on other aliens/AI.*/ /mob/living/carbon/proc/adjustPlasma(amount) var/obj/item/organ/alien/plasmavessel/vessel = getorgan(/obj/item/organ/alien/plasmavessel) if(!vessel) - return 0 + return FALSE vessel.storedPlasma = max(vessel.storedPlasma + amount,0) vessel.storedPlasma = min(vessel.storedPlasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0 for(var/X in abilities) var/obj/effect/proc_holder/alien/APH = X if(APH.has_action) APH.action.UpdateButtonIcon() - return 1 + return TRUE /mob/living/carbon/alien/adjustPlasma(amount) . = ..() @@ -331,6 +330,5 @@ Doesn't work on other aliens/AI.*/ /mob/living/carbon/proc/usePlasma(amount) if(getPlasma() >= amount) adjustPlasma(-amount) - return 1 - - return 0 + return TRUE + return FALSE diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index d9ae677ab49..5b6f36c2f3e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -26,18 +26,18 @@ var/obj/item/organ/alien/hivenode/node = user.getorgan(/obj/item/organ/alien/hivenode) if(!node) //Players are Murphy's Law. We may not expect there to ever be a living xeno with no hivenode, but they _WILL_ make it happen. to_chat(user, "Without the hivemind, you can't possibly hold the responsibility of leadership!") - return 0 + return FALSE if(node.recent_queen_death) to_chat(user, "Your thoughts are still too scattered to take up the position of leadership.") - return 0 + return FALSE if(!isturf(user.loc)) to_chat(user, "You can't evolve here!") - return 0 + return FALSE if(!get_alien_type(/mob/living/carbon/alien/humanoid/royal)) var/mob/living/carbon/alien/humanoid/royal/praetorian/new_xeno = new (user.loc) user.alien_evolve(new_xeno) - return 1 + return TRUE else to_chat(user, "We already have a living royal!") - return 0 + return FALSE diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm index bb6e22d7196..86038c84f5d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm @@ -29,14 +29,14 @@ var/obj/item/organ/alien/hivenode/node = user.getorgan(/obj/item/organ/alien/hivenode) if(!node) //Just in case this particular Praetorian gets violated and kept by the RD as a replacement for Lamarr. to_chat(user, "Without the hivemind, you would be unfit to rule as queen!") - return 0 + return FALSE if(node.recent_queen_death) to_chat(user, "You are still too burdened with guilt to evolve into a queen.") - return 0 + return FALSE if(!get_alien_type(/mob/living/carbon/alien/humanoid/royal/queen)) var/mob/living/carbon/alien/humanoid/royal/queen/new_xeno = new (user.loc) user.alien_evolve(new_xeno) - return 1 + return TRUE else to_chat(user, "We already have an alive queen!") - return 0 + return FALSE diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index acc833f89fb..2ae3f7fbf09 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -13,7 +13,7 @@ var/alt_inhands_file = 'icons/mob/alienqueen.dmi' /mob/living/carbon/alien/humanoid/royal/can_inject() - return 0 + return FALSE /mob/living/carbon/alien/humanoid/royal/queen name = "alien queen" @@ -83,20 +83,20 @@ var/obj/item/queenpromote/prom if(get_alien_type(/mob/living/carbon/alien/humanoid/royal/praetorian/)) to_chat(user, "You already have a Praetorian!") - return 0 + return else for(prom in user) to_chat(user, "You discard [prom].") qdel(prom) - return 0 + return prom = new (user.loc) if(!user.put_in_active_hand(prom, 1)) to_chat(user, "You must empty your hands before preparing the parasite.") - return 0 + return else //Just in case telling the player only once is not enough! to_chat(user, "Use the royal parasite on one of your children to promote her to Praetorian!") - return 0 + return /obj/item/queenpromote name = "\improper royal parasite" diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index fe53dfa7177..4b7bd676771 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -1,7 +1,6 @@ /mob/living/carbon/alien/larva/Life() - set invisibility = 0 if (notransform) return if(..() && !IS_IN_STASIS(src)) //not dead and not in stasis diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index f7a4e2133ca..85a9b7746bf 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -57,7 +57,7 @@ new_xeno = new /mob/living/carbon/alien/humanoid/drone(L.loc) L.alien_evolve(new_xeno) - return 0 + return else to_chat(user, "You are not fully grown!") - return 0 + return diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index d89945195b8..3e9becdddb6 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -103,7 +103,8 @@ zone = BODY_ZONE_HEAD slot = "hivenode" w_class = WEIGHT_CLASS_TINY - var/recent_queen_death = 0 //Indicates if the queen died recently, aliens are heavily weakened while this is active. + ///Indicates if the queen died recently, aliens are heavily weakened while this is active. + var/recent_queen_death = FALSE alien_powers = list(/obj/effect/proc_holder/alien/whisper) /obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0) @@ -135,7 +136,7 @@ owner.add_confusion(30) owner.stuttering += 30 - recent_queen_death = 1 + recent_queen_death = TRUE owner.throw_alert("alien_noqueen", /obj/screen/alert/alien_vulnerable) addtimer(CALLBACK(src, .proc/clear_queen_death), QUEEN_DEATH_DEBUFF_DURATION) @@ -143,7 +144,7 @@ /obj/item/organ/alien/hivenode/proc/clear_queen_death() if(QDELETED(src)) //In case the node is deleted return - recent_queen_death = 0 + recent_queen_death = FALSE if(!owner) //In case the xeno is butchered or subjected to surgery after death. return to_chat(owner, "The pain of the queen's death is easing. You begin to hear the hivemind again.") diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index c636427ef9d..444c3156ba3 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -96,15 +96,14 @@ /obj/item/clothing/mask/facehugger/on_found(mob/finder) if(stat == CONSCIOUS) return HasProximity(finder) - return 0 /obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM as mob|obj) if(CanHug(AM) && Adjacent(AM)) return Leap(AM) - return 0 /obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, quickstart = TRUE) - if(!..()) + . = ..() + if(!.) return if(stat == CONSCIOUS) icon_state = "[initial(icon_state)]_thrown" @@ -248,22 +247,22 @@ /proc/CanHug(mob/living/M) if(!istype(M)) - return 0 + return FALSE if(M.stat == DEAD) - return 0 + return FALSE if(M.getorgan(/obj/item/organ/alien/hivenode)) - return 0 + return FALSE if(ismonkey(M)) - return 1 + return TRUE var/mob/living/carbon/C = M if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip)) var/mob/living/carbon/human/H = C if(H.is_mouth_covered(head_only = 1)) - return 0 - return 1 - return 0 + return FALSE + return TRUE + return FALSE #undef MIN_ACTIVE_TIME #undef MAX_ACTIVE_TIME diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 444746b6476..9d2a67c94fa 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -871,7 +871,7 @@ /mob/living/carbon/can_be_revived() . = ..() if(!getorgan(/obj/item/organ/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling))) - return 0 + return FALSE /mob/living/carbon/proc/can_defib() if (suiciding) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index e4d04473bf3..5d6074bd200 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -24,9 +24,9 @@ if (back) . += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back." - var/appears_dead = 0 + var/appears_dead = FALSE if (stat == DEAD) - appears_dead = 1 + appears_dead = TRUE if(getorgan(/obj/item/organ/brain)) . += "[t_He] [t_is] limp and unresponsive, with no signs of life." else if(get_bodypart(BODY_ZONE_HEAD)) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 13c8f37e926..acd8cffddd2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -167,7 +167,7 @@ /mob/living/carbon/human/attacked_by(obj/item/I, mob/living/user) if(!I || !user) - return 0 + return FALSE var/obj/item/bodypart/affecting if(user == src) @@ -212,7 +212,7 @@ affecting = get_bodypart(BODY_ZONE_CHEST) if(M.a_intent == INTENT_HELP) ..() //shaking - return 0 + return FALSE if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stunned instead. var/obj/item/I = get_active_held_item() @@ -243,110 +243,115 @@ if(..()) //successful monkey bite, this handles disease contraction. var/damage = rand(1, 3) if(check_shields(M, damage, "the [M.name]")) - return 0 + return FALSE if(stat != DEAD) apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, MELEE)) - return 1 + return TRUE /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M) if(check_shields(M, 0, "the M.name")) visible_message("[M] attempts to touch [src]!", \ "[M] attempts to touch you!", "You hear a swoosh!", null, M) to_chat(M, "You attempt to touch [src]!") - return 0 + return FALSE + . = ..() + if(!.) + return + if(M.a_intent == INTENT_HARM) + if (w_uniform) + w_uniform.add_fingerprint(M) + var/damage = prob(90) ? 20 : 0 + if(!damage) + playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE, -1) + visible_message("[M] lunges at [src]!", \ + "[M] lunges at you!", "You hear a swoosh!", null, M) + to_chat(M, "You lunge at [src]!") + return FALSE + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor_block = run_armor_check(affecting, MELEE,"","",10) - if(..()) - if(M.a_intent == INTENT_HARM) - if (w_uniform) - w_uniform.add_fingerprint(M) - var/damage = prob(90) ? 20 : 0 - if(!damage) - playsound(loc, 'sound/weapons/slashmiss.ogg', 50, TRUE, -1) - visible_message("[M] lunges at [src]!", \ - "[M] lunges at you!", "You hear a swoosh!", null, M) - to_chat(M, "You lunge at [src]!") - return 0 - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor_block = run_armor_check(affecting, MELEE,"","",10) + playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) + visible_message("[M] slashes at [src]!", \ + "[M] slashes at you!", "You hear a sickening sound of a slice!", null, M) + to_chat(M, "You slash at [src]!") + log_combat(M, src, "attacked") + if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful + return TRUE + apply_damage(damage, BRUTE, affecting, armor_block) - playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) - visible_message("[M] slashes at [src]!", \ - "[M] slashes at you!", "You hear a sickening sound of a slice!", null, M) - to_chat(M, "You slash at [src]!") - log_combat(M, src, "attacked") - if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful - return 1 - apply_damage(damage, BRUTE, affecting, armor_block) - - if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead. - var/obj/item/I = get_active_held_item() - if(I && dropItemToGround(I)) - playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) - visible_message("[M] disarms [src]!", \ - "[M] disarms you!", "You hear aggressive shuffling!", null, M) - to_chat(M, "You disarm [src]!") - else - playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) - Paralyze(100) - log_combat(M, src, "tackled") - visible_message("[M] tackles [src] down!", \ - "[M] tackles you down!", "You hear aggressive shuffling followed by a loud thud!", null, M) - to_chat(M, "You tackle [src] down!") + if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead. + var/obj/item/I = get_active_held_item() + if(I && dropItemToGround(I)) + playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) + visible_message("[M] disarms [src]!", \ + "[M] disarms you!", "You hear aggressive shuffling!", null, M) + to_chat(M, "You disarm [src]!") + else + playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) + Paralyze(100) + log_combat(M, src, "tackled") + visible_message("[M] tackles [src] down!", \ + "[M] tackles you down!", "You hear aggressive shuffling followed by a loud thud!", null, M) + to_chat(M, "You tackle [src] down!") /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L) - - if(..()) //successful larva bite. - var/damage = rand(1, 3) - if(check_shields(L, damage, "the [L.name]")) - return 0 - if(stat != DEAD) - L.amount_grown = min(L.amount_grown + damage, L.max_grown) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor_block = run_armor_check(affecting, MELEE) - apply_damage(damage, BRUTE, affecting, armor_block) + . = ..() + if(!.) + return //successful larva bite. + var/damage = rand(1, 3) + if(check_shields(L, damage, "the [L.name]")) + return FALSE + if(stat != DEAD) + L.amount_grown = min(L.amount_grown + damage, L.max_grown) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(L.zone_selected)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor_block = run_armor_check(affecting, MELEE) + apply_damage(damage, BRUTE, affecting, armor_block) /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) . = ..() - if(.) - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - if(check_shields(M, damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration)) - return FALSE - var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return TRUE - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration) - apply_damage(damage, M.melee_damage_type, affecting, armor, wound_bonus = M.wound_bonus, bare_wound_bonus = M.bare_wound_bonus, sharpness = M.sharpness) + if(!.) + return + var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) + if(check_shields(M, damage, "the [M.name]", MELEE_ATTACK, M.armour_penetration)) + return FALSE + var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + if(!dam_zone) //Dismemberment successful + return TRUE + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration) + apply_damage(damage, M.melee_damage_type, affecting, armor, wound_bonus = M.wound_bonus, bare_wound_bonus = M.bare_wound_bonus, sharpness = M.sharpness) /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - var/damage = rand(5, 25) - var/wound_mod = -45 // 25^1.4=90, 90-45=45 - if(M.is_adult) - damage = rand(10, 35) - wound_mod = -90 // 35^1.4=145, 145-90=55 + . = ..() + if(!.) // slime attack failed + return + var/damage = rand(5, 25) + var/wound_mod = -45 // 25^1.4=90, 90-45=45 + if(M.is_adult) + damage = rand(10, 35) + wound_mod = -90 // 35^1.4=145, 145-90=55 - if(check_shields(M, damage, "the [M.name]")) - return 0 + if(check_shields(M, damage, "the [M.name]")) + return FALSE - var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - if(!dam_zone) //Dismemberment successful - return 1 + var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + if(!dam_zone) //Dismemberment successful + return TRUE - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - if(!affecting) - affecting = get_bodypart(BODY_ZONE_CHEST) - var/armor_block = run_armor_check(affecting, MELEE) - apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) + if(!affecting) + affecting = get_bodypart(BODY_ZONE_CHEST) + var/armor_block = run_armor_check(affecting, MELEE) + apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 9ae1c576ae9..3c197bb32f5 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -9,7 +9,7 @@ possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM) pressure_resistance = 25 can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID blocks_emissive = EMISSIVE_BLOCK_UNIQUE can_be_shoved_into = TRUE diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index a5a6f432f80..5948b7fa931 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -11,14 +11,14 @@ /mob/living/carbon/human/slip(knockdown_amount, obj/O, lube, paralyze, forcedrop) if(HAS_TRAIT(src, TRAIT_NOSLIPALL)) - return 0 + return FALSE if (!(lube & GALOSHES_DONT_HELP)) if(HAS_TRAIT(src, TRAIT_NOSLIPWATER)) - return 0 + return FALSE if(shoes && istype(shoes, /obj/item/clothing)) var/obj/item/clothing/CS = shoes if (CS.clothing_flags & NOSLIP) - return 0 + return FALSE if (lube & SLIDE_ICE) if(shoes && istype(shoes, /obj/item/clothing)) var/obj/item/clothing/CS = shoes diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 2ff1204844a..8d54ed84e92 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -60,8 +60,8 @@ /mob/living/carbon/human/radio(message, list/message_mods = list(), list/spans, language) //Poly has a copy of this, lazy bastard . = ..() - if(. != FALSE) - return . + if(.) + return if(message_mods[MODE_HEADSET]) if(ears) @@ -76,7 +76,7 @@ ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) return ITALICS | REDUCE_RANGE - return 0 + return FALSE /mob/living/carbon/human/get_alt_name() if(name != GetVoice()) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 70bf9cce8fa..bc9a69097ca 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -19,14 +19,13 @@ #define THERMAL_PROTECTION_HAND_RIGHT 0.025 /mob/living/carbon/human/Life() - set invisibility = 0 if (notransform) return . = ..() if (QDELETED(src)) - return 0 + return FALSE if(!IS_IN_STASIS(src)) if(.) //not dead @@ -49,7 +48,7 @@ name = get_visible_name() if(stat != DEAD) - return 1 + return TRUE /mob/living/carbon/human/calculate_affecting_pressure(pressure) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1a235723b76..9abdbf353eb 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -240,20 +240,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/copy_properties_from(datum/species/old_species) return -/** - * Checks if this carbon is allowed to be a certain job or rank. - * - * Override this locally if you want to define when this species qualifies for what rank if human authority is enforced. - * Arguments: - * * rank - Rank to be tested. - * * features - Features of a species that factors into rank qualifications, like a human with cat ears being unable to join command positions. - */ -/datum/species/proc/qualifies_for_rank(rank, list/features) - if(rank in GLOB.command_positions) - return 0 - return 1 - - /** regenerate_organs * Corrects organs in a carbon, removing ones it doesn't need and adding ones it does * @@ -1185,7 +1171,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.throw_alert("nutrition", /obj/screen/alert/starving) /datum/species/proc/update_health_hud(mob/living/carbon/human/H) - return 0 + return FALSE /datum/species/proc/handle_mutations_and_radiation(mob/living/carbon/human/H) if(HAS_TRAIT(H, TRAIT_RADIMMUNE)) @@ -1382,7 +1368,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.visible_message("[M] attempts to touch [H]!", \ "[M] attempts to touch you!", "You hear a swoosh!", COMBAT_MESSAGE_RANGE, M) to_chat(M, "You attempt to touch [H]!") - return 0 + return SEND_SIGNAL(M, COMSIG_MOB_ATTACK_HAND, M, H, attacker_style) switch(M.a_intent) if("help") @@ -1401,11 +1387,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) // Allows you to put in item-specific reactions based on species if(user != H) if(H.check_shields(I, I.force, "the [I.name]", MELEE_ATTACK, I.armour_penetration)) - return 0 + return FALSE if(H.check_block()) H.visible_message("[H] blocks [I]!", \ "You block [I]!") - return 0 + return FALSE var/hit_area if(!affecting) //Something went wrong. Maybe the limb is missing? @@ -1428,14 +1414,14 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.send_item_attack_message(I, user, hit_area, affecting) if(!I.force) - return 0 //item force is zero + return FALSE //item force is zero - var/bloody = 0 + var/bloody = FALSE if(((I.damtype == BRUTE) && I.force && prob(25 + (I.force * 2)))) if(affecting.status == BODYPART_ORGANIC) I.add_mob_blood(H) //Make the weapon bloody, not the person. if(prob(I.force * 2)) //blood spatter! - bloody = 1 + bloody = TRUE var/turf/location = H.loc if(istype(location)) H.add_splatter_floor(location) diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index 39a014c6670..15a76493df0 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -15,9 +15,6 @@ var/original_felinid = TRUE //set to false for felinids created by mass-purrbation payday_modifier = 0.75 -/datum/species/human/felinid/qualifies_for_rank(rank, list/features) - return TRUE - //Curiosity killed the cat's wagging tail. /datum/species/human/felinid/spec_death(gibbed, mob/living/carbon/human/H) if(H) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 339e50de207..b1d3c9a5951 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -471,10 +471,12 @@ var/last_teleport = 0 /datum/action/innate/unstable_teleport/IsAvailable() - if(..()) - if(world.time > last_teleport + cooldown) - return 1 - return 0 + . = ..() + if(!.) + return + if(world.time > last_teleport + cooldown) + return TRUE + return FALSE /datum/action/innate/unstable_teleport/Activate() var/mob/living/carbon/human/H = owner diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index 2c80700c589..fce8d234aa4 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -10,6 +10,3 @@ liked_food = JUNKFOOD | FRIED changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT payday_modifier = 1 - -/datum/species/human/qualifies_for_rank(rank, list/features) - return TRUE //Pure humans are always allowed in all roles. 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 e51f0a1658e..1f4f8ca1f66 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -73,14 +73,15 @@ background_icon_state = "bg_alien" /datum/action/innate/regenerate_limbs/IsAvailable() - 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+40) - return 1 - return 0 + . = ..() + if(!.) + return + var/mob/living/carbon/human/H = owner + var/list/limbs_to_heal = H.get_missing_limbs() + if(limbs_to_heal.len < 1) + return FALSE + if(H.blood_volume >= BLOOD_VOLUME_OKAY+40) + return TRUE /datum/action/innate/regenerate_limbs/Activate() var/mob/living/carbon/human/H = owner @@ -182,11 +183,13 @@ background_icon_state = "bg_alien" /datum/action/innate/split_body/IsAvailable() - if(..()) - var/mob/living/carbon/human/H = owner - if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) - return 1 - return 0 + . = ..() + if(!.) + return + var/mob/living/carbon/human/H = owner + if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) + return TRUE + return FALSE /datum/action/innate/split_body/Activate() var/mob/living/carbon/human/H = owner diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index bea6545a86c..b70c3b6c90c 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -158,7 +158,6 @@ H.equipOutfit(O, visualsOnly) H.internal = H.get_item_for_held_index(2) H.update_internals_hud_icon(1) - return 0 /datum/species/plasmaman/random_name(gender,unique,lastname) if(unique) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 23677909bb3..82fee6cbabb 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,5 +1,4 @@ /mob/living/carbon/Life() - set invisibility = 0 if(notransform) return @@ -137,9 +136,9 @@ //Third link in a breath chain, calls handle_breath_temperature() /mob/living/carbon/proc/check_breath(datum/gas_mixture/breath) if(status_flags & GODMODE) - return + return FALSE if(HAS_TRAIT(src, TRAIT_NOBREATH)) - return + return FALSE var/obj/item/organ/lungs = getorganslot(ORGAN_SLOT_LUNGS) if(!lungs) @@ -148,12 +147,12 @@ //CRIT if(!breath || (breath.total_moles() == 0) || !lungs) if(reagents.has_reagent(/datum/reagent/medicine/epinephrine, needs_metabolizing = TRUE) && lungs) - return + return FALSE adjustOxyLoss(1) failed_last_breath = 1 throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - return 0 + return FALSE var/safe_oxy_min = 16 var/safe_co2_max = 10 @@ -305,7 +304,7 @@ //BREATH TEMPERATURE handle_breath_temperature(breath) - return 1 + return TRUE //Fourth and final link in a breath chain /mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath) diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index f31bbd45cf4..cafc5ab2d5a 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -27,7 +27,7 @@ // taken from /mob/living/carbon/human/interactive/ /mob/living/carbon/monkey/proc/walk2derpless(target) if(!target || IsStandingStill()) - return 0 + return FALSE if(myPath.len <= 0) myPath = get_path_to(src, get_turf(target), /turf/proc/Distance, MAX_RANGE_FIND + 1, 250,1) @@ -39,26 +39,26 @@ if(myPath.len >= 1) walk_to(src,myPath[1],0,5) myPath -= myPath[1] - return 1 + return TRUE // failed to path correctly so just try to head straight for a bit walk_to(src,get_turf(target),0,5) sleep(1) walk_to(src,0) - return 0 + return FALSE // taken from /mob/living/carbon/human/interactive/ /mob/living/carbon/monkey/proc/IsDeadOrIncap(checkDead = TRUE) if(!(mobility_flags & MOBILITY_FLAGS_INTERACTION)) - return 1 + return TRUE if(health <= 0 && checkDead) - return 1 + return TRUE if(IsStun() || IsParalyzed()) - return 1 + return TRUE if(stat) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/monkey/proc/battle_screech() if(next_battle_screech < world.time) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index f156aa27f37..a52fa0bb75a 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -4,8 +4,6 @@ /mob/living/carbon/monkey/Life() - set invisibility = 0 - if (notransform) return diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 052a94f2897..7cce89593b4 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -3,7 +3,6 @@ /mob/living/proc/Life(seconds, times_fired) set waitfor = FALSE - set invisibility = 0 if((movement_type & FLYING) && !(movement_type & FLOATING)) //TODO: Better floating float(on = TRUE) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 48cb75d14a2..644a6a6de44 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -140,7 +140,7 @@ //switch our position with M if(loc && !loc.Adjacent(M.loc)) return TRUE - now_pushing = 1 + now_pushing = TRUE var/oldloc = loc var/oldMloc = M.loc @@ -160,7 +160,7 @@ if(!M_passmob) M.pass_flags &= ~PASSMOB - now_pushing = 0 + now_pushing = FALSE if(!move_failed) return TRUE @@ -1132,7 +1132,7 @@ /mob/living/proc/ExtinguishMob() if(on_fire) - on_fire = 0 + on_fire = FALSE fire_stacks = 0 for(var/obj/effect/dummy/lighting_obj/moblight/fire/F in src) qdel(F) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 68981a88f57..f18eba989b7 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -174,12 +174,12 @@ if(GRAB_NECK) log_combat(user, src, "attempted to strangle", addition="kill grab") if(!do_mob(user, src, grab_upgrade_time)) - return 0 + return FALSE if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state) - return 0 + return FALSE if(user.a_intent != INTENT_GRAB) to_chat(user, "You must be on grab intent to upgrade your grab further!") - return 0 + return FALSE user.setGrabState(user.grab_state + 1) switch(user.grab_state) if(GRAB_AGGRESSIVE) @@ -213,7 +213,7 @@ if(!buckled && !density) Move(user.loc) user.set_pull_offsets(src, grab_state) - return 1 + return TRUE /mob/living/attack_slime(mob/living/simple_animal/slime/M) @@ -425,7 +425,7 @@ //called when the mob receives a loud bang /mob/living/proc/soundbang_act() - return 0 + return FALSE //to damage the clothes worn by a mob /mob/living/proc/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 12dd07ae98a..ca5296cdffc 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -2,5 +2,5 @@ update_z(null) ..() if(!key && mind) //key and mind have become separated. - mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. + mind.active = FALSE //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. med_hud_set_status() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 5dfdc397cae..3f436e36708 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -789,7 +789,7 @@ to_chat(user, "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.") /mob/living/silicon/ai/can_buckle() - return 0 + return FALSE /mob/living/silicon/ai/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, ignore_stasis = FALSE) if(aiRestorePowerRoutine) diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index 1714bc5f86d..2c53448f096 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -24,8 +24,8 @@ if (stat != DEAD) adjustBruteLoss(60) updatehealth() - return 1 - return 0 + return TRUE + return FALSE /mob/living/silicon/ai/emp_act(severity) . = ..() diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 82444a8e4ed..1b1f4e400b4 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -148,8 +148,8 @@ SEND_SOUND(M, voice) else SEND_SOUND(only_listener, voice) - return 1 - return 0 + return TRUE + return FALSE #undef VOX_DELAY #endif diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 4cc0fb92c54..a54f8259252 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -114,7 +114,7 @@ return TRUE /mob/camera/ai_eye/Move() - return 0 + return /mob/camera/ai_eye/proc/GetViewerClient() if(ai) diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index 35d4f2d960f..acf766c3429 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -12,7 +12,7 @@ /datum/pai_candidate/proc/savefile_save(mob/user) if(IsGuestKey(user.key)) - return 0 + return FALSE var/savefile/F = new /savefile(src.savefile_path(user)) @@ -24,7 +24,7 @@ WRITE_FILE(F["version"], 1) - return 1 + return TRUE // loads the savefile corresponding to the mob's ckey // if silent=true, report incompatible savefiles diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index b4362d0137a..cd9bbf37920 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -11,7 +11,7 @@ return ..() -/mob/living/silicon/robot/show_laws(everyone = 0) +/mob/living/silicon/robot/show_laws(everyone = FALSE) laws_sanity_check() var/who @@ -29,7 +29,7 @@ to_chat(src, "Laws synced with AI, be sure to note any changes.") else to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") - lawupdate = 0 + lawupdate = FALSE to_chat(who, "Obey these laws:") laws.show_laws(who) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index d51a332655c..8cf67247ba0 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,5 +1,4 @@ /mob/living/silicon/robot/Life() - set invisibility = 0 if (src.notransform) return @@ -11,7 +10,7 @@ if(stat != DEAD) if(low_power_mode) if(cell && cell.charge) - low_power_mode = 0 + low_power_mode = FALSE update_headlamp() else if(stat == CONSCIOUS) use_power() @@ -24,7 +23,7 @@ cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick else uneq_all() - low_power_mode = 1 + low_power_mode = TRUE update_headlamp() diag_hud_set_borgcell() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 36225bdedf0..c767ba88aa6 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -53,10 +53,10 @@ var/mob/living/silicon/ai/connected_ai = null var/obj/item/stock_parts/cell/cell = /obj/item/stock_parts/cell/high ///If this is a path, this gets created as an object in Initialize. - var/opened = 0 + var/opened = FALSE var/emagged = FALSE var/emag_cooldown = 0 - var/wiresexposed = 0 + var/wiresexposed = FALSE /// Random serial number generated for each cyborg upon its initialization var/ident = 0 @@ -74,7 +74,7 @@ var/datum/effect_system/spark_spread/spark_system // So they can initialize sparks whenever/N var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default - var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. + var/scrambledcodes = FALSE // Used to determine if a borg shows up on the robotics console. Setting to TRUE hides them. var/lockcharge //Boolean of whether the borg is locked down or not var/toner = 0 @@ -94,7 +94,7 @@ var/hat_offset = -3 can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 var/static/list/can_ride_typecache = typecacheof(/mob/living/carbon/human) /mob/living/silicon/robot/get_cell() @@ -324,13 +324,13 @@ . += "Master AI: [connected_ai.name]" /mob/living/silicon/robot/restrained(ignore_grab) - . = 0 + return /mob/living/silicon/robot/triggerAlarm(class, area/A, O, obj/alarmsource) if(alarmsource.z != z) return if(stat == DEAD) - return 1 + return TRUE var/list/L = alarms[class] for (var/I in L) if (I == A.name) @@ -338,7 +338,7 @@ var/list/sources = alarm[3] if (!(alarmsource in sources)) sources += alarmsource - return 1 + return TRUE var/obj/machinery/camera/C = null var/list/CL = null if (O && istype(O, /list)) @@ -349,11 +349,11 @@ C = O L[A.name] = list(A, (C) ? C : O, list(alarmsource)) queueAlarm(text("--- [class] alarm detected in [A.name]!"), class) - return 1 + return TRUE /mob/living/silicon/robot/cancelAlarm(class, area/A, obj/origin) var/list/L = alarms[class] - var/cleared = 0 + var/cleared = FALSE for (var/I in L) if (I == A.name) var/list/alarm = L[I] @@ -361,7 +361,7 @@ if (origin in srcs) srcs -= origin if (srcs.len == 0) - cleared = 1 + cleared = TRUE L -= I if (cleared) queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0) @@ -392,36 +392,36 @@ /mob/living/silicon/robot/proc/allowed(mob/M) //check if it doesn't require any access at all if(check_access(null)) - return 1 + return TRUE if(ishuman(M)) var/mob/living/carbon/human/H = M //if they are holding or wearing a card that has access, that works if(check_access(H.get_active_held_item()) || check_access(H.wear_id)) - return 1 + return TRUE else if(ismonkey(M)) var/mob/living/carbon/monkey/george = M //they can only hold things :( if(isitem(george.get_active_held_item())) return check_access(george.get_active_held_item()) - return 0 + return FALSE /mob/living/silicon/robot/proc/check_access(obj/item/card/id/I) if(!istype(req_access, /list)) //something's very wrong - return 1 + return TRUE var/list/L = req_access if(!L.len) //no requirements - return 1 + return TRUE if(!istype(I, /obj/item/card/id) && isitem(I)) I = I.GetID() if(!I || !I.access) //not ID or no access - return 0 + return FALSE for(var/req in req_access) if(!(req in I.access)) //doesn't have this access - return 0 - return 1 + return FALSE + return TRUE /mob/living/silicon/robot/regenerate_icons() return update_icons() @@ -582,7 +582,7 @@ robot_suit.r_leg = null new /obj/item/stack/cable_coil(T, robot_suit.chest.wired) robot_suit.chest.forceMove(T) - robot_suit.chest.wired = 0 + robot_suit.chest.wired = FALSE robot_suit.chest = null robot_suit.l_arm.forceMove(T) robot_suit.l_arm = null @@ -1049,7 +1049,7 @@ else M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full!") return - . = ..(M, force, check_loc) + return ..() /mob/living/silicon/robot/unbuckle_mob(mob/user, force=FALSE) if(iscarbon(user)) @@ -1057,7 +1057,7 @@ if(istype(riding_datum)) riding_datum.unequip_buckle_inhands(user) riding_datum.restore_position(user) - . = ..(user) + return ..() /mob/living/silicon/robot/resist() . = ..() @@ -1073,7 +1073,7 @@ if(connected_ai) connected_ai.connected_robots += src lawsync() - lawupdate = 1 + lawupdate = TRUE return TRUE picturesync() return FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index bc872ba0608..952514addad 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -42,14 +42,14 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real if(W.tool_behaviour == TOOL_CROWBAR) // crowbar means open or close the cover if(opened) to_chat(user, "You close the cover.") - opened = 0 + opened = FALSE update_icons() else if(locked) to_chat(user, "The cover is locked and cannot be opened!") else to_chat(user, "You open the cover.") - opened = 1 + opened = TRUE update_icons() return @@ -340,7 +340,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real SetEmagged(1) SetStun(60) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown - lawupdate = 0 + lawupdate = FALSE connected_ai = null message_admins("[ADMIN_LOOKUPFLW(user)] emagged cyborg [ADMIN_LOOKUPFLW(src)]. Laws overridden.") log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index de8ea801b82..b7fd16ea800 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -371,12 +371,12 @@ to_chat(src, "Automatic announcements [Autochan == "None" ? "will not use the radio." : "set to [Autochan]."]") /mob/living/silicon/put_in_hand_check() // This check is for borgs being able to receive items, not put them in others' hands. - return 0 + return FALSE // The src mob is trying to place an item on someone // But the src mob is a silicon!! Disable. /mob/living/silicon/stripPanelEquip(obj/item/what, mob/who, slot) - return 0 + return FALSE /mob/living/silicon/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt silicon units diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index 48062a69f53..1401c21e42e 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -24,15 +24,15 @@ to_chat(M, "[link] [rendered]") /mob/living/silicon/binarycheck() - return 1 + return TRUE /mob/living/silicon/lingcheck() - return 0 //Borged or AI'd lings can't speak on the ling channel. + return FALSE //Borged or AI'd lings can't speak on the ling channel. /mob/living/silicon/radio(message, list/message_mods = list(), list/spans, language) . = ..() - if(. != 0) - return . + if(!.) + return if(message_mods[MODE_HEADSET]) if(radio) radio.talk_into(src, message, , spans, language, message_mods) @@ -42,4 +42,4 @@ radio.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) return ITALICS | REDUCE_RANGE - return 0 + return FALSE diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 9beae1714f7..5fded700f2a 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -404,7 +404,7 @@ /mob/living/simple_animal/bot/radio(message, list/message_mods = list(), list/spans, language) . = ..() - if(. != 0) + if(!.) return if(message_mods[MODE_HEADSET]) @@ -693,7 +693,7 @@ Pass a positive integer as an argument to override a bot's default speed. patrol_target = nearest_beacon_loc destination = next_destination else - auto_patrol = 0 + auto_patrol = FALSE mode = BOT_IDLE speak("Disengaging patrol mode.") @@ -732,11 +732,11 @@ Pass a positive integer as an argument to override a bot's default speed. // process control input switch(command) if("patroloff") - bot_reset() //HOLD IT!! - auto_patrol = 0 + bot_reset() //HOLD IT!! //OBJECTION!! + auto_patrol = FALSE if("patrolon") - auto_patrol = 1 + auto_patrol = TRUE if("summon") bot_reset() @@ -751,7 +751,7 @@ Pass a positive integer as an argument to override a bot's default speed. ejectpairemote(user) return -// + /mob/living/simple_animal/bot/proc/bot_control_message(command, user) switch(command) if("patroloff") @@ -831,7 +831,7 @@ Pass a positive integer as an argument to override a bot's default speed. dat = get_controls(M) var/datum/browser/popup = new(M,window_id,window_name,350,600) popup.set_content(dat) - popup.open(use_onclose = 0) + popup.open(use_onclose = FALSE) onclose(M,window_id,ref=src) return diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index cf5ce1f77b6..dee1fa482c9 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -287,7 +287,7 @@ to_chat(user, "You add the [I] to [src]! Honk!") var/mob/living/simple_animal/bot/honkbot/S = new(drop_location()) S.name = created_name - S.spam_flag = TRUE // only long enough to hear the first ping. + S.limiting_spam = TRUE // only long enough to hear the first ping. addtimer(CALLBACK (S, .mob/living/simple_animal/bot/honkbot/proc/react_ping), 5) S.bikehorn = I.type qdel(I) diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 41d78292fdf..6e4b6dba89d 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -21,7 +21,7 @@ path_image_color = "#FF69B4" var/honksound = 'sound/items/bikehorn.ogg' //customizable sound - var/spam_flag = FALSE + var/limiting_spam = FALSE var/cooldowntime = 30 var/cooldowntimehorn = 10 var/mob/living/carbon/target @@ -45,8 +45,8 @@ access_card.access += J.get_access() prev_access = access_card.access -/mob/living/simple_animal/bot/honkbot/proc/spam_flag_false() //used for addtimer - spam_flag = FALSE +/mob/living/simple_animal/bot/honkbot/proc/limiting_spam_false() //used for addtimer + limiting_spam = FALSE /mob/living/simple_animal/bot/honkbot/proc/sensor_blink() icon_state = "honkbot-c" @@ -55,9 +55,9 @@ //honkbots react with sounds. /mob/living/simple_animal/bot/honkbot/proc/react_ping() playsound(src, 'sound/machines/ping.ogg', 50, TRUE, -1) //the first sound upon creation! - spam_flag = TRUE + limiting_spam = TRUE sensor_blink() - addtimer(CALLBACK(src, .proc/spam_flag_false), 18) // calibrates before starting the honk + addtimer(CALLBACK(src, .proc/limiting_spam_false), 18) // calibrates before starting the honk /mob/living/simple_animal/bot/honkbot/proc/react_buzz() playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1) @@ -70,7 +70,7 @@ anchored = FALSE walk_to(src,0) last_found = world.time - spam_flag = FALSE + limiting_spam = FALSE /mob/living/simple_animal/bot/honkbot/set_custom_texts() @@ -151,7 +151,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, if(!C.IsParalyzed() || arrest_type) stun_attack(A) ..() - else if (!spam_flag) //honking at the ground + else if (!limiting_spam) //honking at the ground bike_horn(A) @@ -166,31 +166,31 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, /mob/living/simple_animal/bot/honkbot/proc/bike_horn() //use bike_horn if (emagged <= 1) - if (!spam_flag) + if (!limiting_spam) playsound(src, honksound, 50, TRUE, -1) - spam_flag = TRUE //prevent spam + limiting_spam = TRUE //prevent spam sensor_blink() - addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn) + addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntimehorn) else if (emagged == 2) //emagged honkbots will spam short and memorable sounds. - if (!spam_flag) + if (!limiting_spam) playsound(src, "honkbot_e", 50, FALSE) - spam_flag = TRUE // prevent spam + limiting_spam = TRUE // prevent spam icon_state = "honkbot-e" addtimer(CALLBACK(src, /atom/.proc/update_icon), 30, TIMER_OVERRIDE|TIMER_UNIQUE) - addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn) + addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/proc/honk_attack(mob/living/carbon/C) // horn attack - if(!spam_flag) + if(!limiting_spam) playsound(loc, honksound, 50, TRUE, -1) - spam_flag = TRUE // prevent spam + limiting_spam = TRUE // prevent spam sensor_blink() - addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntimehorn) + addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntimehorn) /mob/living/simple_animal/bot/honkbot/proc/stun_attack(mob/living/carbon/C) // airhorn stun - if(!spam_flag) + if(!limiting_spam) playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) //HEEEEEEEEEEEENK!! sensor_blink() - if(spam_flag == 0) + if(limiting_spam == 0) if(ishuman(C)) C.stuttering = 20 var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) @@ -200,7 +200,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, C.Paralyze(60) var/mob/living/carbon/human/H = C if(client) //prevent spam from players.. - spam_flag = TRUE + limiting_spam = TRUE if (emagged <= 1) //HONK once, then leave var/judgement_criteria = judgement_criteria() threatlevel = H.assess_threat(judgement_criteria) @@ -208,7 +208,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, target = oldtarget_name else // you really don't want to hit an emagged honkbot threatlevel = 6 // will never let you go - addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntime) + addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntime) log_combat(src,C,"honked") @@ -217,7 +217,7 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, else C.stuttering = 20 C.Paralyze(80) - addtimer(CALLBACK(src, .proc/spam_flag_false), cooldowntime) + addtimer(CALLBACK(src, .proc/limiting_spam_false), cooldowntime) /mob/living/simple_animal/bot/honkbot/handle_automated_action() @@ -303,14 +303,14 @@ Maintenance panel panel is [open ? "opened" : "closed"]"}, if(threatlevel <= 3) if(C in view(4,src)) //keep the range short for patrolling - if(!spam_flag) + if(!limiting_spam) bike_horn() else if(threatlevel >= 10) bike_horn() //just spam the shit outta this else if(threatlevel >= 4) - if(!spam_flag) + if(!limiting_spam) target = C oldtarget_name = C.name bike_horn() diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 4972a860dbf..390db50ed38 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -281,17 +281,15 @@ if(isconstruct(A)) //is it a construct? var/mob/living/simple_animal/hostile/construct/C = A if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is - return 1 - else - return 0 - else - return 0 + return TRUE + return FALSE /mob/living/simple_animal/hostile/construct/artificer/CanAttack(atom/the_target) if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return 0 + return FALSE if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible - return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs + return TRUE //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs + return FALSE /mob/living/simple_animal/hostile/construct/artificer/MoveToTarget(list/possible_targets) ..() @@ -299,7 +297,7 @@ var/mob/living/L = target if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it LoseTarget() - return 0 + return if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you retreat_distance = null minimum_distance = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 8c74ec337fc..4543568889a 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -38,16 +38,16 @@ turns_since_scan = 0 if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) movement_target = null - stop_automated_movement = 0 + stop_automated_movement = FALSE if( !movement_target || !(movement_target.loc in oview(src, 3)) ) movement_target = null - stop_automated_movement = 0 + stop_automated_movement = FALSE for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3)) if(isturf(S.loc) || ishuman(S.loc)) movement_target = S break if(movement_target) - stop_automated_movement = 1 + stop_automated_movement = TRUE step_to(src,movement_target,1) sleep(3) step_to(src,movement_target,1) @@ -359,7 +359,7 @@ if(user && !user.temporarilyRemoveItemFromInventory(item_to_add)) to_chat(user, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!") - return 0 + return var/valid = FALSE if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/head)) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 06545473b0b..3738354f54e 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -308,7 +308,7 @@ return ..() /mob/living/simple_animal/drone/mob_negates_gravity() - return 1 + return TRUE /mob/living/simple_animal/drone/mob_has_gravity() return ..() || mob_negates_gravity() @@ -318,7 +318,7 @@ /mob/living/simple_animal/drone/bee_friendly() // Why would bees pay attention to drones? - return 1 + return TRUE /mob/living/simple_animal/drone/electrocute_act(shock_damage, source, siemens_coeff, flags = NONE) - return 0 //So they don't die trying to fix wiring + return FALSE //So they don't die trying to fix wiring diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index f78ad951e6f..f96b894be1e 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -170,7 +170,7 @@ /mob/living/simple_animal/cow/tamed() . = ..() can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8))) D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 19633468a30..9a5e7c94186 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -60,7 +60,7 @@ . = ..() if(!rideable && mind) can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 8), TEXT_SOUTH = list(1, 8), TEXT_EAST = list(-3, 6), TEXT_WEST = list(3, 6))) D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm index 441c3062431..0fc0b43596c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/boss.dm @@ -54,21 +54,22 @@ /datum/action/boss/Trigger() . = ..() - if(.) - if(!istype(boss, boss_type)) - return 0 - if(!boss.atb) - return 0 - if(boss.atb.points < boss_cost) - return 0 - if(!boss.client) - if(needs_target && !boss.target) - return 0 - if(boss) - if(say_when_triggered) - boss.say(say_when_triggered, forced = "boss action") - if(!boss.atb.spend(boss_cost)) - return 0 + if(!.) + return + if(!istype(boss, boss_type)) + return + if(!boss.atb) + return + if(boss.atb.points < boss_cost) + return + if(!boss.client) + if(needs_target && !boss.target) + return + if(boss) + if(say_when_triggered) + boss.say(say_when_triggered, forced = "boss action") + if(!boss.atb.spend(boss_cost)) + return //Example: /* diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index ff5f58e3911..94df42c353d 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -146,7 +146,7 @@ /mob/living/simple_animal/hostile/carp/tamed() . = ..() can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 13), TEXT_SOUTH = list(0, 15), TEXT_EAST = list(-2, 12), TEXT_WEST = list(2, 12))) D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) @@ -218,7 +218,7 @@ heal_overall_damage(4) if(!rideable && src.mind) can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 8), TEXT_SOUTH = list(1, 8), TEXT_EAST = list(-3, 6), TEXT_WEST = list(3, 6))) D.set_vehicle_dir_offsets(SOUTH, pixel_x, 0) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 5a7290c7783..e48862f9e8f 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -90,17 +90,17 @@ /mob/living/simple_animal/hostile/poison/giant_spider/proc/humanize_spider(mob/user) if(key || !playable_spider || stat)//Someone is in it, it's dead, or the fun police are shutting it down - return 0 + return FALSE var/spider_ask = alert("Become a spider?", "Are you australian?", "Yes", "No") if(spider_ask == "No" || !src || QDELETED(src)) - return 1 + return TRUE if(key) to_chat(user, "Someone else already took this spider!") - return 1 + return TRUE key = user.key if(directive) log_game("[key_name(src)] took control of [name] with the objective: '[directive]'.") - return 1 + return TRUE //nursemaids - these create webs and eggs /mob/living/simple_animal/hostile/poison/giant_spider/nurse @@ -244,15 +244,16 @@ gold_core_spawnable = NO_SPAWN /mob/living/simple_animal/hostile/poison/giant_spider/handle_automated_action() - if(!..()) //AIStatus is off - return 0 + . = ..() + if(!.)//AIStatus is off + return FALSE if(AIStatus == AI_IDLE) //1% chance to skitter madly away if(!busy && prob(1)) stop_automated_movement = TRUE Goto(pick(urange(20, src, 1)), move_to_delay) addtimer(CALLBACK(src, .proc/do_action), 5 SECONDS) - return 1 + return TRUE /mob/living/simple_animal/hostile/poison/giant_spider/proc/do_action() stop_automated_movement = FALSE @@ -449,13 +450,14 @@ button_icon_state = "lay_eggs" /datum/action/innate/spider/lay_eggs/IsAvailable() - if(..()) - if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse)) - return 0 - var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner - if(S.fed) - return 1 - return 0 + . = ..() + if(!.) + return + if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse)) + return FALSE + var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner + if(S.fed) + return TRUE /datum/action/innate/spider/lay_eggs/Activate() if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse)) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 52c99698d15..06a19789451 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -68,11 +68,10 @@ . = ..() if(!.) //dead walk(src, 0) //stops walking - return 0 /mob/living/simple_animal/hostile/handle_automated_action() if(AIStatus == AI_OFF) - return 0 + return FALSE var/list/possible_targets = ListTargets() //we look around for potential targets and make it a list for later use. if(environment_smash) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index ce66bb1e7f8..33f77868602 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -221,7 +221,7 @@ Difficulty: Medium if(!any_attack) for(var/obj/effect/temp_visual/drakewall/D in drakewalls) qdel(D) - return 0 // nothing to attack in the arena time for enraged attack if we still have a target + return FALSE // nothing to attack in the arena time for enraged attack if we still have a target for(var/turf/T in turfs) if(!(T in empty)) new /obj/effect/temp_visual/lava_warning(T) @@ -229,7 +229,7 @@ Difficulty: Medium new /obj/effect/temp_visual/lava_safe(T) amount-- SLEEP_CHECK_DEATH(24) - return 1 // attack finished completely + return TRUE // attack finished completely /mob/living/simple_animal/hostile/megafauna/dragon/proc/arena_escape_enrage() // you ran somehow / teleported away from my arena attack now i'm mad fucker SLEEP_CHECK_DEATH(0) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index b786de7022f..a976a6c38d5 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -135,8 +135,8 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/proc/CheckObject(obj/O) if((isitem(O) || isstructure(O)) && !is_type_in_list(O, GLOB.protected_objects)) - return 1 - return 0 + return TRUE + return FALSE /mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0) if(destroy_original || CheckObject(O)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index bf479c56e56..1277f2d75e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -114,7 +114,7 @@ qdel(O) saddled = TRUE can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 add_overlay("goliath_saddled") var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8))) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 63a796a8095..3a80e32d450 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -39,7 +39,6 @@ for(var/mob/living/simple_animal/hostile/retaliate/H in around) if(faction_check_mob(H) && !attack_same && !H.attack_same) H.enemies |= enemies - return 0 /mob/living/simple_animal/hostile/retaliate/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 7d2ff1ad648..cc3f9949402 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -79,7 +79,7 @@ if(can_be_seen(NewLoc)) if(client) to_chat(src, "You cannot move, there are eyes on you!") - return 0 + return return ..() /mob/living/simple_animal/hostile/statue/Life() @@ -143,7 +143,7 @@ // Cannot talk /mob/living/simple_animal/hostile/statue/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - return 0 + return // Turn to dust when gibbed @@ -157,7 +157,7 @@ if(isliving(the_target)) var/mob/living/L = the_target if(!L.client && !L.ckey) - return 0 + return FALSE return ..() // Don't attack your creator if there is one diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm index 4ec6f63cd21..68b953acfa6 100644 --- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm +++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm @@ -39,7 +39,7 @@ /mob/living/simple_animal/hostile/vatbeast/tamed() . = ..() can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 var/datum/component/riding/riding = LoadComponent(/datum/component/riding) riding.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 15), TEXT_SOUTH = list(0, 15), TEXT_EAST = list(-10, 15), TEXT_WEST = list(10, 15))) riding.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 940faac7909..52124149992 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -159,8 +159,8 @@ /mob/living/simple_animal/parrot/radio(message, list/message_mods = list(), list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. . = ..() - if(. != 0) - return . + if(!.) + return if(message_mods[MODE_HEADSET]) if(ears) @@ -175,7 +175,7 @@ ears.talk_into(src, message, message_mods[RADIO_EXTENSION], spans, language, message_mods) return ITALICS | REDUCE_RANGE - return 0 + return FALSE /* * Inventory @@ -605,12 +605,12 @@ parrot_state = PARROT_WANDER parrot_stuck = 0 parrot_lastmove = null - return 1 + return TRUE else parrot_lastmove = null else parrot_lastmove = src.loc - return 0 + return FALSE /mob/living/simple_animal/parrot/proc/search_for_item() var/item @@ -634,8 +634,6 @@ continue return item - return null - /mob/living/simple_animal/parrot/proc/search_for_perch() for(var/obj/O in view(src)) for(var/path in desired_perches) diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index aaf7411d632..abed275d97f 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -44,7 +44,7 @@ /mob/living/simple_animal/shade/canSuicide() if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone - return 0 + return FALSE return ..() /mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index acb6fcc957b..539787a6827 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -8,7 +8,6 @@ /mob/living/simple_animal/slime/Life() - set invisibility = 0 if (notransform) return if(..()) @@ -614,11 +613,11 @@ /mob/living/simple_animal/slime/proc/will_hunt(hunger = -1) // Check for being stopped from feeding and chasing if (docile) - return 0 + return FALSE if (hunger == 2 || rabid || attacked) - return 1 + return TRUE if (Leader) - return 0 + return FALSE if (holding_still) - return 0 - return 1 + return FALSE + return TRUE diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index f1caf2e4f4a..2c8fbe447ae 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -12,20 +12,22 @@ var/needs_growth = NO_GROWTH_NEEDED /datum/action/innate/slime/IsAvailable() - if(..()) - var/mob/living/simple_animal/slime/S = owner - if(needs_growth == GROWTH_NEEDED) - if(S.amount_grown >= SLIME_EVOLUTION_THRESHOLD) - return 1 - return 0 - return 1 + . = ..() + if(!.) + return + var/mob/living/simple_animal/slime/S = owner + if(needs_growth == GROWTH_NEEDED) + if(S.amount_grown >= SLIME_EVOLUTION_THRESHOLD) + return TRUE + return FALSE + return TRUE /mob/living/simple_animal/slime/verb/Feed() set category = "Slime" set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process." if(stat) - return 0 + return FALSE var/list/choices = list() for(var/mob/living/C in view(1,src)) @@ -34,10 +36,11 @@ var/mob/living/M = input(src,"Who do you wish to feed on?") in null|sortNames(choices) if(!M) - return 0 + return FALSE if(CanFeedon(M)) Feedon(M) - return 1 + return TRUE + return FALSE /datum/action/innate/slime/feed name = "Feed" diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 97fba146527..bb0546606ad 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -479,10 +479,10 @@ docile = 1 /mob/living/simple_animal/slime/can_unbuckle() - return 0 + return FALSE /mob/living/simple_animal/slime/can_buckle() - return 0 + return FALSE /mob/living/simple_animal/slime/get_mob_buckling_height(mob/seat) if(..()) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 225d84a7222..545f2c10701 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -109,10 +109,10 @@ */ /mob/proc/Cell() set category = "Admin" - set hidden = 1 + set hidden = TRUE if(!loc) - return 0 + return var/datum/gas_mixture/environment = loc.return_air() @@ -302,7 +302,7 @@ if(istype(W)) if(equip_to_slot_if_possible(W, slot,0,0,0)) - return 1 + return TRUE if(!W) // Activate the item @@ -310,7 +310,7 @@ if(istype(I)) I.attack_hand(src) - return 0 + return FALSE /** * Try to equip an item to a slot on the mob @@ -369,7 +369,7 @@ */ /mob/proc/equip_to_appropriate_slot(obj/item/W, swap=FALSE) if(!istype(W)) - return 0 + return FALSE var/slot_priority = W.slot_equipment_priority if(!slot_priority) @@ -386,9 +386,9 @@ for(var/slot in slot_priority) if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, FALSE, swap)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE; - return 1 + return TRUE - return 0 + return FALSE /** * Reset the attached clients perspective (viewpoint) * @@ -801,7 +801,7 @@ ///Is the mob muzzled (default false) /mob/proc/is_muzzled() - return 0 + return FALSE /// Adds this list to the output to the stat browser /mob/proc/get_status_tab_items() @@ -1008,11 +1008,11 @@ ///can the mob be buckled to something by default? /mob/proc/can_buckle() - return 1 + return TRUE ///can the mob be unbuckled from something by default? /mob/proc/can_unbuckle() - return 1 + return TRUE ///Can the mob interact() with an atom? /mob/proc/can_interact_with(atom/A) @@ -1072,7 +1072,7 @@ /mob/proc/fully_replace_character_name(oldname,newname) log_message("[src] name changed from [oldname] to [newname]", LOG_OWNERSHIP) if(!newname) - return 0 + return FALSE log_played_names(ckey,newname) @@ -1095,7 +1095,7 @@ // Only update if this player is a target if(obj.target && obj.target.current && obj.target.current.real_name == name) obj.update_explanation_text() - return 1 + return TRUE ///Updates GLOB.data_core records with new name , see mob/living/carbon/human /mob/proc/replace_records_name(oldname,newname) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index e313038db6c..51220436520 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -45,9 +45,9 @@ /proc/above_neck(zone) var/list/zones = list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES) if(zones.Find(zone)) - return 1 + return TRUE else - return 0 + return FALSE /** * Convert random parts of a passed in message to stars diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index aacc44e60db..56749f30378 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -93,7 +93,7 @@ ///Check if the mob has a hivemind channel /mob/proc/hivecheck() - return 0 + return FALSE ///Check if the mob has a ling hivemind /mob/proc/lingcheck() diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index b45e8617199..4c5dae12b60 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -619,34 +619,34 @@ //Bad mobs! - Remember to add a comment explaining what's wrong with the mob if(!MP) - return 0 //Sanity, this should never happen. + return FALSE //Sanity, this should never happen. if(ispath(MP, /mob/living/simple_animal/hostile/construct)) - return 0 //Verbs do not appear for players. + return FALSE //Verbs do not appear for players. //Good mobs! if(ispath(MP, /mob/living/simple_animal/pet/cat)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/pet/dog/corgi)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/crab)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/hostile/carp)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/hostile/mushroom)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/shade)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/hostile/killertomato)) - return 1 + return TRUE if(ispath(MP, /mob/living/simple_animal/mouse)) - return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak) + return TRUE if(ispath(MP, /mob/living/simple_animal/hostile/bear)) - return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak) + return TRUE if(ispath(MP, /mob/living/simple_animal/parrot)) - return 1 //Parrots are no longer unfinished! -Nodrak + return TRUE //Parrots are no longer unfinished! -Nodrak //Not in here? Must be untested! - return 0 + return FALSE #undef TRANSFORMATION_DURATION diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index bb33a23039a..5a5de49845c 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -222,11 +222,11 @@ /obj/item/modular_computer/process() if(!enabled) // The computer is turned off last_power_usage = 0 - return 0 + return if(obj_integrity <= integrity_failure * max_integrity) shutdown_computer() - return 0 + return if(active_program && active_program.requires_ntnet && !get_ntnet_status(active_program.requires_ntnet_feature)) active_program.event_networkfailure(0) // Active program requires NTNet to run but we've just lost connection. Crash. diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 80c0811d665..f891ef4099a 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -7,17 +7,17 @@ if(!enabled) if(ui) ui.close() - return 0 + return if(!use_power()) if(ui) ui.close() - return 0 + return // Robots don't really need to see the screen, their wireless connection works as long as computer is on. if(!screen_on && !issilicon(user)) if(ui) ui.close() - return 0 + return // If we have an active program switch to it now. if(active_program) @@ -74,9 +74,9 @@ data["programs"] = list() var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD] for(var/datum/computer_file/program/P in hard_drive.stored_files) - var/running = 0 + var/running = FALSE if(P in idle_threads) - running = 1 + running = TRUE data["programs"] += list(list("name" = P.filename, "desc" = P.filedesc, "running" = running)) diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index 73007c1a9cf..a5d2a7ed170 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -17,7 +17,7 @@ // No running around with open laptops in hands. item_flags = SLOWS_WHILE_IN_HAND - screen_on = 0 // Starts closed + screen_on = FALSE // Starts closed var/start_open = TRUE // unless this var is set to 1 var/icon_state_closed = "laptop-closed" var/w_class_open = WEIGHT_CLASS_BULKY diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index 0d7b567877f..a8e4a8a6545 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -43,13 +43,6 @@ /obj/item/modular_computer/processor/relay_qdel() qdel(machinery_computer) -// This thing is not meant to be used on it's own, get topic data from our machinery owner. -//obj/item/modular_computer/processor/canUseTopic(atom/movable/M, be_close=FALSE, no_dexterity=FALSE, no_tk=FALSE) -// if(!machinery_computer) -// return 0 - -// return machinery_computer.canUseTopic(user, state) - /obj/item/modular_computer/processor/shutdown_computer() if(!machinery_computer) return diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index f65f0e36f68..d16d6f8a250 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -68,8 +68,8 @@ if(!(hardware_flag & usage_flags)) if(loud && computer && user) to_chat(user, "\The [computer] flashes a \"Hardware Error - Incompatible software\" warning.") - return 0 - return 1 + return FALSE + return TRUE /datum/computer_file/program/proc/get_signal(specific_action = 0) if(computer) @@ -78,7 +78,7 @@ // Called by Process() on device that runs us, once every tick. /datum/computer_file/program/proc/process_tick() - return 1 + return TRUE /** *Check if the user can run program. Only humans can operate computer. Automatically called in run_program() @@ -147,8 +147,8 @@ ID = card_holder.GetID() generate_network_log("Connection opened -- Program ID: [filename] User:[ID?"[ID.registered_name]":"None"]") program_state = PROGRAM_STATE_ACTIVE - return 1 - return 0 + return TRUE + return FALSE /** * diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 8fbcfd0b01b..c368b6408cb 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -13,8 +13,8 @@ tgui_id = "NtosNetDownloader" var/datum/computer_file/program/downloaded_file = null - var/hacked_download = 0 - var/download_completion = 0 //GQ of downloaded data. + var/hacked_download = FALSE + var/download_completion = FALSE //GQ of downloaded data. var/download_netspeed = 0 var/downloaderror = "" var/obj/item/modular_computer/my_computer = null @@ -36,33 +36,33 @@ /datum/computer_file/program/ntnetdownload/proc/begin_file_download(filename) if(downloaded_file) - return 0 + return FALSE var/datum/computer_file/program/PRG = SSnetworks.station_network.find_ntnet_file_by_name(filename) if(!PRG || !istype(PRG)) - return 0 + return FALSE // Attempting to download antag only program, but without having emagged/syndicate computer. No. if(PRG.available_on_syndinet && !emagged) - return 0 + return FALSE var/obj/item/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] if(!computer || !hard_drive || !hard_drive.can_store_file(PRG)) - return 0 + return FALSE ui_header = "downloader_running.gif" if(PRG in main_repo) generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from NTNet Software Repository.") - hacked_download = 0 + hacked_download = FALSE else if(PRG in antag_repo) generate_network_log("Began downloading file **ENCRYPTED**.[PRG.filetype] from unspecified server.") - hacked_download = 1 + hacked_download = TRUE else generate_network_log("Began downloading file [PRG.filename].[PRG.filetype] from unspecified server.") - hacked_download = 0 + hacked_download = FALSE downloaded_file = PRG.clone() @@ -71,7 +71,7 @@ return generate_network_log("Aborted download of file [hacked_download ? "**ENCRYPTED**" : "[downloaded_file.filename].[downloaded_file.filetype]"].") downloaded_file = null - download_completion = 0 + download_completion = FALSE ui_header = "downloader_finished.gif" /datum/computer_file/program/ntnetdownload/proc/complete_file_download() @@ -83,7 +83,7 @@ // The download failed downloaderror = "I/O ERROR - Unable to save file. Check whether you have enough free space on your hard drive and whether your hard drive is properly connected. If the issue persists contact your system administrator for assistance." downloaded_file = null - download_completion = 0 + download_completion = FALSE ui_header = "downloader_finished.gif" /datum/computer_file/program/ntnetdownload/process_tick() @@ -105,20 +105,20 @@ /datum/computer_file/program/ntnetdownload/ui_act(action, params) if(..()) - return 1 + return TRUE switch(action) if("PRG_downloadfile") if(!downloaded_file) begin_file_download(params["filename"]) - return 1 + return TRUE if("PRG_reseterror") if(downloaderror) - download_completion = 0 - download_netspeed = 0 + download_completion = FALSE + download_netspeed = FALSE downloaded_file = null downloaderror = "" - return 1 - return 0 + return TRUE + return FALSE /datum/computer_file/program/ntnetdownload/ui_data(mob/user) my_computer = computer @@ -186,7 +186,7 @@ /datum/computer_file/program/ntnetdownload/kill_program(forced) abort_file_download() - return ..(forced) + return ..() //////////////////////// //Syndicate Downloader// @@ -199,7 +199,7 @@ filedesc = "Software Download Tool" program_icon_state = "generic" extended_desc = "This program allows downloads of software from shared Syndicate repositories" - requires_ntnet = 0 + requires_ntnet = FALSE ui_header = "downloader_finished.gif" tgui_id = "NtosNetDownloader" emagged = TRUE diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index e5c133de200..857eed5f1bb 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -31,43 +31,43 @@ // Use this proc to add file to the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks. /obj/item/computer_hardware/hard_drive/proc/store_file(datum/computer_file/F) if(!F || !istype(F)) - return 0 + return FALSE if(!can_store_file(F)) - return 0 + return FALSE if(!check_functionality()) - return 0 + return FALSE if(!stored_files) - return 0 + return FALSE // This file is already stored. Don't store it again. if(F in stored_files) - return 0 + return FALSE F.holder = src stored_files.Add(F) recalculate_size() - return 1 + return TRUE // Use this proc to remove file from the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks. /obj/item/computer_hardware/hard_drive/proc/remove_file(datum/computer_file/F) if(!F || !istype(F)) - return 0 + return FALSE if(!stored_files) - return 0 + return FALSE if(!check_functionality()) - return 0 + return FALSE if(F in stored_files) stored_files -= F recalculate_size() - return 1 + return TRUE else - return 0 + return FALSE // Loops through all stored files and recalculates used_capacity of this drive /obj/item/computer_hardware/hard_drive/proc/recalculate_size() @@ -80,24 +80,24 @@ // Checks whether file can be stored on the hard drive. We can only store unique files, so this checks whether we wouldn't get a duplicity by adding a file. /obj/item/computer_hardware/hard_drive/proc/can_store_file(datum/computer_file/F) if(!F || !istype(F)) - return 0 + return FALSE if(F in stored_files) - return 0 + return FALSE var/name = F.filename + "." + F.filetype for(var/datum/computer_file/file in stored_files) if((file.filename + "." + file.filetype) == name) - return 0 + return FALSE // In the unlikely event someone manages to create that many files. // BYOND is acting weird with numbers above 999 in loops (infinite loop prevention) if(stored_files.len >= 999) - return 0 + return FALSE if((used_capacity + F.size) > max_capacity) - return 0 + return FALSE else - return 1 + return TRUE // Tries to find the file by filename. Returns null on failure diff --git a/code/modules/modular_computers/hardware/portable_disk.dm b/code/modules/modular_computers/hardware/portable_disk.dm index 89b0382e866..f1c565188f9 100644 --- a/code/modules/modular_computers/hardware/portable_disk.dm +++ b/code/modules/modular_computers/hardware/portable_disk.dm @@ -4,7 +4,7 @@ power_usage = 10 icon_state = "datadisk6" w_class = WEIGHT_CLASS_TINY - critical = 0 + critical = FALSE max_capacity = 16 device_type = MC_SDD diff --git a/code/modules/modular_computers/hardware/recharger.dm b/code/modules/modular_computers/hardware/recharger.dm index b58ea929780..38e406bc5bb 100644 --- a/code/modules/modular_computers/hardware/recharger.dm +++ b/code/modules/modular_computers/hardware/recharger.dm @@ -6,8 +6,8 @@ /obj/item/computer_hardware/recharger/proc/use_power(amount, charging=0) if(charging) - return 1 - return 0 + return TRUE + return FALSE /obj/item/computer_hardware/recharger/process() ..() @@ -34,17 +34,17 @@ var/obj/machinery/M = holder.physical if(M.powered()) M.use_power(amount) - return 1 + return TRUE else var/area/A = get_area(src) if(!istype(A)) - return 0 + return FALSE if(A.powered(AREA_USAGE_EQUIP)) A.use_power(amount, AREA_USAGE_EQUIP) - return 1 - return 0 + return TRUE + return FALSE /obj/item/computer_hardware/recharger/wired name = "wired power connector" @@ -56,26 +56,25 @@ if(ismachinery(M.physical) && M.physical.anchored) return ..() to_chat(user, "\The [src] is incompatible with portable computers!") - return 0 + return FALSE /obj/item/computer_hardware/recharger/wired/use_power(amount, charging=0) if(ismachinery(holder.physical) && holder.physical.anchored) var/obj/machinery/M = holder.physical var/turf/T = M.loc if(!T || !istype(T)) - return 0 + return FALSE var/obj/structure/cable/C = T.get_cable_node() if(!C || !C.powernet) - return 0 + return FALSE var/power_in_net = C.powernet.avail-C.powernet.load if(power_in_net && power_in_net > amount) C.powernet.load += amount - return 1 - - return 0 + return TRUE + return FALSE diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm index c60d6b93fd3..beec8aa88c6 100644 --- a/code/modules/ninja/ninja_event.dm +++ b/code/modules/ninja/ninja_event.dm @@ -59,7 +59,7 @@ Contents: var/datum/mind/Mind = new /datum/mind(key) Mind.assigned_role = ROLE_NINJA Mind.special_role = ROLE_NINJA - Mind.active = 1 + Mind.active = TRUE //spawn the ninja and assign the candidate var/mob/living/carbon/human/Ninja = create_space_ninja(spawn_loc) diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index 652b3f54d7d..839bdcfb0e8 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -32,8 +32,8 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 120 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/draining = 0 - var/candrain = 0 + var/draining = FALSE + var/candrain = FALSE var/mindrain = 200 var/maxdrain = 400 diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm index 333061814df..629b2f1d674 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm @@ -5,7 +5,7 @@ var/mob/living/carbon/C = input("Select who to capture:","Capture who?",null) as null|mob in sortNames(oview(H)) if(QDELETED(C)||!(C in oview(H))) - return 0 + return if(!C.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. to_chat(H, "[C.p_they(TRUE)] will bring no honor to your Clan!") diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm index 1c3fbd81470..4d9b97d8cf8 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm @@ -26,14 +26,14 @@ Contents: /obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() var/mob/living/carbon/human/U = affecting if(!U) - return 0 + return FALSE if(stealth) stealth = !stealth animate(U, alpha = 255, time = 15) U.visible_message("[U.name] appears from thin air!", \ "You are now visible.") - return 1 - return 0 + return TRUE + return FALSE /obj/item/clothing/suit/space/space_ninja/proc/stealth() diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 44d1d48acb1..f68b30b1081 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -189,31 +189,30 @@ /obj/item/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user, blood = 0) if(!user.IsAdvancedToolUser() || !user.is_literate()) to_chat(user, "You don't know how to read or write!") - return 0 + return FALSE if(user.mind != target) to_chat(user, "Your signature simply slides off the sheet, it seems this contract is not meant for you to sign!") - return 0 + return FALSE if(user.mind.soulOwner == owner) to_chat(user, "This devil already owns your soul, you may not sell it to [owner.p_them()] again!") - return 0 + return FALSE if(signed) to_chat(user, "This contract has already been signed! It may not be signed again.") - return 0 + return FALSE if(!user.mind.hasSoul) to_chat(user, "You do not possess a soul.") - return 0 + return FALSE if(HAS_TRAIT(user, TRAIT_DUMB)) to_chat(user, "You quickly scrawl 'your name' on the contract.") signIncorrectly() - return 0 + return FALSE if (contractType == CONTRACT_REVIVE) to_chat(user, "You are already alive, this contract would do nothing.") - return 0 - else - to_chat(user, "You quickly scrawl your name on the contract.") - if(fulfillContract(target.current, blood)<=0) - to_chat(user, "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?") - return 1 + return FALSE + to_chat(user, "You quickly scrawl your name on the contract.") + if(!fulfillContract(target.current, blood)) + to_chat(user, "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?") + return TRUE @@ -221,7 +220,7 @@ if (target == M.mind && M.stat == DEAD && M.mind.soulOwner == M.mind) if (cooldown) to_chat(user, "Give [M] a chance to think through the contract, don't rush [M.p_them()]!") - return 0 + return cooldown = TRUE var/mob/living/carbon/human/H = M var/mob/dead/observer/ghost = H.get_ghost() @@ -265,12 +264,12 @@ return TRUE /obj/item/paper/contract/infernal/proc/signIncorrectly(mob/living/carbon/human/user = target.current, blood = FALSE) - signed = 1 + signed = TRUE update_text("your name", blood) /obj/item/paper/contract/infernal/power/fulfillContract(mob/living/carbon/human/user = target.current, blood = FALSE) if(!user.dna) - return -1 + return FALSE user.dna.add_mutation(HULK) var/obj/item/organ/regenerative_core/organ = new /obj/item/organ/regenerative_core organ.Insert(user) @@ -278,7 +277,7 @@ /obj/item/paper/contract/infernal/wealth/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) if(!istype(user) || !user.mind) // How in the hell could that happen? - return -1 + return FALSE user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null)) return ..() @@ -318,20 +317,20 @@ /obj/item/paper/contract/infernal/magic/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) if(!istype(user) || !user.mind) - return -1 + return FALSE user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless(null)) user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) return ..() /obj/item/paper/contract/infernal/knowledge/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) if(!istype(user) || !user.mind) - return -1 + return FALSE user.dna.add_mutation(XRAY) user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/view_range(null)) return ..() /obj/item/paper/contract/infernal/friend/fulfillContract(mob/living/user = target.current, blood = 0) if(!istype(user) || !user.mind) - return -1 + return FALSE user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_friend(null)) return ..() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index fea40b36e16..b6ea91f292b 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -65,7 +65,7 @@ var/start_charge = 90 // initial cell charge % var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs var/opened = APC_COVER_CLOSED - var/shorted = 0 + var/shorted = FALSE var/lighting = 3 var/equipment = 3 var/environ = 3 @@ -75,7 +75,7 @@ var/chargecount = 0 var/locked = TRUE var/coverlocked = TRUE - var/aidisabled = 0 + var/aidisabled = FALSE var/tdir = null var/obj/machinery/power/terminal/terminal = null var/lastused_light = 0 @@ -83,8 +83,8 @@ var/lastused_environ = 0 var/lastused_total = 0 var/main_status = 0 - powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( - var/malfhack = 0 //New var for my changes to AI malf. --NeoFite + powernet = FALSE // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( + var/malfhack = FALSE //New var for my changes to AI malf. --NeoFite var/mob/living/silicon/ai/malfai = null //See above --NeoFite var/has_electronics = APC_ELECTRONICS_MISSING // 0 - none, 1 - plugged in, 2 - secured by screwdriver var/overload = 1 //used for the Blackout malf module @@ -94,7 +94,7 @@ var/longtermpower = 10 var/auto_name = FALSE var/failure_timer = 0 - var/force_update = 0 + var/force_update = FALSE var/emergency_lights = FALSE var/nightshift_lights = FALSE var/last_nightshift_switch = 0 @@ -1027,7 +1027,7 @@ L.no_emergency = emergency_lights INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE) CHECK_TICK - return 1 + return TRUE /obj/machinery/power/apc/proc/toggle_breaker(mob/user) if(!is_operational || failure_timer) @@ -1182,7 +1182,7 @@ update() queue_icon_update() failure_timer-- - force_update = 1 + force_update = TRUE return lastused_light = area.power_usage[AREA_USAGE_LIGHT] + area.power_usage[AREA_USAGE_STATIC_LIGHT] @@ -1400,22 +1400,22 @@ /obj/machinery/power/apc/proc/shock(mob/user, prb) if(!prob(prb)) - return 0 + return FALSE do_sparks(5, TRUE, src) if(isalien(user)) - return 0 + return FALSE if(electrocute_mob(user, src, src, 1, TRUE)) - return 1 + return TRUE else - return 0 + return FALSE /obj/machinery/power/apc/proc/setsubsystem(val) if(cell && cell.charge > 0) return (val==1) ? 0 : val else if(val == 3) - return 1 + return TRUE else - return 0 + return FALSE /obj/machinery/power/apc/proc/energy_fail(duration) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 9e041b82a2b..4ad1ee6a277 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -73,13 +73,13 @@ /obj/item/stock_parts/cell/use(amount) if(rigged && amount > 0) explode() - return 0 + return FALSE if(charge < amount) - return 0 + return FALSE charge = (charge - amount) if(!istype(loc, /obj/machinery/power/apc)) SSblackbox.record_feedback("tally", "cell_used", 1, type) - return 1 + return TRUE // recharge the cell /obj/item/stock_parts/cell/proc/give(amount) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index c157f04e36d..b923b4b1c90 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -605,10 +605,10 @@ /obj/machinery/light/proc/flicker(amount = rand(10, 20)) - set waitfor = 0 + set waitfor = FALSE if(flickering) return - flickering = 1 + flickering = TRUE if(on && status == LIGHT_OK) for(var/i = 0; i < amount; i++) if(status != LIGHT_OK) @@ -618,7 +618,7 @@ sleep(rand(5, 15)) on = (status == LIGHT_OK) update(0) - flickering = 0 + flickering = FALSE // ai attack - make lights flicker, because why not @@ -759,7 +759,7 @@ // called when area power state changes /obj/machinery/light/power_change() - SHOULD_CALL_PARENT(0) + SHOULD_CALL_PARENT(FALSE) var/area/A = get_area(src) seton(A.lightswitch && A.power_light) diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index a1bf54d61ee..fdfb77b09d9 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -119,7 +119,7 @@ */ /obj/machinery/proc/power_change() SIGNAL_HANDLER - SHOULD_CALL_PARENT(1) + SHOULD_CALL_PARENT(TRUE) if(machine_stat & BROKEN) return diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 7cd87179201..9eff3ce3f8e 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -12,7 +12,7 @@ // You can buckle someone to RTG, then open its panel. Fun stuff. can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 buckle_requires_restraints = TRUE var/power_gen = 1000 // Enough to power a single APC. 4000 output with T4 capacitor. diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 6e64e1af6b1..836a507b413 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -158,9 +158,9 @@ field_generator power level display /obj/machinery/field/generator/blob_act(obj/structure/blob/B) if(active) - return 0 + return FALSE else - ..() + return ..() /obj/machinery/field/generator/bullet_act(obj/projectile/Proj) if(Proj.flag != BULLET) @@ -221,25 +221,25 @@ field_generator power level display if(draw_power(round(power_draw/2,1))) check_power_level() - return 1 + return TRUE else visible_message("The [name] shuts down!", "You hear something shutting down.") turn_off() investigate_log("ran out of power and deactivated", INVESTIGATE_SINGULO) power = 0 check_power_level() - return 0 + return FALSE //This could likely be better, it tends to start loopin if you have a complex generator loop setup. Still works well enough to run the engine fields will likely recode the field gens and fields sometime -Mport /obj/machinery/field/generator/proc/draw_power(draw = 0, failsafe = FALSE, obj/machinery/field/generator/G = null, obj/machinery/field/generator/last = null) if((G && (G == src)) || (failsafe >= 8))//Loopin, set fail - return 0 + return FALSE else failsafe++ if(power >= draw)//We have enough power power -= draw - return 1 + return TRUE else//Need more power draw -= power @@ -250,14 +250,14 @@ field_generator power level display continue if(G)//Another gen is askin for power and we dont have it if(FG.draw_power(draw,failsafe,G,src))//Can you take the load - return 1 + return TRUE else - return 0 + return FALSE else//We are askin another for power if(FG.draw_power(draw,failsafe,src,src)) - return 1 + return TRUE else - return 0 + return FALSE /obj/machinery/field/generator/proc/start_fields() @@ -276,22 +276,22 @@ field_generator power level display /obj/machinery/field/generator/proc/setup_field(NSEW) var/turf/T = loc if(!istype(T)) - return 0 + return FALSE var/obj/machinery/field/generator/G = null var/steps = 0 if(!NSEW)//Make sure its ran right - return 0 + return FALSE for(var/dist in 0 to 7) // checks out to 8 tiles away for another generator T = get_step(T, NSEW) if(T.density)//We cant shoot a field though this - return 0 + return FALSE G = locate(/obj/machinery/field/generator) in T if(G) steps -= 1 if(!G.active) - return 0 + return FALSE break for(var/TC in T.contents) @@ -299,12 +299,12 @@ field_generator power level display if(ismob(A)) continue if(A.density) - return 0 + return FALSE steps++ if(!G) - return 0 + return FALSE T = loc for(var/dist in 0 to steps) // creates each field tile diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index f5e3bbc1417..2a191cff009 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -11,7 +11,7 @@ // You can buckle someone to the singularity generator, then start the engine. Fun! can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 buckle_requires_restraints = TRUE var/energy = 0 diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index d73c0e63e6f..4c0cf0af3ef 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -70,7 +70,7 @@ return ..() else last_failed_movement = direct - return 0 + return FALSE /obj/singularity/attack_hand(mob/user) consume(user) @@ -87,10 +87,10 @@ /obj/singularity/attackby(obj/item/W, mob/user, params) consume(user) - return 1 + return TRUE /obj/singularity/Process_Spacemove() //The singularity stops drifting for no man! - return 0 + return FALSE /obj/singularity/blob_act(obj/structure/blob/B) return @@ -252,18 +252,18 @@ dissipate = 0 if(current_size == allowed_size) investigate_log("grew to size [current_size]", INVESTIGATE_SINGULO) - return 1 + return TRUE else if(current_size < (--temp_allowed_size)) expand(temp_allowed_size) else - return 0 + return FALSE /obj/singularity/proc/check_energy() if(energy <= 0) investigate_log("collapsed.", INVESTIGATE_SINGULO) qdel(src) - return 0 + return FALSE switch(energy)//Some of these numbers might need to be changed up later -Mport if(1 to 199) allowed_size = STAGE_ONE @@ -280,7 +280,7 @@ allowed_size = STAGE_FIVE if(current_size != allowed_size) expand() - return 1 + return TRUE /obj/singularity/proc/eat() @@ -316,7 +316,7 @@ /obj/singularity/proc/move(force_move = 0) if(!move_self) - return 0 + return FALSE var/drifting_dir = pick(GLOB.alldirs - last_failed_movement) @@ -337,11 +337,11 @@ if(step(src, i)) //Move in each direction. if(check_cardinals_range(steps, FALSE)) //New location passes, return true. return TRUE - . = !. + return !. /obj/singularity/proc/check_turfs_in(direction = 0, step = 0) if(!direction) - return 0 + return FALSE var/steps = 0 if(!step) switch(current_size) @@ -362,7 +362,7 @@ for(var/i = 1 to steps) T = get_step(T,direction) if(!isturf(T)) - return 0 + return FALSE turfs.Add(T) var/dir2 = 0 var/dir3 = 0 @@ -377,35 +377,35 @@ for(var/j = 1 to steps-1) T2 = get_step(T2,dir2) if(!isturf(T2)) - return 0 + return FALSE turfs.Add(T2) for(var/k = 1 to steps-1) T = get_step(T,dir3) if(!isturf(T)) - return 0 + return FALSE turfs.Add(T) for(var/turf/T3 in turfs) if(isnull(T3)) continue if(!can_move(T3)) - return 0 - return 1 + return FALSE + return TRUE /obj/singularity/proc/can_move(turf/T) if(!T) - return 0 + return FALSE if((locate(/obj/machinery/field/containment) in T)||(locate(/obj/machinery/shieldwall) in T)) - return 0 + return FALSE else if(locate(/obj/machinery/field/generator) in T) var/obj/machinery/field/generator/G = locate(/obj/machinery/field/generator) in T if(G && G.active) - return 0 + return FALSE else if(locate(/obj/machinery/power/shieldwallgen) in T) var/obj/machinery/power/shieldwallgen/S = locate(/obj/machinery/power/shieldwallgen) in T if(S && S.active) - return 0 - return 1 + return FALSE + return TRUE /obj/singularity/proc/event() @@ -417,11 +417,11 @@ mezzer() if(3,4) //Sets all nearby mobs on fire if(current_size < STAGE_SIX) - return 0 + return FALSE combust_mobs() else - return 0 - return 1 + return FALSE + return TRUE /obj/singularity/proc/combust_mobs() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 48e39202a14..aea8321db0c 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -15,12 +15,16 @@ var/id var/obscured = FALSE - var/sunfrac = 0 //[0-1] measure of obscuration -- multipllier against power generation - var/azimuth_current = 0 //[0-360) degrees, which direction are we facing? + ///[0-1] measure of obscuration -- multipllier against power generation + var/sunfrac = 0 + ///[0-360) degrees, which direction are we facing? + var/azimuth_current = 0 var/azimuth_target = 0 //same but what way we're going to face next time we turn var/obj/machinery/power/solar_control/control - var/needs_to_turn = TRUE //do we need to turn next tick? - var/needs_to_update_solar_exposure = TRUE //do we need to call update_solar_exposure() next tick? + ///do we need to turn next tick? + var/needs_to_turn = TRUE + ///do we need to call update_solar_exposure() next tick? + var/needs_to_update_solar_exposure = TRUE var/obj/effect/overlay/panel /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 5ec1b412ea2..74502cfe07c 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -8,7 +8,7 @@ // Executing a traitor caught releasing tesla was never this fun! can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 buckle_requires_restraints = TRUE circuit = /obj/item/circuitboard/machine/tesla_coil @@ -109,7 +109,7 @@ density = TRUE can_buckle = TRUE - buckle_lying = FALSE + buckle_lying = 0 buckle_requires_restraints = TRUE /obj/machinery/power/grounding_rod/default_unfasten_wrench(mob/user, obj/item/I, time = 20) diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index 5b70fee96f7..9e6767dc642 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -89,17 +89,16 @@ //Checks for and Rejects bad region coordinates //Returns 1/0 /datum/map_generator/proc/checkRegion(turf/Start, turf/End) - . = 1 - if(!Start || !End) - return 0 //Just bail + return FALSE //Just bail if(Start.x > world.maxx || End.x > world.maxx) - . = 0 + return FALSE if(Start.y > world.maxy || End.y > world.maxy) - . = 0 + return FALSE if(Start.z > world.maxz || End.z > world.maxz) - . = 0 + return FALSE + return TRUE //Requests the mapGeneratorModule(s) to (re)generate @@ -153,10 +152,10 @@ return var/endInput = input(usr,"End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null - + if (isnull(endInput)) return - + //maxx maxy and current z so that if you fuck up, you only fuck up one entire z level instead of the entire universe if(!startInput || !endInput) to_chat(src, "Missing Input") diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm index 412a439a0ab..d5742fdb85a 100644 --- a/code/modules/procedural_mapping/mapGeneratorModule.dm +++ b/code/modules/procedural_mapping/mapGeneratorModule.dm @@ -105,17 +105,16 @@ //Checks and Rejects dense turfs /datum/map_generator_module/proc/checkPlaceAtom(turf/T) - . = 1 if(!T) - return 0 + return FALSE if(T.density) - . = 0 + return FALSE for(var/atom/A in T) if(A.density) - . = 0 - break + return FALSE if(!allowAtomsOnSpace && (isspaceturf(T))) - . = 0 + return FALSE + return TRUE /////////////////////////////////////////////////////////// diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm index 982d22493fc..62d6731f219 100644 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm @@ -15,7 +15,7 @@ ammo_type = /obj/item/ammo_casing/a357 caliber = "357" max_ammo = 6 - multiload = 0 + multiload = FALSE /obj/item/ammo_box/magazine/internal/rus357/Initialize() stored_ammo += new ammo_type(src) diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index a7469284a5c..d4df54f75c5 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -4,7 +4,7 @@ ammo_type = /obj/item/ammo_casing/a762 caliber = "a762" max_ammo = 5 - multiload = 1 + multiload = TRUE /obj/item/ammo_box/magazine/internal/boltaction/enchanted max_ammo = 1 diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm index a8dabe744fd..2f215e7d6be 100644 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm @@ -3,7 +3,7 @@ ammo_type = /obj/item/ammo_casing/shotgun/beanbag caliber = "shotgun" max_ammo = 4 - multiload = 0 + multiload = FALSE /obj/item/ammo_box/magazine/internal/shot/tube name = "dual feed shotgun internal tube" @@ -17,7 +17,7 @@ name = "combat shotgun internal magazine" ammo_type = /obj/item/ammo_casing/shotgun/buckshot max_ammo = 6 - + /obj/item/ammo_box/magazine/internal/shot/dual name = "double-barrel shotgun internal magazine" max_ammo = 2 diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm index 9d06483d06f..e383c692da1 100644 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm @@ -12,7 +12,7 @@ slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE var/obj/item/gun/ballistic/minigun/gun - var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded. + var/armed = FALSE //whether the gun is attached, FALSE is attached, TRUE is the gun is wielded. var/overheat = 0 var/overheat_max = 40 var/heat_diffusion = 1 @@ -34,9 +34,9 @@ if(src.loc == user) if(!armed) if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) - armed = 1 + armed = TRUE if(!user.put_in_hands(gun)) - armed = 0 + armed = FALSE to_chat(user, "You need a free hand to hold the gun!") return update_icon() @@ -84,7 +84,7 @@ if(!gun) gun = new(src) gun.forceMove(src) - armed = 0 + armed = FALSE if(user) to_chat(user, "You attach the [gun.name] to the [name].") else @@ -127,7 +127,7 @@ return /obj/item/gun/ballistic/minigun/dropped(mob/user) - SHOULD_CALL_PARENT(0) + SHOULD_CALL_PARENT(FALSE) if(ammo_pack) ammo_pack.attach_gun(user) else diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 07c8699cf3e..6c981212cbb 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -87,7 +87,7 @@ icon_state = "flatgun" /obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user) - SHOULD_CALL_PARENT(0) + SHOULD_CALL_PARENT(FALSE) to_chat(user, "As you try to pick up [src], it slips out of your grip..") if(prob(50)) to_chat(user, "..and vanishes from your vision! Where the hell did it go?") diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 8b25b0a64a3..7c0eef63b7e 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -91,7 +91,7 @@ "The Peacemaker" = "detective_peacemaker", "Black Panther" = "detective_panther" ) - + /// Used to avoid some redundancy on a revolver loaded with 357 regarding misfiring while being wrenched. var/skip_357_missfire_check = FALSE @@ -250,7 +250,7 @@ user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!") /obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. - clumsy_check = 0 + clumsy_check = FALSE /obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index d19f3b534f2..4f77d37f687 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -227,7 +227,7 @@ . = ..() if(. && slung) //sawing off the gun removes the sling new /obj/item/stack/cable_coil(get_turf(src), 10) - slung = 0 + slung = FALSE update_icon() lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index feb29e8cf70..ffdad6d584c 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -10,7 +10,7 @@ throwforce = 0 burst_size = 3 can_suppress = TRUE - clumsy_check = 0 + clumsy_check = FALSE item_flags = NONE casing_ejector = FALSE diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index f383c07789a..397f8b8c51c 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -13,7 +13,7 @@ name = "practice laser gun" desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) - clumsy_check = 0 + clumsy_check = FALSE item_flags = NONE /obj/item/gun/energy/laser/retro diff --git a/code/modules/projectiles/guns/misc/medbeam.dm b/code/modules/projectiles/guns/misc/medbeam.dm index 0e9658bcba5..ef7bef4b209 100644 --- a/code/modules/projectiles/guns/misc/medbeam.dm +++ b/code/modules/projectiles/guns/misc/medbeam.dm @@ -10,7 +10,7 @@ var/last_check = 0 var/check_delay = 10 //Check los as often as possible, max resolution is SSobj tick though var/max_range = 8 - var/active = 0 + var/active = FALSE var/datum/beam/current_beam = null var/mounted = 0 //Denotes if this is a handheld or mounted version @@ -37,7 +37,7 @@ if(active) qdel(current_beam) current_beam = null - active = 0 + active = FALSE on_beam_release(current_target) current_target = null @@ -87,7 +87,7 @@ if(mounted) user_turf = get_turf(user) else if(!istype(user_turf)) - return 0 + return FALSE var/obj/dummy = new(user_turf) dummy.pass_flags |= PASSTABLE|PASSGLASS|PASSGRILLE //Grille/Glass so it can be used through common windows for(var/turf/turf in getline(user_turf,target)) @@ -95,18 +95,18 @@ continue //Mechs are dense and thus fail the check if(turf.density) qdel(dummy) - return 0 + return FALSE for(var/atom/movable/AM in turf) if(!AM.CanPass(dummy,turf,1)) qdel(dummy) - return 0 + return FALSE for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams! if(B.owner.origin != current_beam.origin) explosion(B.loc,0,3,5,8) qdel(dummy) - return 0 + return FALSE qdel(dummy) - return 1 + return TRUE /obj/item/gun/medbeam/proc/on_beam_hit(mob/living/target) return @@ -128,7 +128,7 @@ //////////////////////////////Mech Version/////////////////////////////// /obj/item/gun/medbeam/mech - mounted = 1 + mounted = TRUE /obj/item/gun/medbeam/mech/Initialize() . = ..() diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index 2503b01d969..56b846034b3 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -8,7 +8,7 @@ throw_range = 7 force = 4 custom_materials = list(/datum/material/iron=2000) - clumsy_check = 0 + clumsy_check = FALSE fire_sound = 'sound/items/syringeproj.ogg' var/load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' var/list/syringes = list() @@ -44,7 +44,7 @@ /obj/item/gun/syringe/attack_self(mob/living/user) if(!syringes.len) to_chat(user, "[src] is empty!") - return 0 + return FALSE var/obj/item/reagent_containers/syringe/S = syringes[syringes.len] diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index e0fe135ddab..1876763e2c2 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -10,9 +10,9 @@ attack_verb_continuous = list("pokes") attack_verb_simple = list("poke") var/fail_message = "INVALID USER." - var/selfdestruct = 0 // Explode when user check is failed. - var/force_replace = 0 // Can forcefully replace other pins. - var/pin_removeable = 0 // Can be replaced by any pin. + var/selfdestruct = FALSE // Explode when user check is failed. + var/force_replace = FALSE // Can forcefully replace other pins. + var/pin_removeable = FALSE // Can be replaced by any pin. var/obj/item/gun/gun /obj/item/firing_pin/New(newloc) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 07793fe5c48..ef4a424ee20 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -371,7 +371,7 @@ if(can_overdose) if(R.overdose_threshold) if(R.volume >= R.overdose_threshold && !R.overdosed) - R.overdosed = 1 + R.overdosed = TRUE need_mob_update += R.overdose_start(C) log_game("[key_name(C)] has started overdosing on [R.name] at [R.volume] units.") if(R.addiction_threshold) @@ -582,7 +582,6 @@ while(reaction_occurred) update_total() - return 0 /// Remove every reagent except this one /datum/reagents/proc/isolate_reagent(reagent) @@ -625,7 +624,6 @@ else total_volume += R.volume - return 0 /// Removes all reagents /datum/reagents/proc/clear_reagents() @@ -635,7 +633,6 @@ del_reagent(R.type) if(my_atom) my_atom.on_reagent_change(CLEAR_REAGENTS) - return 0 /** * Applies the relevant expose_ proc for every reagent in this holder @@ -817,17 +814,14 @@ Needs matabolizing takes into consideration if the chemical is matabolizing when if (R.type == reagent) if(!amount) if(needs_metabolizing && !R.metabolizing) - return 0 + return FALSE return R else if(round(R.volume, CHEMICAL_QUANTISATION_LEVEL) >= amount) if(needs_metabolizing && !R.metabolizing) - return 0 + return FALSE return R - else - return 0 - - return 0 + return FALSE /// Get the amount of this reagent /datum/reagents/proc/get_reagent_amount(reagent) @@ -836,7 +830,6 @@ Needs matabolizing takes into consideration if the chemical is matabolizing when var/datum/reagent/R = _reagent if (R.type == reagent) return round(R.volume, CHEMICAL_QUANTISATION_LEVEL) - return 0 /// Get a comma separated string of every reagent name in this holder diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 3f25609be11..7f722b9eae1 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /// increases as addiction gets worse var/addiction_stage = 0 /// You fucked up and this is now triggering its overdose effects, purge that shit quick. - var/overdosed = 0 + var/overdosed = FALSE ///if false stops metab in liverless mobs var/self_consuming = FALSE ///affects how far it travels when sprayed @@ -96,14 +96,14 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) /// Applies this reagent to a [/mob/living] /datum/reagent/proc/expose_mob(mob/living/M, methods=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(!istype(M)) - return 0 + return FALSE if(methods & VAPOR) //smoke, foam, spray if(M.reagents) var/modifier = clamp((1 - touch_protection), 0, 1) var/amount = round(reac_volume*modifier, 0.1) if(amount >= 0.5) M.reagents.add_reagent(type, amount) - return 1 + return TRUE /// Applies this reagent to an [/obj] /datum/reagent/proc/expose_obj(obj/O, volume) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 3afae78b534..295a1da9dcf 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -50,7 +50,7 @@ /obj/item/reagent_containers/proc/canconsume(mob/eater, mob/user) if(!iscarbon(eater)) - return 0 + return FALSE var/mob/living/carbon/C = eater var/covered = "" if(C.is_mouth_covered(head_only = 1)) @@ -60,8 +60,8 @@ if(covered) var/who = (isnull(user) || eater == user) ? "your" : "[eater.p_their()]" to_chat(user, "You have to remove [who] [covered] first!") - return 0 - return 1 + return FALSE + return TRUE /* * On accidental consumption, transfer a portion of the reagents to the eater and the item it's in, then continue to the base proc (to deal with shattering glass containers) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 4a9d8b9765b..e6290be99eb 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -12,7 +12,7 @@ resistance_flags = ACID_PROOF reagent_flags = OPENCONTAINER slot_flags = ITEM_SLOT_BELT - var/ignore_flags = 0 + var/ignore_flags = NONE var/infinite = FALSE /obj/item/reagent_containers/hypospray/attack_paw(mob/user) diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index 0642313f5b5..d04dd3ad0d6 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -24,8 +24,8 @@ /obj/item/reagent_containers/pill/patch/canconsume(mob/eater, mob/user) if(!iscarbon(eater)) - return 0 - return 1 // Masks were stopping people from "eating" patches. Thanks, inheritance. + return FALSE + return TRUE // Masks were stopping people from "eating" patches. Thanks, inheritance. /obj/item/reagent_containers/pill/patch/libital name = "libital patch (brute)" diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 0c09186a29a..e67a36b326c 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -100,7 +100,7 @@ Slimecrossing Weapons /obj/item/gun/magic/bloodchill/process() charge_tick++ if(charge_tick < recharge_rate || charges >= max_charges) - return 0 + return FALSE charge_tick = 0 var/mob/living/M = loc if(istype(M) && M.blood_volume >= 20) @@ -108,7 +108,7 @@ Slimecrossing Weapons M.blood_volume -= 20 if(charges == 1) recharge_newshot() - return 1 + return TRUE /obj/item/ammo_casing/magic/bloodchill projectile_type = /obj/projectile/magic/bloodchill diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 4bb11af9000..43ec37a5d4f 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -56,7 +56,7 @@ */ /obj/item/slime_extract/proc/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) to_chat(user, "Nothing happened... This slime extract cannot be activated this way.") - return 0 + return FALSE /** * Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract. diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index bd424474a98..1c17412d270 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -20,7 +20,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) var/event = "" var/obj/machinery/keycard_auth/event_source var/mob/triggerer = null - var/waiting = 0 + var/waiting = FALSE /obj/machinery/keycard_auth/Initialize() . = ..() @@ -82,14 +82,14 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) /obj/machinery/keycard_auth/proc/sendEvent(event_type) triggerer = usr event = event_type - waiting = 1 + waiting = TRUE GLOB.keycard_events.fireEvent("triggerEvent", src) addtimer(CALLBACK(src, .proc/eventSent), 20) /obj/machinery/keycard_auth/proc/eventSent() triggerer = null event = "" - waiting = 0 + waiting = FALSE /obj/machinery/keycard_auth/proc/triggerEvent(source) icon_state = "auth_on" diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index be258176dcf..2880d3cd9df 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -506,8 +506,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th /obj/effect/proc_holder/spell/proc/can_be_cast_by(mob/caster) if((human_req || clothes_req) && !ishuman(caster)) - return 0 - return 1 + return FALSE + return TRUE /obj/effect/proc_holder/spell/targeted/proc/los_check(mob/A,mob/B) //Checks for obstacles from A to B @@ -517,9 +517,9 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th for(var/atom/movable/AM in turf) if(!AM.CanPass(dummy,turf,1)) qdel(dummy) - return 0 + return FALSE qdel(dummy) - return 1 + return TRUE /obj/effect/proc_holder/spell/proc/can_cast(mob/user = usr) if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.mob_spell_list)) diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index e81dea83bb8..a65297a5f98 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -36,7 +36,7 @@ if(tool) if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || HAS_TRAIT(tool, TRAIT_NODROP) || istype(tool, /obj/item/organ)) to_chat(user, "You can't seem to fit [tool] in [target]'s [target_zone]!") - return 0 + return FALSE else display_results(user, target, "You stuff [tool] into [target]'s [target_zone].", "[user] stuffs [tool] into [target]'s [target_zone]!", @@ -54,4 +54,4 @@ return ..() else to_chat(user, "You don't find anything in [target]'s [target_zone].") - return 0 + return FALSE diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 47820c366a6..829a74b6225 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -153,4 +153,4 @@ display_results(user, target, "You can't extract anything from [target]'s [parse_zone(target_zone)]!", "[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", "[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!") - return 0 + return FALSE diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index b7edd798ca8..f2f2b1ec6ed 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -149,7 +149,7 @@ if((organ_flags & ORGAN_FAILING)) if(!silent) to_chat(owner, "Your thrusters set seems to be broken!") - return 0 + return FALSE if(allow_thrust(0.01)) on = TRUE ion_trail.start() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index fb4f80f0d1c..cadd8e2d982 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -35,13 +35,13 @@ if(organ_flags & ORGAN_EDIBLE) AddComponent(/datum/component/edible, food_reagents, null, RAW | MEAT | GROSS, null, 10, null, null, null, CALLBACK(src, .proc/OnEatFrom)) -/obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) +/obj/item/organ/proc/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) if(!iscarbon(M) || owner == M) return var/obj/item/organ/replaced = M.getorganslot(slot) if(replaced) - replaced.Remove(M, special = 1) + replaced.Remove(M, special = TRUE) if(drop_if_replaced) replaced.forceMove(get_turf(M)) else diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 97c1e983db4..951ad2fae1d 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -8,10 +8,11 @@ /datum/surgery/prosthetic_replacement/can_start(mob/user, mob/living/carbon/target) if(!iscarbon(target)) - return 0 + return FALSE var/mob/living/carbon/C = target if(!C.get_bodypart(user.zone_selected)) //can only start if limb is missing - return 1 + return TRUE + return FALSE diff --git a/code/modules/surgery/surgery_helpers.dm b/code/modules/surgery/surgery_helpers.dm index 71106d66ddc..881dd89e0ff 100644 --- a/code/modules/surgery/surgery_helpers.dm +++ b/code/modules/surgery/surgery_helpers.dm @@ -32,42 +32,42 @@ switch(location) if(BODY_ZONE_HEAD) if(covered_locations & HEAD) - return 0 + return FALSE if(BODY_ZONE_PRECISE_EYES) if(covered_locations & HEAD || face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES) - return 0 + return FALSE if(BODY_ZONE_PRECISE_MOUTH) if(covered_locations & HEAD || face_covered & HIDEFACE || eyesmouth_covered & MASKCOVERSMOUTH || eyesmouth_covered & HEADCOVERSMOUTH) - return 0 + return FALSE if(BODY_ZONE_CHEST) if(covered_locations & CHEST) - return 0 + return FALSE if(BODY_ZONE_PRECISE_GROIN) if(covered_locations & GROIN) - return 0 + return FALSE if(BODY_ZONE_L_ARM) if(covered_locations & ARM_LEFT) - return 0 + return FALSE if(BODY_ZONE_R_ARM) if(covered_locations & ARM_RIGHT) - return 0 + return FALSE if(BODY_ZONE_L_LEG) if(covered_locations & LEG_LEFT) - return 0 + return FALSE if(BODY_ZONE_R_LEG) if(covered_locations & LEG_RIGHT) - return 0 + return FALSE if(BODY_ZONE_PRECISE_L_HAND) if(covered_locations & HAND_LEFT) - return 0 + return FALSE if(BODY_ZONE_PRECISE_R_HAND) if(covered_locations & HAND_RIGHT) - return 0 + return FALSE if(BODY_ZONE_PRECISE_L_FOOT) if(covered_locations & FOOT_LEFT) - return 0 + return FALSE if(BODY_ZONE_PRECISE_R_FOOT) if(covered_locations & FOOT_RIGHT) - return 0 + return FALSE - return 1 + return TRUE diff --git a/code/modules/swarmers/swarmer_objs.dm b/code/modules/swarmers/swarmer_objs.dm index ee56aff87f8..a7a657c1620 100644 --- a/code/modules/swarmers/swarmer_objs.dm +++ b/code/modules/swarmers/swarmer_objs.dm @@ -16,7 +16,7 @@ . = ..() set_light(glow_range) -/obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = NONE) +/obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) playsound(src, 'sound/weapons/egloves.ogg', 80, TRUE) diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index ab7dc917395..d06131801de 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -51,7 +51,7 @@ Notes: /datum/tooltip/proc/show(atom/movable/thing, params = null, title = null, content = null, theme = "default", special = "none") if (!thing || !params || (!title && !content) || !owner || !isnum(world.icon_size)) - return 0 + return FALSE if (!init) //Initialize some vars init = 1 @@ -83,7 +83,7 @@ Notes: if (queueHide) hide() - return 1 + return TRUE /datum/tooltip/proc/hide() diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 71805a8e6f0..f69847207e2 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -2,7 +2,7 @@ name = "ridden vehicle" can_buckle = TRUE max_buckled_mobs = 1 - buckle_lying = FALSE + buckle_lying = 0 default_driver_move = FALSE var/legs_required = 2 var/arms_required = 1 //why not? diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 1d1bded9308..91ba5605d34 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -920,7 +920,7 @@ GLOBAL_LIST_EMPTY(vending_products) var/obj/throw_item = null var/mob/living/target = locate() in view(7,src) if(!target) - return 0 + return FALSE for(var/datum/data/vending_product/R in shuffle(product_records)) if(R.amount <= 0) //Try to use a record that actually has something to dump. @@ -933,13 +933,13 @@ GLOBAL_LIST_EMPTY(vending_products) throw_item = new dump_path(loc) break if(!throw_item) - return 0 + return FALSE pre_throw(throw_item) throw_item.throw_at(target, 16, 3) visible_message("[src] launches [throw_item] at [target]!") - return 1 + return TRUE /** * A callback called before an item is tossed out * From 6de334414e7c15a92b7bb1a4dc000004d13e5ead Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 28 Aug 2020 14:26:41 -0700 Subject: [PATCH 05/40] Automatic changelog generation for PR #53221 [ci skip] --- html/changelogs/AutoChangeLog-pr-53221.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53221.yml diff --git a/html/changelogs/AutoChangeLog-pr-53221.yml b/html/changelogs/AutoChangeLog-pr-53221.yml new file mode 100644 index 00000000000..50a6b7f3295 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53221.yml @@ -0,0 +1,4 @@ +author: "TiviPlus" +delete-after: True +changes: + - refactor: "A bunch of 1 and 0 use the true/false define now and changed up a bunch of returns" From b4ec2c2c1a909150cebac52ecb0f79c1fd73a0ff Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 29 Aug 2020 00:02:09 +0000 Subject: [PATCH 06/40] Automatic changelog compile [ci skip] --- html/changelog.html | 69 ++++++++++++++++++---- html/changelogs/.all_changelog.yml | 51 ++++++++++++++++ html/changelogs/AutoChangeLog-pr-52515.yml | 4 -- html/changelogs/AutoChangeLog-pr-52680.yml | 6 -- html/changelogs/AutoChangeLog-pr-52865.yml | 10 ---- html/changelogs/AutoChangeLog-pr-53005.yml | 4 -- html/changelogs/AutoChangeLog-pr-53116.yml | 5 -- html/changelogs/AutoChangeLog-pr-53147.yml | 4 -- html/changelogs/AutoChangeLog-pr-53167.yml | 4 -- html/changelogs/AutoChangeLog-pr-53178.yml | 4 -- html/changelogs/AutoChangeLog-pr-53188.yml | 6 -- html/changelogs/AutoChangeLog-pr-53214.yml | 4 -- html/changelogs/AutoChangeLog-pr-53216.yml | 4 -- html/changelogs/AutoChangeLog-pr-53221.yml | 4 -- html/changelogs/AutoChangeLog-pr-53245.yml | 4 -- 15 files changed, 109 insertions(+), 74 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-52515.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-52680.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-52865.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53005.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53116.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53147.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53167.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53178.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53188.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53214.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53216.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53221.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53245.yml diff --git a/html/changelog.html b/html/changelog.html index eb3fe1cafc6..4fd172b2aa2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,6 +51,64 @@ -->
+

29 August 2020

+

ATHATH updated:

+
    +
  • Blob spores from gold slime core and hostile life reactions are now marked as being independent, meaning that they can now drag things, but can no longer freely walk through blob tiles.
  • +
  • Independent blob spores and blobbernauts can now speak over blob chat like overmind-dependent blob mobs do.
  • +
  • Blob spores can no longer damage the environment, for realzies this time. This change does not affect blob zombies.
  • +
  • Removed an unused variable from tech nodes (and the unused proc that references it).
  • +
+

ArcaneMusic updated:

+
    +
  • Admins can now spawn the Teambuilding machine for assign teams, like Red or Blue, quickly!
  • +
  • Sinks and showers can now have reagents piped into them.
  • +
  • Using metal sheets on reagent dispensers will now produce a plumbing-enabled supply tank for station use.
  • +
  • Added a new stock part, the water recycler, used in building showers and sinks from scratch.
  • +
  • Hydroponics trays are now plumbing enabled. Water and nutrients will be sorted into their appropriate slots when piped in.
  • +
  • Sinks and showers now have internal water reservoirs, and start filled with water.
  • +
  • Showers and sinks must be constructed from a frame, then finished with a water recycler. remove: Hydroponics hoses have been removed in favor of actual plumbing between machines.
  • +
+

Donkie updated:

+
    +
  • Fixed regular pump on map icon north/south being misaligned by 1 pixel
  • +
+

EdgeLordExe updated:

+
    +
  • Rust_spread will no longer lag servers into oblivion
  • +
  • Changed a few flavour texts to better represent lore.
  • +
  • Rustbringer's oath now properly only heals while on rusted tiles.
  • +
+

Helianthus00 updated:

+
    +
  • Deltastation: made a maint area below the captain's office
  • +
+

Krysonism updated:

+
    +
  • granting a mob sentience, with the sentience potion also tames it.
  • +
+

Melbert updated:

+
    +
  • You can now remove items from food storage by clicking on them on grab intent.
  • +
  • Componentizes food storage from food/snacks/store.
  • +
+

TiviPlus updated:

+
    +
  • A bunch of 1 and 0 use the true/false define now and changed up a bunch of returns
  • +
+

VexingRaven updated:

+
    +
  • Plasmaman Supply Kit description now properly lists the envirosuit gloves it contains
  • +
+

Wayland-Smithy updated:

+
    +
  • A vulnerability in the AI chamber anti-abduction foil lining has been fixed.
  • +
+

actioninja updated:

+
    +
  • Automatic glide size adjustment for smoother movement
  • +
+

27 August 2020

ATHATH updated:

    @@ -2722,17 +2780,6 @@
    • An explosion compressor has been added to science. It makes raw anomaly cores into proper anomaly cores using prepared TTVs of a specific required blast radius.
    - -

    27 June 2020

    -

    Ryll/Shaps updated:

    -
      -
    • Too much bone hurting juice REALLY hurts your bones, oof.
    • -
    -

    Tlaltecuhtli updated:

    -
      -
    • the nanotransen research science division found that epinephrine has healing effects to people who drank lexorin
    • -
    • eye stabbing returns a normal attack if it fails instead of doing nothing
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 18568ad1b2e..dd7d478a2a9 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -42389,3 +42389,54 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. break the panel.' - admin: Unthickened hrefs.log (no more ping hrefs) - admin: Thickened tgui.log (logs actions, interacted object and mob location) +2020-08-29: + ATHATH: + - bugfix: Blob spores from gold slime core and hostile life reactions are now marked + as being independent, meaning that they can now drag things, but can no longer + freely walk through blob tiles. + - balance: Independent blob spores and blobbernauts can now speak over blob chat + like overmind-dependent blob mobs do. + - bugfix: Blob spores can no longer damage the environment, for realzies this time. + This change does not affect blob zombies. + - rscdel: Removed an unused variable from tech nodes (and the unused proc that references + it). + ArcaneMusic: + - rscadd: Admins can now spawn the Teambuilding machine for assign teams, like Red + or Blue, quickly! + - rscadd: Sinks and showers can now have reagents piped into them. + - rscadd: Using metal sheets on reagent dispensers will now produce a plumbing-enabled + supply tank for station use. + - rscadd: Added a new stock part, the water recycler, used in building showers and + sinks from scratch. + - rscadd: Hydroponics trays are now plumbing enabled. Water and nutrients will be + sorted into their appropriate slots when piped in. + - tweak: Sinks and showers now have internal water reservoirs, and start filled + with water. + - tweak: 'Showers and sinks must be constructed from a frame, then finished with + a water recycler. remove: Hydroponics hoses have been removed in favor of actual + plumbing between machines.' + Donkie: + - bugfix: Fixed regular pump on map icon north/south being misaligned by 1 pixel + EdgeLordExe: + - tweak: Rust_spread will no longer lag servers into oblivion + - tweak: Changed a few flavour texts to better represent lore. + - bugfix: Rustbringer's oath now properly only heals while on rusted tiles. + Helianthus00: + - tweak: 'Deltastation: made a maint area below the captain''s office' + Krysonism: + - tweak: granting a mob sentience, with the sentience potion also tames it. + Melbert: + - tweak: You can now remove items from food storage by clicking on them on grab + intent. + - code_imp: Componentizes food storage from food/snacks/store. + TiviPlus: + - refactor: A bunch of 1 and 0 use the true/false define now and changed up a bunch + of returns + VexingRaven: + - tweak: Plasmaman Supply Kit description now properly lists the envirosuit gloves + it contains + Wayland-Smithy: + - bugfix: A vulnerability in the AI chamber anti-abduction foil lining has been + fixed. + actioninja: + - rscadd: Automatic glide size adjustment for smoother movement diff --git a/html/changelogs/AutoChangeLog-pr-52515.yml b/html/changelogs/AutoChangeLog-pr-52515.yml deleted file mode 100644 index 9707ca8e716..00000000000 --- a/html/changelogs/AutoChangeLog-pr-52515.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "actioninja" -delete-after: True -changes: - - rscadd: "Automatic glide size adjustment for smoother movement" diff --git a/html/changelogs/AutoChangeLog-pr-52680.yml b/html/changelogs/AutoChangeLog-pr-52680.yml deleted file mode 100644 index df78a80d47c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-52680.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "EdgeLordExe" -delete-after: True -changes: - - tweak: "Rust_spread will no longer lag servers into oblivion" - - tweak: "Changed a few flavour texts to better represent lore." - - bugfix: "Rustbringer's oath now properly only heals while on rusted tiles." diff --git a/html/changelogs/AutoChangeLog-pr-52865.yml b/html/changelogs/AutoChangeLog-pr-52865.yml deleted file mode 100644 index 4e7ce03ac2a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-52865.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - rscadd: "Sinks and showers can now have reagents piped into them." - - rscadd: "Using metal sheets on reagent dispensers will now produce a plumbing-enabled supply tank for station use." - - rscadd: "Added a new stock part, the water recycler, used in building showers and sinks from scratch." - - rscadd: "Hydroponics trays are now plumbing enabled. Water and nutrients will be sorted into their appropriate slots when piped in." - - tweak: "Sinks and showers now have internal water reservoirs, and start filled with water." - - tweak: "Showers and sinks must be constructed from a frame, then finished with a water recycler. -remove: Hydroponics hoses have been removed in favor of actual plumbing between machines." diff --git a/html/changelogs/AutoChangeLog-pr-53005.yml b/html/changelogs/AutoChangeLog-pr-53005.yml deleted file mode 100644 index 21d2f657f5e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53005.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Wayland-Smithy" -delete-after: True -changes: - - bugfix: "A vulnerability in the AI chamber anti-abduction foil lining has been fixed." diff --git a/html/changelogs/AutoChangeLog-pr-53116.yml b/html/changelogs/AutoChangeLog-pr-53116.yml deleted file mode 100644 index c9b00f796c1..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53116.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - tweak: "You can now remove items from food storage by clicking on them on grab intent." - - code_imp: "Componentizes food storage from food/snacks/store." diff --git a/html/changelogs/AutoChangeLog-pr-53147.yml b/html/changelogs/AutoChangeLog-pr-53147.yml deleted file mode 100644 index 541274ede5a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53147.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - rscadd: "Admins can now spawn the Teambuilding machine for assign teams, like Red or Blue, quickly!" diff --git a/html/changelogs/AutoChangeLog-pr-53167.yml b/html/changelogs/AutoChangeLog-pr-53167.yml deleted file mode 100644 index dbcb2b1e9fc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53167.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Krysonism" -delete-after: True -changes: - - tweak: "granting a mob sentience, with the sentience potion also tames it." diff --git a/html/changelogs/AutoChangeLog-pr-53178.yml b/html/changelogs/AutoChangeLog-pr-53178.yml deleted file mode 100644 index af0ca113d46..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53178.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "VexingRaven" -delete-after: True -changes: - - tweak: "Plasmaman Supply Kit description now properly lists the envirosuit gloves it contains" diff --git a/html/changelogs/AutoChangeLog-pr-53188.yml b/html/changelogs/AutoChangeLog-pr-53188.yml deleted file mode 100644 index e6805957046..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53188.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "ATHATH" -delete-after: True -changes: - - bugfix: "Blob spores from gold slime core and hostile life reactions are now marked as being independent, meaning that they can now drag things, but can no longer freely walk through blob tiles." - - balance: "Independent blob spores and blobbernauts can now speak over blob chat like overmind-dependent blob mobs do." - - bugfix: "Blob spores can no longer damage the environment, for realzies this time. This change does not affect blob zombies." diff --git a/html/changelogs/AutoChangeLog-pr-53214.yml b/html/changelogs/AutoChangeLog-pr-53214.yml deleted file mode 100644 index d9232bb46f3..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53214.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ATHATH" -delete-after: True -changes: - - rscdel: "Removed an unused variable from tech nodes (and the unused proc that references it)." diff --git a/html/changelogs/AutoChangeLog-pr-53216.yml b/html/changelogs/AutoChangeLog-pr-53216.yml deleted file mode 100644 index de06ca4aea8..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53216.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Donkie" -delete-after: True -changes: - - bugfix: "Fixed regular pump on map icon north/south being misaligned by 1 pixel" diff --git a/html/changelogs/AutoChangeLog-pr-53221.yml b/html/changelogs/AutoChangeLog-pr-53221.yml deleted file mode 100644 index 50a6b7f3295..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53221.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TiviPlus" -delete-after: True -changes: - - refactor: "A bunch of 1 and 0 use the true/false define now and changed up a bunch of returns" diff --git a/html/changelogs/AutoChangeLog-pr-53245.yml b/html/changelogs/AutoChangeLog-pr-53245.yml deleted file mode 100644 index 5226193ffa4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53245.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Helianthus00" -delete-after: True -changes: - - tweak: "Deltastation: made a maint area below the captain's office" From 06dd141ad6d19a7273b250c6ec9ed74e02bba773 Mon Sep 17 00:00:00 2001 From: uomo <51800976+uomo91@users.noreply.github.com> Date: Fri, 28 Aug 2020 20:16:24 -0500 Subject: [PATCH 07/40] Remove redundant boxes. (#53249) This removes a box of zipties and a box of flashbangs from Delta's warden locker. This locker type already contains a box of each of the above, it certainly does not need two of each. I messed this up when making a recent PR involving pets. --- _maps/map_files/Deltastation/DeltaStation2.dmm | 2 -- 1 file changed, 2 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index b9ae22105bd..51775486180 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -55936,8 +55936,6 @@ "cbF" = ( /obj/structure/closet/secure_closet/warden, /obj/item/clothing/under/rank/security/warden/grey, -/obj/item/storage/box/flashbangs, -/obj/item/storage/box/handcuffs, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 4 From 752305d664b5acbdf377984ff968e56dce29369c Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Fri, 28 Aug 2020 20:20:59 -0700 Subject: [PATCH 08/40] Fix ghost role spawners keeping the expanded view range (#53198) Fixes minor dumb shit with view_size not resetting. --- code/modules/mob/login.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 5dc389c5d93..c11605297f5 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -74,7 +74,10 @@ update_client_colour() update_mouse_pointer() if(client) - client.change_view(getScreenSize(client.prefs.widescreenpref)) // Resets the client.view in case it was changed. + if(client.view_size) + client.view_size.resetToDefault() // Resets the client.view in case it was changed. + else + client.change_view(getScreenSize(client.prefs.widescreenpref)) if(client.player_details.player_actions.len) for(var/datum/action/A in client.player_details.player_actions) From dd42699f86b30ceda0af4bef30ad65ee50e10590 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 28 Aug 2020 20:21:03 -0700 Subject: [PATCH 09/40] Automatic changelog generation for PR #53198 [ci skip] --- html/changelogs/AutoChangeLog-pr-53198.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53198.yml diff --git a/html/changelogs/AutoChangeLog-pr-53198.yml b/html/changelogs/AutoChangeLog-pr-53198.yml new file mode 100644 index 00000000000..7331d13abbd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53198.yml @@ -0,0 +1,4 @@ +author: "LemonInTheDark" +delete-after: True +changes: + - bugfix: "You can no longer increase your view range by messing about with ghostroles" From 4174ceb1138b3e69ae0da5ed9690cc5cfed9d53a Mon Sep 17 00:00:00 2001 From: YPOQ <30683121+YPOQ@users.noreply.github.com> Date: Fri, 28 Aug 2020 23:04:02 -0600 Subject: [PATCH 10/40] Fixes silicon/parrot radio (#53296) Silicons and parrots can speak into their radios again. This was broken in #53221 because the . != 0 was incorrectly translated to !. --- code/modules/mob/living/silicon/silicon_say.dm | 2 +- code/modules/mob/living/simple_animal/bot/bot.dm | 2 +- code/modules/mob/living/simple_animal/parrot.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index 1401c21e42e..f147d28e7f6 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -31,7 +31,7 @@ /mob/living/silicon/radio(message, list/message_mods = list(), list/spans, language) . = ..() - if(!.) + if(.) return if(message_mods[MODE_HEADSET]) if(radio) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 5fded700f2a..bcfdd6fe341 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -404,7 +404,7 @@ /mob/living/simple_animal/bot/radio(message, list/message_mods = list(), list/spans, language) . = ..() - if(!.) + if(.) return if(message_mods[MODE_HEADSET]) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 52124149992..310125df08a 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -159,7 +159,7 @@ /mob/living/simple_animal/parrot/radio(message, list/message_mods = list(), list/spans, language) //literally copied from human/radio(), but there's no other way to do this. at least it's better than it used to be. . = ..() - if(!.) + if(.) return if(message_mods[MODE_HEADSET]) From d4477b1a5dd160793365246852a29abe403bc618 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 28 Aug 2020 22:04:06 -0700 Subject: [PATCH 11/40] Automatic changelog generation for PR #53296 [ci skip] --- html/changelogs/AutoChangeLog-pr-53296.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53296.yml diff --git a/html/changelogs/AutoChangeLog-pr-53296.yml b/html/changelogs/AutoChangeLog-pr-53296.yml new file mode 100644 index 00000000000..5b53a476028 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53296.yml @@ -0,0 +1,4 @@ +author: "YPOQ" +delete-after: True +changes: + - bugfix: "Silicons and parrots can speak into their radios again." From 75415d3eb53f108bd90ac9d1c11d5604432a7774 Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Sat, 29 Aug 2020 12:11:37 +0200 Subject: [PATCH 12/40] Refactors burgers to use components & auto-eating (#53224) --- .../icemoon_underground_abandoned_village.dmm | 2 +- _maps/RandomZLevels/Academy.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 2 +- _maps/shuttles/emergency_cruise.dmm | 2 +- _maps/shuttles/emergency_luxury.dmm | 2 +- _maps/shuttles/whiteship_kilo.dmm | 2 +- code/datums/components/food/edible.dm | 14 +- .../game/objects/effects/spawners/lootdrop.dm | 6 +- code/game/objects/items/food/burgers.dm | 368 ++++++++++++++++ code/modules/cargo/bounties/chef.dm | 2 +- .../food_and_drinks/food/snacks_burgers.dm | 415 ------------------ .../recipes/tablecraft/recipes_burger.dm | 74 ++-- code/modules/vending/liberation.dm | 8 +- tgstation.dme | 2 +- 14 files changed, 433 insertions(+), 468 deletions(-) create mode 100644 code/game/objects/items/food/burgers.dm delete mode 100644 code/modules/food_and_drinks/food/snacks_burgers.dm diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 95499e5a1f3..7cbbaf16f80 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -384,7 +384,7 @@ "GK" = ( /obj/item/clothing/head/bearpelt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/burger/fish, +/obj/item/food/burger/fish, /obj/item/reagent_containers/food/drinks/beer{ pixel_x = -4 }, diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 8dd85592076..6043b0ea763 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -1320,7 +1320,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/reagent_containers/food/snacks/burger/spell, +/obj/item/food/burger/spell, /obj/effect/turf_decal/tile/blue{ dir = 4 }, diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index f039c9068a0..d331d42e911 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -13603,7 +13603,7 @@ "El" = ( /obj/structure/table/wood, /obj/item/storage/bag/tray, -/obj/item/reagent_containers/food/snacks/burger/spell, +/obj/item/food/burger/spell, /turf/open/floor/carpet, /area/wizard_station) "Em" = ( diff --git a/_maps/shuttles/emergency_cruise.dmm b/_maps/shuttles/emergency_cruise.dmm index c32ee237bc8..16596547877 100644 --- a/_maps/shuttles/emergency_cruise.dmm +++ b/_maps/shuttles/emergency_cruise.dmm @@ -257,7 +257,7 @@ /area/template_noop) "kJ" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/snacks/burger/baconburger{ +/obj/item/food/burger/baconburger{ pixel_x = 3 }, /obj/item/reagent_containers/food/snacks/cracker{ diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 7c9ea9ecdad..5cf7597bec8 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -232,7 +232,7 @@ /turf/open/floor/mineral/diamond, /area/shuttle/escape/luxury) "aN" = ( -/obj/item/reagent_containers/food/snacks/burger/baconburger{ +/obj/item/food/burger/baconburger{ pixel_y = 2 }, /obj/structure/table/wood/fancy/black, diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index e881e56aabb..9ab91165ab3 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -1450,7 +1450,7 @@ /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, /obj/item/storage/bag/tray, -/obj/item/reagent_containers/food/snacks/burger/bearger, +/obj/item/food/burger/bearger, /turf/open/floor/wood{ icon_state = "wood-broken3" }, diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 4886c8b4df4..a3b90c8c131 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -40,7 +40,7 @@ Behavior that's still missing from this component that original food items had t food_flags = NONE, foodtypes = NONE, volume = 50, - eat_time = 30, + eat_time = 10, list/tastes, list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), bite_consumption = 2, @@ -55,6 +55,9 @@ Behavior that's still missing from this component that original food items had t if(isitem(parent)) RegisterSignal(parent, COMSIG_ITEM_ATTACK, .proc/UseFromHand) RegisterSignal(parent, COMSIG_ITEM_FRIED, .proc/OnFried) + var/obj/item/item = parent + item.grind_results = list() //Cursed but this is how snacks did it, grinding needs a refactor in the future. + else if(isturf(parent)) RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/TryToEatTurf) @@ -144,8 +147,12 @@ Behavior that's still missing from this component that original food items had t set waitfor = FALSE + if(QDELETED(parent)) + return + var/atom/owner = parent + if(feeder.a_intent == INTENT_HARM) return if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it. @@ -203,6 +210,11 @@ Behavior that's still missing from this component that original food items had t TakeBite(eater, feeder) + //If we're not force-feeding, try take another bite + if(eater == feeder) + INVOKE_ASYNC(src, .proc/TryToEat, eater, feeder) + + ///This function lets the eater take a bite and transfers the reagents to the eater. /datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 8bb94375d4e..434bf00b082 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -231,9 +231,9 @@ /obj/item/reagent_containers/food/snacks/bearsteak, /obj/item/reagent_containers/food/snacks/enchiladas, /obj/item/reagent_containers/food/snacks/stewedsoymeat, - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/burger/superbite, - /obj/item/reagent_containers/food/snacks/burger/fivealarm) + /obj/item/food/burger/bigbite, + /obj/item/food/burger/superbite, + /obj/item/food/burger/fivealarm) /obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload) loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) diff --git a/code/game/objects/items/food/burgers.dm b/code/game/objects/items/food/burgers.dm new file mode 100644 index 00000000000..3a68ccd05db --- /dev/null +++ b/code/game/objects/items/food/burgers.dm @@ -0,0 +1,368 @@ +/obj/item/food/burger + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "hburger" + bite_consumption = 3 + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 1) + tastes = list("bun" = 2, "beef patty" = 4) + foodtypes = GRAIN | MEAT //lettuce doesn't make burger a vegetable. + eat_time = 15 //Quick snack + +/obj/item/food/burger/plain + name = "burger" + desc = "The cornerstone of every nutritious breakfast." + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 1) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/plain/Initialize() + . = ..() + if(prob(1)) + new/obj/effect/particle_effect/smoke(get_turf(src)) + playsound(src, 'sound/effects/smoke.ogg', 50, TRUE) + visible_message("Oh, ye gods! [src] is ruined! But what if...?") + name = "steamed ham" + desc = pick("Ahh, Head of Personnel, welcome. I hope you're prepared for an unforgettable luncheon!", + "And you call these steamed hams despite the fact that they are obviously microwaved?", + "Aurora Station 13? At this time of shift, in this time of year, in this sector of space, localized entirely within your freezer?", + "You know, these hamburgers taste quite similar to the ones they have at the Maltese Falcon.") + +/obj/item/food/burger/human + name = "human burger" + desc = "A bloody burger." + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 5) + tastes = list("bun" = 2, "long pig" = 4) + foodtypes = MEAT | GRAIN | GROSS + var/subjectname = "" + var/subjectjob = null + +/obj/item/food/burger/human/CheckParts(list/parts_list) + ..() + var/obj/item/reagent_containers/food/snacks/meat/M = locate(/obj/item/reagent_containers/food/snacks/meat/steak/plain/human) in contents + if(M) + subjectname = M.subjectname + subjectjob = M.subjectjob + if(subjectname) + name = "[subjectname] burger" + else if(subjectjob) + name = "[subjectjob] burger" + qdel(M) + + +/obj/item/food/burger/corgi + name = "corgi burger" + desc = "You monster." + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 6) + foodtypes = GRAIN | MEAT | GROSS + +/obj/item/food/burger/appendix + name = "appendix burger" + desc = "Tastes like appendicitis." + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 7) + icon_state = "appendixburger" + tastes = list("bun" = 4, "grass" = 2) + foodtypes = GRAIN | MEAT | GROSS + +/obj/item/food/burger/fish + name = "fillet -o- carp sandwich" + desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." + icon_state = "fishburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 4) + tastes = list("bun" = 4, "fish" = 4) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/tofu + name = "tofu burger" + desc = "What.. is that meat?" + icon_state = "tofuburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 3) + tastes = list("bun" = 4, "tofu" = 4) + foodtypes = GRAIN | VEGETABLES + +/obj/item/food/burger/roburger + name = "roburger" + desc = "The lettuce is the only organic component. Beep." + icon_state = "roburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/nanomachines = 7, /datum/reagent/consumable/nutriment/vitamin = 6) + tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) + foodtypes = GRAIN | TOXIC + +/obj/item/food/burger/roburgerbig + name = "roburger" + desc = "This massive patty looks like poison. Beep." + icon_state = "roburger" + max_volume = 120 + food_reagents = list(/datum/reagent/consumable/nutriment = 11, /datum/reagent/nanomachines = 140, /datum/reagent/consumable/nutriment/vitamin = 15) + tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) + foodtypes = GRAIN | TOXIC + +/obj/item/food/burger/xeno + name = "xenoburger" + desc = "Smells caustic. Tastes like heresy." + icon_state = "xburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 7) + tastes = list("bun" = 4, "acid" = 4) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/bearger + name = "bearger" + desc = "Best served rawr." + icon_state = "bearger" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 8, /datum/reagent/consumable/nutriment/vitamin = 7) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/clown + name = "clown burger" + desc = "This tastes funny..." + icon_state = "clownburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 12, /datum/reagent/medicine/mannitol = 11, /datum/reagent/consumable/nutriment/vitamin = 6) + foodtypes = GRAIN | FRUIT + +/obj/item/food/burger/mime + name = "mime burger" + desc = "Its taste defies language." + icon_state = "mimeburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 7, /datum/reagent/consumable/nothing = 6) + foodtypes = GRAIN + +/obj/item/food/burger/brain + name = "brainburger" + desc = "A strange looking burger. It looks almost sentient." + icon_state = "brainburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/medicine/mannitol = 11, /datum/reagent/consumable/nutriment/vitamin = 6) + tastes = list("bun" = 4, "brains" = 2) + foodtypes = GRAIN | MEAT | GROSS + +/obj/item/food/burger/ghost + name = "ghost burger" + desc = "Too Spooky!" + icon_state = "ghostburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 13, /datum/reagent/consumable/sodiumchloride = 5) + tastes = list("bun" = 2, "ectoplasm" = 4) + foodtypes = GRAIN + alpha = 170 + verb_say = "moans" + verb_yell = "wails" + +/obj/item/food/burger/ghost/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/food/burger/ghost/process() + if(!isturf(loc)) //no floating out of bags + return + var/paranormal_activity = rand(100) + switch(paranormal_activity) + if(97 to 100) + audible_message("[src] rattles a length of chain.") + playsound(loc,'sound/spookoween/chain_rattling.ogg', 300, TRUE) + if(91 to 96) + say(pick("OoOoOoo.", "OoooOOooOoo!!")) + if(84 to 90) + dir = pick(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) + step(src, dir) + if(71 to 83) + step(src, dir) + if(65 to 70) + var/obj/machinery/light/L = locate(/obj/machinery/light) in view(4, src) + if(L) + L.flicker() + if(62 to 64) + playsound(loc,pick('sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) + if(61) + visible_message("[src] spews out a glob of ectoplasm!") + new /obj/effect/decal/cleanable/greenglow/ecto(loc) + playsound(loc,'sound/effects/splat.ogg', 200, TRUE) + + //If i was less lazy i would make the burger forcefeed itself to a nearby mob here. + +/obj/item/food/burger/ghost/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/item/food/burger/red + name = "red burger" + desc = "Perfect for hiding the fact it's burnt to a crisp." + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/red = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/orange + name = "orange burger" + desc = "Contains 0% juice." + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/orange = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/yellow + name = "yellow burger" + desc = "Bright to the last bite." + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/yellow = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/green + name = "green burger" + desc = "It's not tainted meat, it's painted meat!" + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/green = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/blue + name = "blue burger" + desc = "Is this blue rare?" + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/blue = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/purple + name = "purple burger" + desc = "Regal and low class at the same time." + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/purple = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/black + name = "black burger" + desc = "This is overcooked." + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/black = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/white + name = "white burger" + desc = "Delicous Titanium!" + icon_state = "cburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/colorful_reagent/powder/white = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/spell + name = "spell burger" + desc = "This is absolutely Ei Nath." + icon_state = "spellburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 11) + tastes = list("bun" = 4, "magic" = 2) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/bigbite + name = "big bite burger" + desc = "Forget the Big Mac. THIS is the future!" + icon_state = "bigbiteburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 7) + w_class = WEIGHT_CLASS_NORMAL + foodtypes = GRAIN | MEAT | DAIRY + +/obj/item/food/burger/jelly + name = "jelly burger" + desc = "Culinary delight..?" + icon_state = "jellyburger" + tastes = list("bun" = 4, "jelly" = 2) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/jelly/slime + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/toxin/slimejelly = 10, /datum/reagent/consumable/nutriment/vitamin = 6) + foodtypes = GRAIN | TOXIC + +/obj/item/food/burger/jelly/cherry + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/cherryjelly = 10, /datum/reagent/consumable/nutriment/vitamin = 6) + foodtypes = GRAIN | FRUIT + +/obj/item/food/burger/superbite + name = "super bite burger" + desc = "This is a mountain of a burger. FOOD!" + icon_state = "superbiteburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/nutriment/protein = 42, /datum/reagent/consumable/nutriment/vitamin = 15) + w_class = WEIGHT_CLASS_NORMAL + bite_consumption = 7 + max_volume = 100 + tastes = list("bun" = 4, "type two diabetes" = 10) + foodtypes = GRAIN | MEAT | DAIRY + +/obj/item/food/burger/fivealarm + name = "five alarm burger" + desc = "HOT! HOT!" + icon_state = "fivealarmburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/capsaicin = 5, /datum/reagent/consumable/condensedcapsaicin = 5, /datum/reagent/consumable/nutriment/vitamin = 6) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/rat + name = "rat burger" + desc = "Pretty much what you'd expect..." + icon_state = "ratburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 2) + foodtypes = GRAIN | MEAT | GROSS + +/obj/item/food/burger/baseball + name = "home run baseball burger" + desc = "It's still warm. The steam coming off of it looks like baseball." + icon_state = "baseball" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 2) + foodtypes = GRAIN | GROSS + +/obj/item/food/burger/baconburger + name = "bacon burger" + desc = "The perfect combination of all things American." + icon_state = "baconburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 11, /datum/reagent/consumable/nutriment/vitamin = 2) + tastes = list("bacon" = 4, "bun" = 2) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/empoweredburger + name = "empowered burger" + desc = "It's shockingly good, if you live off of electricity that is." + icon_state = "empoweredburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/liquidelectricity = 5) + tastes = list("bun" = 2, "pure electricity" = 4) + foodtypes = GRAIN | TOXIC + +/obj/item/food/burger/crab + name = "crab burger" + desc = "A delicious patty of the crabby kind, slapped in between a bun." + icon_state = "crabburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 4) + tastes = list("bun" = 2, "crab meat" = 4) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/soylent + name = "soylent burger" + desc = "An eco-friendly burger made using upcycled low value biomass." + icon_state = "soylentburger" + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 4) + tastes = list("bun" = 2, "assistant" = 4) + foodtypes = GRAIN | MEAT | DAIRY + +/obj/item/food/burger/rib + name = "mcrib" + desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it." + icon_state = "mcrib" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/bbqsauce = 1) + tastes = list("bun" = 2, "pork patty" = 4) + foodtypes = GRAIN | MEAT + +/obj/item/food/burger/mcguffin + name = "mcguffin" + desc = "A cheap and greasy imitation of an eggs benedict." + icon_state = "mcguffin" + tastes = list("muffin" = 2, "bacon" = 3) + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/eggyolk = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 1) + foodtypes = GRAIN | MEAT | BREAKFAST + +/obj/item/food/burger/chicken + name = "chicken sandwich" //Apparently the proud people of Americlapstan object to this thing being called a burger. Apparently McDonald's just calls it a burger in Europe as to not scare and confuse us. + desc = "A delicious chicken sandwich, it is said the proceeds from this treat helps criminalize disarming people on the space frontier." + icon_state = "chickenburger" + tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/mayonnaise = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/cooking_oil = 2) + foodtypes = GRAIN | MEAT | FRIED + +/obj/item/food/burger/cheese + name = "cheese burger" + desc = "This noble burger stands proudly clad in golden cheese." + icon_state = "cheeseburger" + tastes = list("bun" = 2, "beef patty" = 4, "cheese" = 3) + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 7, /datum/reagent/consumable/nutriment/vitamin = 2) + foodtypes = GRAIN | MEAT | DAIRY + +/obj/item/food/burger/cheese/Initialize() + . = ..() + if(prob(33)) + icon_state = "cheeseburgeralt" + diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm index 8689946cfeb..e31d816aa6c 100644 --- a/code/modules/cargo/bounties/chef.dm +++ b/code/modules/cargo/bounties/chef.dm @@ -69,7 +69,7 @@ name = "Super Bite Burger" description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him." reward = 12000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/burger/superbite) + wanted_types = list(/obj/item/food/burger/superbite) /datum/bounty/item/chef/poppypretzel name = "Poppy Pretzel" diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm deleted file mode 100644 index cd643485e93..00000000000 --- a/code/modules/food_and_drinks/food/snacks_burgers.dm +++ /dev/null @@ -1,415 +0,0 @@ -/obj/item/reagent_containers/food/snacks/burger - filling_color = "#CD853F" - icon = 'icons/obj/food/burgerbread.dmi' - icon_state = "hburger" - bitesize = 3 - list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("bun" = 2, "beef patty" = 4) - foodtype = GRAIN | MEAT //lettuce doesn't make burger a vegetable. - -/obj/item/reagent_containers/food/snacks/burger/plain - name = "burger" - desc = "The cornerstone of every nutritious breakfast." - bonus_reagents = list(/datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | MEAT - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/plain/Initialize() - . = ..() - if(prob(1)) - new/obj/effect/particle_effect/smoke(get_turf(src)) - playsound(src, 'sound/effects/smoke.ogg', 50, TRUE) - visible_message("Oh, ye gods! [src] is ruined! But what if...?") - name = "steamed ham" - desc = pick("Ahh, Head of Personnel, welcome. I hope you're prepared for an unforgettable luncheon!", - "And you call these steamed hams despite the fact that they are obviously microwaved?", - "Aurora Station 13? At this time of shift, in this time of year, in this sector of space, localized entirely within your freezer?", - "You know, these hamburgers taste quite similar to the ones they have at the Maltese Falcon.") - tastes = list("fast food hamburger" = 1) - -/obj/item/reagent_containers/food/snacks/burger/human - var/subjectname = "" - var/subjectjob = null - name = "human burger" - desc = "A bloody burger." - bonus_reagents = list(/datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 4) - tastes = list("bun" = 2, "long pig" = 4) - foodtype = MEAT | GRAIN | GROSS - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/human/CheckParts(list/parts_list) - ..() - var/obj/item/reagent_containers/food/snacks/meat/M = locate(/obj/item/reagent_containers/food/snacks/meat/steak/plain/human) in contents - if(M) - subjectname = M.subjectname - subjectjob = M.subjectjob - if(subjectname) - name = "[subjectname] burger" - else if(subjectjob) - name = "[subjectjob] burger" - qdel(M) - - -/obj/item/reagent_containers/food/snacks/burger/corgi - name = "corgi burger" - desc = "You monster." - bonus_reagents = list(/datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT | GROSS - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/appendix - name = "appendix burger" - desc = "Tastes like appendicitis." - bonus_reagents = list(/datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 6) - icon_state = "appendixburger" - tastes = list("bun" = 4, "grass" = 2) - foodtype = GRAIN | MEAT | GROSS - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/fish - name = "fillet -o- carp sandwich" - desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." - icon_state = "fishburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("bun" = 4, "fish" = 4) - foodtype = GRAIN | MEAT - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/tofu - name = "tofu burger" - desc = "What.. is that meat?" - icon_state = "tofuburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 1, /datum/reagent/consumable/nutriment/vitamin = 2) - tastes = list("bun" = 4, "tofu" = 4) - foodtype = GRAIN | VEGETABLES - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/roburger - name = "roburger" - desc = "The lettuce is the only organic component. Beep." - icon_state = "roburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/nanomachines = 2, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/nanomachines = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) - foodtype = GRAIN | TOXIC - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/roburgerbig - name = "roburger" - desc = "This massive patty looks like poison. Beep." - icon_state = "roburger" - volume = 120 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/nanomachines = 70, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/nanomachines = 70, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) - foodtype = GRAIN | TOXIC - value = FOOD_LEGENDARY - -/obj/item/reagent_containers/food/snacks/burger/xeno - name = "xenoburger" - desc = "Smells caustic. Tastes like heresy." - icon_state = "xburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 6) - tastes = list("bun" = 4, "acid" = 4) - foodtype = GRAIN | MEAT - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/bearger - name = "bearger" - desc = "Best served rawr." - icon_state = "bearger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 3, /datum/reagent/consumable/nutriment/vitamin = 6) - foodtype = GRAIN | MEAT - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/clown - name = "clown burger" - desc = "This tastes funny..." - icon_state = "clownburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/medicine/mannitol = 6, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/medicine/mannitol = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | FRUIT - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/mime - name = "mime burger" - desc = "Its taste defies language." - icon_state = "mimeburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/consumable/nothing = 6) - foodtype = GRAIN - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/brain - name = "brainburger" - desc = "A strange looking burger. It looks almost sentient." - icon_state = "brainburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/medicine/mannitol = 6, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/medicine/mannitol = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("bun" = 4, "brains" = 2) - foodtype = GRAIN | MEAT | GROSS - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/ghost - name = "ghost burger" - desc = "Too Spooky!" - icon_state = "ghostburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 12, /datum/reagent/consumable/sodiumchloride = 5) - tastes = list("bun" = 2, "ectoplasm" = 4) - foodtype = GRAIN - alpha = 170 - verb_say = "moans" - verb_yell = "wails" - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/ghost/Initialize() - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/reagent_containers/food/snacks/burger/ghost/process() - if(!isturf(loc)) //no floating out of bags - return - var/paranormal_activity = rand(100) - switch(paranormal_activity) - if(97 to 100) - audible_message("[src] rattles a length of chain.") - playsound(loc,'sound/spookoween/chain_rattling.ogg', 300, TRUE) - if(91 to 96) - say(pick("OoOoOoo.", "OoooOOooOoo!!")) - if(84 to 90) - dir = pick(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) - step(src, dir) - if(71 to 83) - step(src, dir) - if(65 to 70) - var/obj/machinery/light/L = locate(/obj/machinery/light) in view(4, src) - if(L) - L.flicker() - if(62 to 64) - playsound(loc,pick('sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg'), 50, TRUE, ignore_walls = FALSE) - if(61) - visible_message("[src] spews out a glob of ectoplasm!") - new /obj/effect/decal/cleanable/greenglow/ecto(loc) - playsound(loc,'sound/effects/splat.ogg', 200, TRUE) - - //If i was less lazy i would make the burger forcefeed itself to a nearby mob here. - -/obj/item/reagent_containers/food/snacks/burger/ghost/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/reagent_containers/food/snacks/burger/red - name = "red burger" - desc = "Perfect for hiding the fact it's burnt to a crisp." - icon_state = "cburger" - color = "#DA0000FF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/red = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/orange - name = "orange burger" - desc = "Contains 0% juice." - icon_state = "cburger" - color = "#FF9300FF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/orange = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/yellow - name = "yellow burger" - desc = "Bright to the last bite." - icon_state = "cburger" - color = "#FFF200FF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/yellow = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/green - name = "green burger" - desc = "It's not tainted meat, it's painted meat!" - icon_state = "cburger" - color = "#A8E61DFF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/green = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/blue - name = "blue burger" - desc = "Is this blue rare?" - icon_state = "cburger" - color = "#00B7EFFF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/blue = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/purple - name = "purple burger" - desc = "Regal and low class at the same time." - icon_state = "cburger" - color = "#DA00FFFF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/purple = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/black - name = "black burger" - desc = "This is overcooked." - icon_state = "cburger" - color = "#1C1C1C" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/black = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/white - name = "white burger" - desc = "Delicous Titanium!" - icon_state = "cburger" - color = "#FFFFFF" - bonus_reagents = list(/datum/reagent/colorful_reagent/powder/white = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/burger/spell - name = "spell burger" - desc = "This is absolutely Ei Nath." - icon_state = "spellburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("bun" = 4, "magic" = 2) - foodtype = GRAIN | MEAT - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/bigbite - name = "big bite burger" - desc = "Forget the Big Mac. THIS is the future!" - icon_state = "bigbiteburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/protein = 9, /datum/reagent/consumable/nutriment/vitamin = 2) - w_class = WEIGHT_CLASS_NORMAL - foodtype = GRAIN | MEAT | DAIRY - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/jelly - name = "jelly burger" - desc = "Culinary delight..?" - icon_state = "jellyburger" - tastes = list("bun" = 4, "jelly" = 2) - foodtype = GRAIN | MEAT - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/jelly/slime - bonus_reagents = list(/datum/reagent/toxin/slimejelly = 5, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/toxin/slimejelly = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | TOXIC - -/obj/item/reagent_containers/food/snacks/burger/jelly/cherry - bonus_reagents = list(/datum/reagent/consumable/cherryjelly = 5, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/cherryjelly = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | FRUIT - -/obj/item/reagent_containers/food/snacks/burger/superbite - name = "super bite burger" - desc = "This is a mountain of a burger. FOOD!" - icon_state = "superbiteburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/nutriment/protein = 38, /datum/reagent/consumable/nutriment/vitamin = 5) - w_class = WEIGHT_CLASS_NORMAL - bitesize = 7 - volume = 100 - tastes = list("bun" = 4, "type two diabetes" = 10) - foodtype = GRAIN | MEAT | DAIRY - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/fivealarm - name = "five alarm burger" - desc = "HOT! HOT!" - icon_state = "fivealarmburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 5, /datum/reagent/consumable/capsaicin = 5, /datum/reagent/consumable/condensedcapsaicin = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | MEAT - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/rat - name = "rat burger" - desc = "Pretty much what you'd expect..." - icon_state = "ratburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | MEAT | GROSS - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/baseball - name = "home run baseball burger" - desc = "It's still warm. The steam coming off of it looks like baseball." - icon_state = "baseball" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | GROSS - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/baconburger - name = "bacon burger" - desc = "The perfect combination of all things American." - icon_state = "baconburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 6, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("bacon" = 4, "bun" = 2) - foodtype = GRAIN | MEAT - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/empoweredburger - name = "empowered burger" - desc = "It's shockingly good, if you live off of electricity that is." - icon_state = "empoweredburger" - list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/liquidelectricity = 5) - tastes = list("bun" = 2, "pure electricity" = 4) - foodtype = GRAIN | TOXIC - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/crab - name = "crab burger" - desc = "A delicious patty of the crabby kind, slapped in between a bun." - icon_state = "crabburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("bun" = 2, "crab meat" = 4) - foodtype = GRAIN | MEAT - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/soylent - name = "soylent burger" - desc = "An eco-friendly burger made using upcycled low value biomass." - icon_state = "soylentburger" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/protein = 4, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("bun" = 2, "assistant" = 4) - foodtype = GRAIN | MEAT | DAIRY - value = FOOD_EXOTIC - -/obj/item/reagent_containers/food/snacks/burger/rib - name = "mcrib" - desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it." - icon_state = "mcrib" - bonus_reagents = list(/datum/reagent/consumable/bbqsauce = 1, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("bun" = 2, "pork patty" = 4) - foodtype = GRAIN | MEAT - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/mcguffin - name = "mcguffin" - desc = "A cheap and greasy imitation of an eggs benedict." - icon_state = "mcguffin" - tastes = list("muffin" = 2, "bacon" = 3) - bonus_reagents = list(/datum/reagent/consumable/eggyolk = 3, /datum/reagent/consumable/nutriment/protein = 2) - foodtype = GRAIN | MEAT | BREAKFAST - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/chicken - name = "chicken sandwich" //Apparently the proud people of Americlapstan object to this thing being called a burger. Apparently McDonald's just calls it a burger in Europe as to not scare and confuse us. - desc = "A delicious chicken sandwich, it is said the proceeds from this treat helps criminalize disarming people on the space frontier." - icon_state = "chickenburger" - tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1) - bonus_reagents = list(/datum/reagent/consumable/mayonnaise = 3, /datum/reagent/consumable/cooking_oil = 2, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 2) - foodtype = GRAIN | MEAT | FRIED - value = FOOD_RARE - -/obj/item/reagent_containers/food/snacks/burger/cheese - name = "cheese burger" - desc = "This noble burger stands proudly clad in golden cheese." - icon_state = "cheeseburger" - tastes = list("bun" = 2, "beef patty" = 4, "cheese" = 3) - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | MEAT | DAIRY - value = FOOD_FAST - -/obj/item/reagent_containers/food/snacks/burger/cheese/Initialize() - . = ..() - if(prob(33)) - icon_state = "cheeseburgeralt" - diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 0bb2b970ca2..f40e11f3350 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -13,7 +13,7 @@ parts = list( /obj/item/reagent_containers/food/snacks/meat/steak/plain/human = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/human + result = /obj/item/food/burger/human subcategory = CAT_BURGER /datum/crafting_recipe/food/burger @@ -23,7 +23,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/plain + result = /obj/item/food/burger/plain subcategory = CAT_BURGER /datum/crafting_recipe/food/corgiburger @@ -33,7 +33,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/corgi + result = /obj/item/food/burger/corgi subcategory = CAT_BURGER /datum/crafting_recipe/food/appendixburger @@ -42,7 +42,7 @@ /obj/item/organ/appendix = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/appendix + result = /obj/item/food/burger/appendix subcategory = CAT_BURGER /datum/crafting_recipe/food/brainburger @@ -51,7 +51,7 @@ /obj/item/organ/brain = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/brain + result = /obj/item/food/burger/brain subcategory = CAT_BURGER /datum/crafting_recipe/food/xenoburger @@ -60,7 +60,7 @@ /obj/item/reagent_containers/food/snacks/meat/steak/xeno = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/xeno + result = /obj/item/food/burger/xeno subcategory = CAT_BURGER /datum/crafting_recipe/food/bearger @@ -69,7 +69,7 @@ /obj/item/reagent_containers/food/snacks/meat/steak/bear = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/bearger + result = /obj/item/food/burger/bearger subcategory = CAT_BURGER /datum/crafting_recipe/food/fishburger @@ -79,7 +79,7 @@ /obj/item/reagent_containers/food/snacks/cheesewedge = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/fish + result = /obj/item/food/burger/fish subcategory = CAT_BURGER /datum/crafting_recipe/food/tofuburger @@ -88,7 +88,7 @@ /obj/item/reagent_containers/food/snacks/tofu = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/tofu + result = /obj/item/food/burger/tofu subcategory = CAT_BURGER /datum/crafting_recipe/food/ghostburger @@ -98,7 +98,7 @@ /datum/reagent/consumable/sodiumchloride = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/ghost + result = /obj/item/food/burger/ghost subcategory = CAT_BURGER /datum/crafting_recipe/food/clownburger @@ -107,7 +107,7 @@ /obj/item/clothing/mask/gas/clown_hat = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/clown + result = /obj/item/food/burger/clown subcategory = CAT_BURGER /datum/crafting_recipe/food/mimeburger @@ -116,7 +116,7 @@ /obj/item/clothing/mask/gas/mime = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/mime + result = /obj/item/food/burger/mime subcategory = CAT_BURGER /datum/crafting_recipe/food/redburger @@ -126,7 +126,7 @@ /obj/item/toy/crayon/red = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/red + result = /obj/item/food/burger/red subcategory = CAT_BURGER /datum/crafting_recipe/food/orangeburger @@ -136,7 +136,7 @@ /obj/item/toy/crayon/orange = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/orange + result = /obj/item/food/burger/orange subcategory = CAT_BURGER /datum/crafting_recipe/food/yellowburger @@ -146,7 +146,7 @@ /obj/item/toy/crayon/yellow = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/yellow + result = /obj/item/food/burger/yellow subcategory = CAT_BURGER /datum/crafting_recipe/food/greenburger @@ -156,7 +156,7 @@ /obj/item/toy/crayon/green = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/green + result = /obj/item/food/burger/green subcategory = CAT_BURGER /datum/crafting_recipe/food/blueburger @@ -166,7 +166,7 @@ /obj/item/toy/crayon/blue = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/blue + result = /obj/item/food/burger/blue subcategory = CAT_BURGER /datum/crafting_recipe/food/purpleburger @@ -176,7 +176,7 @@ /obj/item/toy/crayon/purple = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/purple + result = /obj/item/food/burger/purple subcategory = CAT_BURGER /datum/crafting_recipe/food/blackburger @@ -186,7 +186,7 @@ /obj/item/toy/crayon/black = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/black + result = /obj/item/food/burger/black subcategory = CAT_BURGER /datum/crafting_recipe/food/whiteburger @@ -196,7 +196,7 @@ /obj/item/toy/crayon/white = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/white + result = /obj/item/food/burger/white subcategory = CAT_BURGER /datum/crafting_recipe/food/spellburger @@ -205,7 +205,7 @@ /obj/item/clothing/head/wizard/fake = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/spell + result = /obj/item/food/burger/spell subcategory = CAT_BURGER /datum/crafting_recipe/food/spellburger2 @@ -214,7 +214,7 @@ /obj/item/clothing/head/wizard = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/spell + result = /obj/item/food/burger/spell subcategory = CAT_BURGER /datum/crafting_recipe/food/bigbiteburger @@ -224,7 +224,7 @@ /obj/item/reagent_containers/food/snacks/cheesewedge = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/bigbite + result = /obj/item/food/burger/bigbite subcategory = CAT_BURGER /datum/crafting_recipe/food/superbiteburger @@ -240,7 +240,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/superbite + result = /obj/item/food/burger/superbite subcategory = CAT_BURGER /datum/crafting_recipe/food/slimeburger @@ -249,7 +249,7 @@ /datum/reagent/toxin/slimejelly = 5, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/jelly/slime + result = /obj/item/food/burger/jelly/slime subcategory = CAT_BURGER /datum/crafting_recipe/food/jellyburger @@ -258,7 +258,7 @@ /datum/reagent/consumable/cherryjelly = 5, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/jelly/cherry + result = /obj/item/food/burger/jelly/cherry subcategory = CAT_BURGER /datum/crafting_recipe/food/fivealarmburger @@ -268,7 +268,7 @@ /obj/item/reagent_containers/food/snacks/grown/ghost_chili = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/fivealarm + result = /obj/item/food/burger/fivealarm subcategory = CAT_BURGER /datum/crafting_recipe/food/ratburger @@ -277,7 +277,7 @@ /obj/item/reagent_containers/food/snacks/deadmouse = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/rat + result = /obj/item/food/burger/rat subcategory = CAT_BURGER /datum/crafting_recipe/food/baseballburger @@ -286,7 +286,7 @@ /obj/item/melee/baseball_bat = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/baseball + result = /obj/item/food/burger/baseball subcategory = CAT_BURGER /datum/crafting_recipe/food/baconburger @@ -296,7 +296,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/baconburger + result = /obj/item/food/burger/baconburger subcategory = CAT_BURGER /datum/crafting_recipe/food/empoweredburger @@ -306,7 +306,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/empoweredburger + result = /obj/item/food/burger/empoweredburger subcategory = CAT_BURGER /datum/crafting_recipe/food/crabburger @@ -316,7 +316,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/crab + result = /obj/item/food/burger/crab subcategory = CAT_BURGER /datum/crafting_recipe/food/cheeseburger @@ -326,7 +326,7 @@ /obj/item/reagent_containers/food/snacks/cheesewedge = 1, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/cheese + result = /obj/item/food/burger/cheese subcategory = CAT_BURGER /datum/crafting_recipe/food/soylentburger @@ -336,7 +336,7 @@ /obj/item/reagent_containers/food/snacks/cheesewedge = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/soylent + result = /obj/item/food/burger/soylent subcategory = CAT_BURGER /datum/crafting_recipe/food/ribburger @@ -346,7 +346,7 @@ /obj/item/reagent_containers/food/snacks/onion_slice = 1, //feel free to remove if too burdensome. /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/rib + result = /obj/item/food/burger/rib subcategory = CAT_BURGER /datum/crafting_recipe/food/mcguffin @@ -356,7 +356,7 @@ /obj/item/reagent_containers/food/snacks/meat/bacon = 2, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/mcguffin + result = /obj/item/food/burger/mcguffin subcategory = CAT_BURGER /datum/crafting_recipe/food/chickenburger @@ -366,5 +366,5 @@ /datum/reagent/consumable/mayonnaise = 5, /obj/item/reagent_containers/food/snacks/bun = 1 ) - result = /obj/item/reagent_containers/food/snacks/burger/chicken + result = /obj/item/food/burger/chicken subcategory = CAT_BURGER diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index e519372adbe..e4ab27b156b 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -5,8 +5,8 @@ product_slogans = "Liberation Station: Your one-stop shop for all things second amendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!" product_ads = "Float like an astronaut, sting like a bullet!;Express your second amendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" vend_reply = "Remember the name: Liberation Station!" - products = list(/obj/item/reagent_containers/food/snacks/burger/plain = 5, //O say can you see, by the dawn's early light - /obj/item/reagent_containers/food/snacks/burger/baseball = 3, //What so proudly we hailed at the twilight's last gleaming + products = list(/obj/item/food/burger/plain = 5, //O say can you see, by the dawn's early light + /obj/item/food/burger/baseball = 3, //What so proudly we hailed at the twilight's last gleaming /obj/item/reagent_containers/food/snacks/fries = 5, //Whose broad stripes and bright stars through the perilous fight /obj/item/reagent_containers/food/drinks/beer/light = 10, //O'er the ramparts we watched, were so gallantly streaming? /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, @@ -22,10 +22,10 @@ /obj/item/ammo_box/magazine/m45 = 2, /obj/item/ammo_box/magazine/m75 = 2, /obj/item/reagent_containers/food/snacks/cheesyfries = 5, - /obj/item/reagent_containers/food/snacks/burger/baconburger = 5) //Premium burgers for the premium section + /obj/item/food/burger/baconburger = 5) //Premium burgers for the premium section contraband = list(/obj/item/clothing/under/misc/patriotsuit = 3, /obj/item/bedsheet/patriot = 5, - /obj/item/reagent_containers/food/snacks/burger/superbite = 3) //U S A + /obj/item/food/burger/superbite = 3) //U S A armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF default_price = 150 diff --git a/tgstation.dme b/tgstation.dme index 8f169db422c..05d55d23902 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1105,6 +1105,7 @@ #include "code\game\objects\items\devices\radio\radio.dm" #include "code\game\objects\items\food\_food.dm" #include "code\game\objects\items\food\bread.dm" +#include "code\game\objects\items\food\burgers.dm" #include "code\game\objects\items\grenades\antigravity.dm" #include "code\game\objects\items\grenades\chem_grenade.dm" #include "code\game\objects\items\grenades\clusterbuster.dm" @@ -1948,7 +1949,6 @@ #include "code\modules\food_and_drinks\food\condiment.dm" #include "code\modules\food_and_drinks\food\customizables.dm" #include "code\modules\food_and_drinks\food\snacks.dm" -#include "code\modules\food_and_drinks\food\snacks_burgers.dm" #include "code\modules\food_and_drinks\food\snacks_cake.dm" #include "code\modules\food_and_drinks\food\snacks_egg.dm" #include "code\modules\food_and_drinks\food\snacks_frozen.dm" From 2129a668264ac79a39005c3b227d2568b8641e3b Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 03:11:42 -0700 Subject: [PATCH 13/40] Automatic changelog generation for PR #53224 [ci skip] --- html/changelogs/AutoChangeLog-pr-53224.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53224.yml diff --git a/html/changelogs/AutoChangeLog-pr-53224.yml b/html/changelogs/AutoChangeLog-pr-53224.yml new file mode 100644 index 00000000000..40e6d8341d5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53224.yml @@ -0,0 +1,6 @@ +author: "qustinnus" +delete-after: True +changes: + - code_imp: "burgers now composition based" + - bugfix: "you can now grind bread again" + - rscadd: "you can now auto-eat things with edible component" From b617c163565b43e59d48be1df56ff1570b9d1a60 Mon Sep 17 00:00:00 2001 From: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com> Date: Sat, 29 Aug 2020 03:15:28 -0700 Subject: [PATCH 14/40] Bring back painting arbitrary objects with spray cans (#52936) Brings back the behavior removed from #52186 with cleaner code. Differences in the code: No more explicit type checks in the spray paint code, other than a broad isobj. Checking for dark colors is now based on luminosity, rather than unscientifically summing all the RGB components and checking an arbitrary number. Removes the paintable component. This was used on one item, and its behavior is replicated in the spray can. Instead of checking for windows specifically and changing opacity through there, atoms can now specify through init flags whether or not they allow dark colors. Windows set this flag. Adds a COMSIG_OBJ_PAINTED signal. Windows use this signal to dynamically update opacity, just like how they did before. This was a fun cosmetic feature that I'm not sure anyone had a problem with. The original reason for removal seemed to be because of code quality, and not because of negatives about the feature. Makes canvasses unpaintable --- code/__DEFINES/dcs/signals.dm | 2 ++ code/__DEFINES/flags.dm | 5 ++- code/__HELPERS/type2type.dm | 12 ++++--- code/datums/components/paintable.dm | 31 ------------------- code/game/objects/items/crayons.dm | 18 ++++++++--- code/game/objects/structures/artstuff.dm | 1 + code/game/objects/structures/window.dm | 11 +++++++ .../modules/mining/equipment/explorer_gear.dm | 5 --- tgstation.dme | 1 - 9 files changed, 39 insertions(+), 47 deletions(-) delete mode 100644 code/datums/components/paintable.dm diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index d0bc71e4827..1e8d0d8d35d 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -442,6 +442,8 @@ #define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" ///from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide #define COMSIG_OBJ_HIDE "obj_hide" +/// from /obj/item/toy/crayon/spraycan/afterattack: (color_is_dark) +#define COMSIG_OBJ_PAINTED "obj_painted" // /obj/machinery signals diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index c54c7bae57d..0b7e5b585e3 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -42,7 +42,10 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define RAD_PROTECT_CONTENTS_1 (1 << 17) /// should this object be allowed to be contaminated #define RAD_NO_CONTAMINATE_1 (1 << 18) - +/// Should this object be paintable with very dark colors? +#define ALLOW_DARK_PAINTS_1 (1 << 19) +/// Should this object be unpaintable? +#define UNPAINTABLE_1 (1 << 20) /// If the thing can reflect light (lasers/energy) #define RICOCHET_SHINY (1<<0) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 2e7ffd49133..46719b900a2 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -385,6 +385,12 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH, else return "#FFFFFF" +/// Converts "#RRGGBB" to list(0xRR, 0xGG, 0xBB) +/proc/hex2rgb(color) + var/r = hex2num(copytext(color, 2, 4)) + var/g = hex2num(copytext(color, 4, 6)) + var/b = hex2num(copytext(color, 6, 8)) + return list(r, g, b) //This is a weird one: //It returns a list of all var names found in the string @@ -426,10 +432,8 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH, /proc/color_hex2num(A) if(!A || length(A) != length_char(A)) return 0 - var/R = hex2num(copytext(A, 2, 4)) - var/G = hex2num(copytext(A, 4, 6)) - var/B = hex2num(copytext(A, 6, 8)) - return R+G+B + var/rgb = hex2rgb(A) + return rgb[1] + rgb[2] + rgb[3] //word of warning: using a matrix like this as a color value will simplify it back to a string after being set /proc/color_hex2color_matrix(string) diff --git a/code/datums/components/paintable.dm b/code/datums/components/paintable.dm deleted file mode 100644 index a0ed2873c90..00000000000 --- a/code/datums/components/paintable.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/component/spraycan_paintable - var/current_paint - -/datum/component/spraycan_paintable/Initialize() - RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/Repaint) - -/datum/component/spraycan_paintable/Destroy() - RemoveCurrentCoat() - return ..() - -/datum/component/spraycan_paintable/proc/RemoveCurrentCoat() - var/atom/A = parent - A.remove_atom_colour(FIXED_COLOUR_PRIORITY, current_paint) - -/datum/component/spraycan_paintable/proc/Repaint(datum/source, obj/item/toy/crayon/spraycan/spraycan, mob/living/user) - SIGNAL_HANDLER - - if(!istype(spraycan) || user.a_intent == INTENT_HARM) - return - . = COMPONENT_NO_AFTERATTACK - if(spraycan.is_capped) - to_chat(user, "Take the cap off first!") - return - RemoveCurrentCoat() - if(spraycan.use_charges(user, 2)) - var/colour = spraycan.paint_color - current_paint = colour - var/atom/A = parent - A.add_atom_colour(colour, FIXED_COLOUR_PRIORITY) - playsound(spraycan, 'sound/effects/spray.ogg', 5, TRUE, 5) - to_chat(user, "You spray [spraycan] on [A], painting it.") diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 31702bffe7a..5bc04648583 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -1,3 +1,5 @@ +#define DARK_COLOR_LIGHTNESS_THRESHOLD 0.25 + #define RANDOM_GRAFFITI "Random Graffiti" #define RANDOM_LETTER "Random Letter" #define RANDOM_PUNCTUATION "Random Punctuation" @@ -730,13 +732,18 @@ return - if(istype(target, /obj/structure/window)) + if(isobj(target) && !(target.flags_1 & UNPAINTABLE_1)) if(actually_paints) + var/list/rgb = hex2rgb(paint_color) + var/list/hsl = rgb2hsl(rgb[1], rgb[2], rgb[3]) + var/color_is_dark = hsl[3] < DARK_COLOR_LIGHTNESS_THRESHOLD + + if (color_is_dark && !(target.flags_1 & ALLOW_DARK_PAINTS_1)) + to_chat(user, "A color that dark on an object like this? Surely not...") + return FALSE + target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY) - if(color_hex2num(paint_color) < 255) - target.set_opacity(255) - else - target.set_opacity(initial(target.opacity)) + SEND_SIGNAL(target, COMSIG_OBJ_PAINTED, color_is_dark) . = use_charges(user, 2) reagents.trans_to(target, ., volume_multiplier, transfered_by = user, methods = VAPOR) @@ -829,6 +836,7 @@ charges = -1 desc = "Now with 30% more bluespace technology." +#undef DARK_COLOR_LIGHTNESS_THRESHOLD #undef RANDOM_GRAFFITI #undef RANDOM_LETTER #undef RANDOM_PUNCTUATION diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 2cb503f7d3b..1885a3da5a1 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -40,6 +40,7 @@ desc = "Draw out your soul on this canvas!" icon = 'icons/obj/artstuff.dmi' icon_state = "11x11" + flags_1 = UNPAINTABLE_1 resistance_flags = FLAMMABLE var/width = 11 var/height = 11 diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 499ffe5c044..e7537f526b6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -64,6 +64,9 @@ real_explosion_block = explosion_block explosion_block = EXPLOSION_BLOCK_PROC + flags_1 |= ALLOW_DARK_PAINTS_1 + RegisterSignal(src, COMSIG_OBJ_PAINTED, .proc/on_painted) + /obj/structure/window/ComponentInitialize() . = ..() AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation)) @@ -283,6 +286,14 @@ ini_dir = dir add_fingerprint(user) +/obj/structure/window/proc/on_painted(is_dark_color) + SIGNAL_HANDLER + + if (is_dark_color) + set_opacity(255) + else + set_opacity(initial(opacity)) + /obj/structure/window/Destroy() density = FALSE air_update_turf(1) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index a214d653f71..c52470461e7 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -69,10 +69,6 @@ armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) -/obj/item/clothing/suit/space/hostile_environment/Initialize() - . = ..() - AddComponent(/datum/component/spraycan_paintable) - /obj/item/clothing/suit/space/hostile_environment/process() . = ..() var/mob/living/carbon/C = loc @@ -96,7 +92,6 @@ /obj/item/clothing/head/helmet/space/hostile_environment/Initialize() . = ..() - AddComponent(/datum/component/spraycan_paintable) update_icon() /obj/item/clothing/head/helmet/space/hostile_environment/update_overlays() diff --git a/tgstation.dme b/tgstation.dme index 05d55d23902..55d10047c9b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -446,7 +446,6 @@ #include "code\datums\components\omen.dm" #include "code\datums\components\orbiter.dm" #include "code\datums\components\overlay_lighting.dm" -#include "code\datums\components\paintable.dm" #include "code\datums\components\payment.dm" #include "code\datums\components\pellet_cloud.dm" #include "code\datums\components\pricetag.dm" From cca0ec1fc058702cfaac4ceed1c9f4cbb22cc063 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 03:15:32 -0700 Subject: [PATCH 15/40] Automatic changelog generation for PR #52936 [ci skip] --- html/changelogs/AutoChangeLog-pr-52936.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-52936.yml diff --git a/html/changelogs/AutoChangeLog-pr-52936.yml b/html/changelogs/AutoChangeLog-pr-52936.yml new file mode 100644 index 00000000000..f634e219660 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-52936.yml @@ -0,0 +1,4 @@ +author: "Jared-Fogle" +delete-after: True +changes: + - rscadd: "You can now spray paint anything you want again." From 11a00bd3c78a49f832f6c99eaa0a2f4b1a6dbab3 Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Sat, 29 Aug 2020 12:18:19 +0200 Subject: [PATCH 16/40] Implements jungle generation and area map generator datums (#51082) --- code/__DEFINES/maps.dm | 16 ++++ code/controllers/subsystem/mapping.dm | 10 +- code/datums/mapgen/JungleGenerator.dm | 91 +++++++++++++++++++ code/datums/mapgen/_MapGenerator.dm | 6 ++ code/datums/mapgen/biomes/_biome.dm | 50 ++++++++++ code/game/area/areas.dm | 6 ++ code/game/turfs/open/floor/plating/dirt.dm | 21 ----- code/game/turfs/open/floor/plating/planet.dm | 59 ++++++++++++ code/game/turfs/open/water.dm | 3 + icons/turf/debug.dmi | Bin 0 -> 270 bytes icons/turf/floors.dmi | Bin 373006 -> 378691 bytes tgstation.dme | 5 +- 12 files changed, 244 insertions(+), 23 deletions(-) create mode 100644 code/datums/mapgen/JungleGenerator.dm create mode 100644 code/datums/mapgen/_MapGenerator.dm create mode 100644 code/datums/mapgen/biomes/_biome.dm delete mode 100644 code/game/turfs/open/floor/plating/dirt.dm create mode 100644 code/game/turfs/open/floor/plating/planet.dm create mode 100644 icons/turf/debug.dmi diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index b0989828fe7..7be150fbf72 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -105,3 +105,19 @@ require only minor tweaks. #define PLACE_LAVA_RUIN "lavaland" //On lavaland ruin z levels(s) #define PLACE_BELOW "below" //On z levl below - centered on same tile #define PLACE_ISOLATED "isolated" //On isolated ruin z level + + +///Map generation defines +#define PERLIN_LAYER_HEIGHT "perlin_height" +#define PERLIN_LAYER_HUMIDITY "perlin_humidity" +#define PERLIN_LAYER_HEAT "perlin_heat" + +#define BIOME_LOW_HEAT "low_heat" +#define BIOME_LOWMEDIUM_HEAT "lowmedium_heat" +#define BIOME_HIGHMEDIUM_HEAT "highmedium_heat" +#define BIOME_HIGH_HEAT "high_heat" + +#define BIOME_LOW_HUMIDITY "low_humidity" +#define BIOME_LOWMEDIUM_HUMIDITY "lowmedium_humidity" +#define BIOME_HIGHMEDIUM_HUMIDITY "highmedium_humidity" +#define BIOME_HIGH_HUMIDITY "high_humidity" diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 18f9de9a6d1..28ef539fb01 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -34,6 +34,9 @@ SUBSYSTEM_DEF(mapping) var/list/reservation_ready = list() var/clearing_reserved_turfs = FALSE + ///All possible biomes in assoc list as type || instance + var/list/biomes = list() + // Z-manager stuff var/station_start // should only be used for maploading-related tasks var/space_levels_so_far = 0 @@ -61,6 +64,7 @@ SUBSYSTEM_DEF(mapping) if(!config || config.defaulted) to_chat(world, "Unable to load next or default map config, defaulting to Meta Station") config = old_config + initialize_biomes() loadWorld() repopulate_sorted_areas() process_teleport_locs() //Sets up the wizard teleport locations @@ -551,7 +555,11 @@ GLOBAL_LIST_EMPTY(the_station_areas) used_turfs.Cut() reserve_turfs(clearing) - +///Initialize all biomes, assoc as type || instance +/datum/controller/subsystem/mapping/proc/initialize_biomes() + for(var/biome_path in subtypesof(/datum/biome)) + var/datum/biome/biome_instance = new biome_path() + biomes[biome_path] += biome_instance /datum/controller/subsystem/mapping/proc/reg_in_areas_in_z(list/areas) for(var/B in areas) diff --git a/code/datums/mapgen/JungleGenerator.dm b/code/datums/mapgen/JungleGenerator.dm new file mode 100644 index 00000000000..25348640ef7 --- /dev/null +++ b/code/datums/mapgen/JungleGenerator.dm @@ -0,0 +1,91 @@ +//the random offset applied to square coordinates, causes intermingling at biome borders +#define BIOME_RANDOM_SQUARE_DRIFT 2 + +/datum/map_generator/jungle_generator + ///2D list of all biomes based on heat and humidity combos. + var/list/possible_biomes = list( + BIOME_LOW_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/plains, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/mudlands, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/mudlands, + BIOME_HIGH_HUMIDITY = /datum/biome/water + ), + BIOME_LOWMEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/plains, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/jungle, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/jungle, + BIOME_HIGH_HUMIDITY = /datum/biome/mudlands + ), + BIOME_HIGHMEDIUM_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/plains, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/plains, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/jungle/deep, + BIOME_HIGH_HUMIDITY = /datum/biome/jungle + ), + BIOME_HIGH_HEAT = list( + BIOME_LOW_HUMIDITY = /datum/biome/wasteland, + BIOME_LOWMEDIUM_HUMIDITY = /datum/biome/plains, + BIOME_HIGHMEDIUM_HUMIDITY = /datum/biome/jungle, + BIOME_HIGH_HUMIDITY = /datum/biome/jungle/deep + ) + ) + ///Used to select "zoom" level into the perlin noise, higher numbers result in slower transitions + var/perlin_zoom = 65 + +///Seeds the rust-g perlin noise with a random number. +/datum/map_generator/jungle_generator/generate_terrain(var/list/turfs) + . = ..() + var/height_seed = rand(0, 50000) + var/humidity_seed = rand(0, 50000) + var/heat_seed = rand(0, 50000) + + for(var/t in turfs) //Go through all the turfs and generate them + var/turf/gen_turf = t + var/drift_x = (gen_turf.x + rand(-BIOME_RANDOM_SQUARE_DRIFT, BIOME_RANDOM_SQUARE_DRIFT)) / perlin_zoom + var/drift_y = (gen_turf.y + rand(-BIOME_RANDOM_SQUARE_DRIFT, BIOME_RANDOM_SQUARE_DRIFT)) / perlin_zoom + + var/height = text2num(rustg_noise_get_at_coordinates("[height_seed]", "[drift_x]", "[drift_y]")) + + + var/datum/biome/selected_biome + if(height <= 0.85) //If height is less than 0.85, we generate biomes based on the heat and humidity of the area. + var/humidity = text2num(rustg_noise_get_at_coordinates("[humidity_seed]", "[drift_x]", "[drift_y]")) + var/heat = text2num(rustg_noise_get_at_coordinates("[heat_seed]", "[drift_x]", "[drift_y]")) + var/heat_level //Type of heat zone we're in LOW-MEDIUM-HIGH + var/humidity_level //Type of humidity zone we're in LOW-MEDIUM-HIGH + + switch(heat) + if(0 to 0.25) + heat_level = BIOME_LOW_HEAT + if(0.25 to 0.5) + heat_level = BIOME_LOWMEDIUM_HEAT + if(0.5 to 0.75) + heat_level = BIOME_HIGHMEDIUM_HEAT + if(0.75 to 1) + heat_level = BIOME_HIGH_HEAT + switch(humidity) + if(0 to 0.25) + humidity_level = BIOME_LOW_HUMIDITY + if(0.25 to 0.5) + humidity_level = BIOME_LOWMEDIUM_HUMIDITY + if(0.5 to 0.75) + humidity_level = BIOME_HIGHMEDIUM_HUMIDITY + if(0.75 to 1) + humidity_level = BIOME_HIGH_HUMIDITY + selected_biome = possible_biomes[heat_level][humidity_level] + else //Over 0.85; It's a mountain + selected_biome = /datum/biome/mountain + selected_biome = SSmapping.biomes[selected_biome] //Get the instance of this biome from SSmapping + selected_biome.generate_turf(gen_turf) + CHECK_TICK + +/turf/open/genturf + name = "ungenerated turf" + desc = "If you see this, and you're not a ghost, yell at coders" + icon = 'icons/turf/debug.dmi' + icon_state = "genturf" + +/area/mine/planetgeneration + name = "planet generation area" + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + map_generator = /datum/map_generator/jungle_generator diff --git a/code/datums/mapgen/_MapGenerator.dm b/code/datums/mapgen/_MapGenerator.dm new file mode 100644 index 00000000000..aa4406bf789 --- /dev/null +++ b/code/datums/mapgen/_MapGenerator.dm @@ -0,0 +1,6 @@ +///This type is responsible for any map generation behavior that is done in areas, override this to allow for area-specific map generation. This generation is ran by areas in initialize. +/datum/map_generator + +///This proc will be ran by areas on Initialize, and provides the areas turfs as argument to allow for generation. +/datum/map_generator/proc/generate_terrain(var/list/turfs) + return diff --git a/code/datums/mapgen/biomes/_biome.dm b/code/datums/mapgen/biomes/_biome.dm new file mode 100644 index 00000000000..bf0f02cfbaa --- /dev/null +++ b/code/datums/mapgen/biomes/_biome.dm @@ -0,0 +1,50 @@ +///This datum handles the transitioning from a turf to a specific biome, and handles spawning decorative structures and mobs. +/datum/biome + ///Type of turf this biome creates + var/turf_type + ///Chance of having a structure from the flora types list spawn + var/flora_density = 0 + ///Chance of having a mob from the fauna types list spawn + var/fauna_density = 0 + ///list of type paths of objects that can be spawned when the turf spawns flora + var/list/flora_types = list(/obj/structure/flora/grass/jungle) + ///list of type paths of mobs that can be spawned when the turf spawns fauna + var/list/fauna_types = list() + +///This proc handles the creation of a turf of a specific biome type +/datum/biome/proc/generate_turf(var/turf/gen_turf) + gen_turf.ChangeTurf(turf_type, null, CHANGETURF_DEFER_CHANGE) + if(length(fauna_types) && prob(fauna_density)) + var/mob/fauna = pick(fauna_types) + new fauna(gen_turf) + + if(length(flora_types) && prob(flora_density)) + var/obj/structure/flora = pick(flora_types) + new flora(gen_turf) + +/datum/biome/mudlands + turf_type = /turf/open/floor/plating/dirt/jungle/dark + flora_types = list(/obj/structure/flora/grass/jungle,/obj/structure/flora/grass/jungle/b, /obj/structure/flora/rock/jungle, /obj/structure/flora/rock/pile/largejungle) + flora_density = 3 + +/datum/biome/plains + turf_type = /turf/open/floor/plating/grass/jungle + flora_types = list(/obj/structure/flora/grass/jungle,/obj/structure/flora/grass/jungle/b, /obj/structure/flora/tree/jungle, /obj/structure/flora/rock/jungle, /obj/structure/flora/junglebush, /obj/structure/flora/junglebush/b, /obj/structure/flora/junglebush/c, /obj/structure/flora/junglebush/large, /obj/structure/flora/rock/pile/largejungle) + flora_density = 15 + +/datum/biome/jungle + turf_type = /turf/open/floor/plating/grass/jungle + flora_types = list(/obj/structure/flora/grass/jungle,/obj/structure/flora/grass/jungle/b, /obj/structure/flora/tree/jungle, /obj/structure/flora/rock/jungle, /obj/structure/flora/junglebush, /obj/structure/flora/junglebush/b, /obj/structure/flora/junglebush/c, /obj/structure/flora/junglebush/large, /obj/structure/flora/rock/pile/largejungle) + flora_density = 40 + +/datum/biome/jungle/deep + flora_density = 65 + +/datum/biome/wasteland + turf_type = /turf/open/floor/plating/dirt/jungle/wasteland + +/datum/biome/water + turf_type = /turf/open/water/jungle + +/datum/biome/mountain + turf_type = /turf/closed/mineral/random/jungle diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 91da87f1a24..d3fe5b6b218 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -67,6 +67,9 @@ /// Wire assignment for airlocks in this area var/airlock_wires = /datum/wires/airlock + + ///This datum, if set, allows terrain generation behavior to be ran on Initialize() + var/datum/map_generator/map_generator /** @@ -157,6 +160,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/LateInitialize() power_change() // all machines set to current power level, also updates icon update_beauty() + if(map_generator) + map_generator = new map_generator() + map_generator.generate_terrain(get_area_turfs(src)) /** * Register this area as belonging to a z level diff --git a/code/game/turfs/open/floor/plating/dirt.dm b/code/game/turfs/open/floor/plating/dirt.dm deleted file mode 100644 index 9cfbe8433b3..00000000000 --- a/code/game/turfs/open/floor/plating/dirt.dm +++ /dev/null @@ -1,21 +0,0 @@ -/turf/open/floor/plating/dirt - gender = PLURAL - name = "dirt" - desc = "Upon closer examination, it's still dirt." - icon = 'icons/turf/floors.dmi' - icon_state = "dirt" - baseturfs = /turf/open/chasm/jungle - initial_gas_mix = OPENTURF_LOW_PRESSURE - planetary_atmos = TRUE - attachment_holes = FALSE - footstep = FOOTSTEP_SAND - barefootstep = FOOTSTEP_SAND - clawfootstep = FOOTSTEP_SAND - heavyfootstep = FOOTSTEP_GENERIC_HEAVY - tiled_dirt = FALSE - -/turf/open/floor/plating/dirt/dark - icon_state = "greenerdirt" - -/turf/open/floor/plating/dirt/try_replace_tile(obj/item/stack/tile/T, mob/user, params) - return diff --git a/code/game/turfs/open/floor/plating/planet.dm b/code/game/turfs/open/floor/plating/planet.dm new file mode 100644 index 00000000000..9f6c54a029f --- /dev/null +++ b/code/game/turfs/open/floor/plating/planet.dm @@ -0,0 +1,59 @@ +/turf/open/floor/plating/dirt + gender = PLURAL + name = "dirt" + desc = "Upon closer examination, it's still dirt." + icon = 'icons/turf/floors.dmi' + icon_state = "dirt" + baseturfs = /turf/open/chasm/jungle + initial_gas_mix = OPENTURF_LOW_PRESSURE + planetary_atmos = TRUE + attachment_holes = FALSE + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY + tiled_dirt = FALSE + +/turf/open/floor/plating/dirt/dark + icon_state = "greenerdirt" + +/turf/open/floor/plating/dirt/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + return + +/turf/open/floor/plating/dirt/jungle + slowdown = 0.5 + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + +/turf/open/floor/plating/dirt/jungle/dark + icon_state = "greenerdirt" + +/turf/open/floor/plating/dirt/jungle/wasteland //Like a more fun version of living in Arizona. + name = "cracked earth" + desc = "Looks a bit dry." + icon = 'icons/turf/floors.dmi' + icon_state = "wasteland" + slowdown = 1 + var/floor_variance = 15 + +/turf/open/floor/plating/dirt/jungle/wasteland/Initialize() + .=..() + if(prob(floor_variance)) + icon_state = "[initial(icon_state)][rand(0,12)]" + +/turf/open/floor/plating/grass/jungle + name = "jungle grass" + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + planetary_atmos = TRUE + desc = "Greener on the other side." + icon = 'icons/turf/floors.dmi' + icon_state = "junglegrass" + +/turf/open/floor/plating/grass/jungle/Initialize() + .=..() + icon_state = "[initial(icon_state)][rand(1,3)]" + +/turf/closed/mineral/random/jungle + mineralSpawnChanceList = list(/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10, + /obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40, /obj/item/stack/ore/titanium = 11, + /obj/item/stack/ore/bluespace_crystal = 1) + baseturfs = /turf/open/floor/plating/dirt/dark diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index 957fb3df19b..b29cb95c11d 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -15,3 +15,6 @@ barefootstep = FOOTSTEP_WATER clawfootstep = FOOTSTEP_WATER heavyfootstep = FOOTSTEP_WATER + +/turf/open/water/jungle + initial_gas_mix = OPENTURF_DEFAULT_ATMOS diff --git a/icons/turf/debug.dmi b/icons/turf/debug.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e419b2bf46d5b8d2429703d91de24b64fbfd989b GIT binary patch literal 270 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ⅅ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 delta 36509 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 RKED6}002ovPDHLkV1i0@FtY#v diff --git a/tgstation.dme b/tgstation.dme index 55d10047c9b..2773f014d1c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -602,6 +602,9 @@ #include "code\datums\looping_sounds\item_sounds.dm" #include "code\datums\looping_sounds\machinery_sounds.dm" #include "code\datums\looping_sounds\weather.dm" +#include "code\datums\mapgen\_MapGenerator.dm" +#include "code\datums\mapgen\JungleGenerator.dm" +#include "code\datums\mapgen\biomes\_biome.dm" #include "code\datums\martial\_martial.dm" #include "code\datums\martial\boxing.dm" #include "code\datums\martial\cqc.dm" @@ -1329,8 +1332,8 @@ #include "code\game\turfs\open\floor\plating.dm" #include "code\game\turfs\open\floor\reinf_floor.dm" #include "code\game\turfs\open\floor\plating\asteroid.dm" -#include "code\game\turfs\open\floor\plating\dirt.dm" #include "code\game\turfs\open\floor\plating\misc_plating.dm" +#include "code\game\turfs\open\floor\plating\planet.dm" #include "code\game\turfs\open\space\space.dm" #include "code\game\turfs\open\space\transit.dm" #include "code\modules\actionspeed\_actionspeed_modifier.dm" From aa6db5f6eb02e11b9f1437f5b7d1d65a42329b33 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 03:18:24 -0700 Subject: [PATCH 17/40] Automatic changelog generation for PR #51082 [ci skip] --- html/changelogs/AutoChangeLog-pr-51082.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-51082.yml diff --git a/html/changelogs/AutoChangeLog-pr-51082.yml b/html/changelogs/AutoChangeLog-pr-51082.yml new file mode 100644 index 00000000000..e925a508334 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-51082.yml @@ -0,0 +1,5 @@ +author: "Qustinnus, 4Dplanner" +delete-after: True +changes: + - rscadd: "Adds map_generator datums, which will handle terrain generation for a specific area" + - rscadd: "Adds a jungle generator datum, which uses rust-g noise to generate 3 layers of perlin noise to make a somewhat coheisve and seamless jungle based on height humidity and heat." From 8594f119fe4d7a53ad68c940ba8dcdd652797aa7 Mon Sep 17 00:00:00 2001 From: oranges Date: Sun, 30 Aug 2020 11:01:34 +1200 Subject: [PATCH 18/40] In Memoriam 26th August, 2020 (#53234) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Our friend, tg admin, and champion of the "short" reply, OrdoDictionary passed away recently. While this news was not unexpected - Ordo had been fighting bravely against prion disease for some time - it remains as heartbreaking as it is unfair. Ordo was sharp as a razor, with wit to match. During the time we knew him he was pursuing a PhD, yet he still found time to volunteer on the tgstation servers and help his fellow spessman. In admin channels you were as likely to find Ordo pontificating on history or food or ham radio as you were anything related to the game. But you knew - no matter the topic - that his opinion was informed and valuable, and that he would deliver it with nuance, class and charm. This community - and the world - is worse off without him in it. He will be missed. So should you read this and should you get the chance, raise a glass in his memory. …but be sure to break out the good stuff. That’s how he would have wanted it. Adds a medal in memoriam of Ordo and adds it to the Head of Personnel locker in a lockbox, along with three Medals of Bureaucratic Excellence, for those who excel in managing the station. Thanks to kryson for the sprite of the medal and thanks to OrdoM for all the work he did on tg. --- code/game/objects/items/storage/lockbox.dm | 10 +++++++ .../crates_lockers/closets/secure/security.dm | 2 ++ code/game/objects/structures/memorial.dm | 25 +++++++++++++++++- code/modules/clothing/under/accessories.dm | 5 ++++ icons/mob/clothing/accessories.dmi | Bin 10260 -> 10474 bytes icons/obj/clothing/accessories.dmi | Bin 11201 -> 12666 bytes 6 files changed, 41 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index aa02aad30e9..647299ae9d6 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -157,6 +157,16 @@ medalicon.pixel_x += ((i-6)*3) . += medalicon +/obj/item/storage/lockbox/medal/hop + name = "Head of Personnel medal box" + desc = "A locked box used to store medals to be given to those exhibiting excellence in management." + req_access = list(ACCESS_HOP) + +/obj/item/storage/lockbox/medal/hop/PopulateContents() + for(var/i in 1 to 3) + new /obj/item/clothing/accessory/medal/silver/bureaucracy(src) + new /obj/item/clothing/accessory/medal/gold/ordom(src) + /obj/item/storage/lockbox/medal/sec name = "security medal box" desc = "A locked box used to store medals to be given to members of the security department." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 0fa45680a68..642a48d0839 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -61,6 +61,8 @@ new /obj/item/door_remote/civilian(src) new /obj/item/circuitboard/machine/techfab/department/service(src) new /obj/item/storage/photo_album/hop(src) + new /obj/item/storage/lockbox/medal/hop(src) + /obj/structure/closet/secure_closet/hos name = "\proper head of security's locker" diff --git a/code/game/objects/structures/memorial.dm b/code/game/objects/structures/memorial.dm index 7c73578dc12..cbfb9e49ac8 100644 --- a/code/game/objects/structures/memorial.dm +++ b/code/game/objects/structures/memorial.dm @@ -9,7 +9,6 @@ but we are all contributors together. Goodbye, man. We'll miss you. This memorial has been designed for him and any future coders to perish. - */ /obj/structure/fluff/arc @@ -20,3 +19,27 @@ This memorial has been designed for him and any future coders to perish. density = TRUE anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + + +/* + +In Memoriam 26th August, 2020 +Our friend, fellow admin, and champion of the "short" reply, OrdoDictionary passed away recently. +While this news was not unexpected - Ordo had been fighting bravely against prion disease for some time - it remains as heartbreaking as it is unfair. +Ordo was sharp as a razor, with wit to match. During the time we knew him he was pursuing a PhD, yet he still found time to volunteer here and help his fellow spessman. +In admin channels you were as likely to find Ordo pontificating on history or food or ham radio as you were anything related to the game. But you knew - +no matter the topic - that his opinion was informed and valuable, and that he would deliver it with nuance, class and charm. + +This community - and the world - is worse off without him in it. +He will be missed. + +So should you read this and should you get the chance, raise a glass in his memory. +…but be sure to break out the good stuff. +That’s how he would have wanted it. +*/ +/obj/item/clothing/accessory/medal/gold/ordom + name = "\proper The OrdoM Memorial Medal For Excellence in Paperwork" + desc = "Awarded for outstanding excellence in paperwork, administration, and bureaucracy." + icon_state = "medal_paperwork" + medaltype = "medal-gold" + custom_materials = list(/datum/material/gold=1000) diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 5561d2d9738..1b4e1145ad8 100755 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -190,6 +190,10 @@ name = "\proper the head of personnel award for outstanding achievement in the field of excellence" desc = "Nanotrasen's dictionary defines excellence as \"the quality or condition of being excellent\". This is awarded to those rare crewmembers who fit that definition." +/obj/item/clothing/accessory/medal/silver/bureaucracy + name = "\improper Excellence in Bureaucracy Medal" + desc = "Awarded for exemplary managerial services rendered while under contract with Nanotrasen." + /obj/item/clothing/accessory/medal/gold name = "gold medal" desc = "A prestigious golden medal." @@ -197,6 +201,7 @@ medaltype = "medal-gold" custom_materials = list(/datum/material/gold=1000) + /obj/item/clothing/accessory/medal/gold/captain name = "medal of captaincy" desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew." diff --git a/icons/mob/clothing/accessories.dmi b/icons/mob/clothing/accessories.dmi index 71fcac7c0037e32b2d2d1a5cf324aaa571741a62..7fffdcae723f06c4e74852c7c5c0ba4121cb5e7f 100644 GIT binary patch literal 10474 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 J^S~zJzW{L0rR4ws literal 10260 zcmcI~XEdBqxA3Em=rxk)5kd-5L^rx1NC*;b)DXRQ21%3WeZO12b=R6R&+IejIcN91&pA8%xrQHJ@yNORaAwPwjchbJRL4ae6h&5=~m{8w@#fvKa_)H zplhyoHs{%3FVZ#_bYBo-C1mkp|m#YR5Wz_eNuAUHRqwq9ShYz5)^Cq zH9qebk#^?fO*ZK=NBZvsopk@YV<*~It{VL|Ys?z`B;gwKn#mr{$|C)MX#^gZ+;JaY zFU;ESJDw4R6_nEU=Gm`3UjhJ5Kt)0JrB@nu+Skc&Ihl87)mA0JqWkJ+$NP4*7AgsX zWD*~VpAhi8vMYl~CULQ7-r=(NYO!Odr7a(n*B0`fvy!XRV&UHFJI^|{80Fg>MrlKW zDWA&(Q)0@JI^~XdXZ7`ZV@E#oU`kLqv*+^C*lZ6>0CMj~&Z?ffYVk16dsce-Jgu}@ zx>%Q%mM)fneVB@t?*2wpCC8wZx@%nZ5Dcn^2y|!M!pDMA3B;`DN;(>y)SHHKl zwXx|bwKU9rbL-z*Nk1vy7el4LNMhs5v zj1v{I`ri{pAdc6{A-dg$6Pg24q{^pGKE56gI9dRYv)lq=z$3}w{cqpRAf4T6#Cp_+ z++lQTbdmpKX58?jTG=fxH*Vwl;p9O-eEJY}oqXPljm3Sq3+Ji_Uw=FX>7#<7Q={+) zT9EWJ_Xrm=U(JgK#d(6RFZ z+!o`$>}|Pz`^j}#GheateVy1vA{VpuLbC>DftAExNTh1-qRg1bYWwaVh6#FXMfh^O zpq$#dmBVPI5sBDw@1n5svs<95J7lh+NH}@f>$N|4-j2YE;$U z$o@Ar&zr6Vl+*DUMawGe8p5t3@qW1P^4)jvcaA?`qJMsgX!kCGP&;jUOF{=?*NVt@ z2W*ksd6NzL$Ln}|_j`|fY2tf(`_yP7<`)tcZ%6gY3v#qyw!aL&RyzX3kM`baZ_1m& zy|-bU15@G+O^1TCUl3=+q00tGAF`$V9_2g>2yRz$95XaVCTsEXs6f8oS`P%ff3F2h z9xTG+Cnxolee;WpuEw-~G&2QWI{aPDCYTr536iDQ_leoEQXJKV! zKHcD6iE&{!sIa(FbYA6m?2?U$%gO1&{#AL!rrI8~6!}`pnfjJh*T(Z34$+#y+CkDB z)3JzxJD#Htmvw4wC=?J!i|O6`zUOi9#H&PsgfC%fJcR z%01&8oPtYC{)U{q7yo$gDV%ki+6!8kJ zv438nq(7dCxwn0wNIb4MJIjM~bYrFdj>E#Eu>Enw-`kpiJHLyltQ zJjSa>-z{8qM=%~&iV9ZGHGwS<(xvYHL|`9X;G>`}P_GiB>3UOchr0U|+mhFlMtd_o(<$>= z9D3WnvOHOMw>oK*yc(`p`)0|sm${mY-o-V9TZxZX1(9ZEyFQ{fKe~e_Z!6-FC*fa~B5SJu0qw_^;j>0!3>r?6z z)!le+<>bs_g*w~nuz}Q&2j?T^xaB3>5%)&}-46F5HZ_M5; zVPPg<&ZwH)5pht1I%)L4#;qh=1!OceY0g&9OQvVq2s2)$+g+@FyQcK=t+%KgI)rWO7Vucwp9K6?20@%zaAeW#;_%;shefR>V!&eL-1k$?bo zs|hU-Q}%SbcW^&)|4QiHfWA^7SIfMD-O9XzKV&3MVT~NtSUK9)BTiFW)*`|i>Hf#L z#JOph<@<4QW23}|B@h?%#Lp{7>FMm>b8~MBiZBO=?yc;3?Yg)Q zP5lW@PhZ;(j~rXHW4d}|amf4xKywDwINZ}Peh)6QzfU?e1`UhvO*HZROS;cUY$bd% z?HOpP^wyZ4dLH&yN-@1`jMJ+(qnVLE_`~PZuih4Hb90m+O3Hn7OuRN_#`55M?A1CNj6>6B zIPVM?DfsGf0CUg$fuN{#+kowLDw|@*4ERh8CjL<`5m}YH^7L)(R+0HIYt`I+-n5_V z5X?LF_}eTaA%>-wWFs$Hchbt-zm}ZD!nYUf-1meX$uyY%k%WUn`xp86|Gx{3c@5{c z0yzu%E(IIan{NIrKaAeKKmsz}onpd64afSk#shsRt~rTCoA(F;Pa1rLhs2FgCn!}u z#uPhl9JNy}6crVf9jWW_Ix{+2 zhK8F;uYs1iInIiTiWqPIT(3un&)|cRiOJO3`l+w|-L;U=&~kSS>OrfOs;)+93jUatuKQUj{=cFvU(c{SC=D%d(Pxc({FX~PsJ>De(nsHq3h_Q zI|2tboCb>;p(8WtT2JG%VTlggFA_5|xhQF9%!hN;^9u^(U@({{;70L5j*Rr((Qhkh zhLQ=;T|DReUhM$lJFcAAK4Uu3d4SNqV>T+;17; zR)%~JXLZgtE*d}PZ1!c_JjsTcByi8kC=VpMMN-eO`69C$15F`$BYoSnErf=-XIaN^C1GAP4qAVg98$1tHtCxiQn)mbq^b zO;D6WTESb{r!PhQf`;Cb8Tl6(SL)X|On)pX5r~Y8{8n4b4D$HewQDUaeW~TBT3rkl zhBT``@{=AJ8_Ndm6c|LKBQ&LtiN|1YDcvH&`ANRt;IF)Q-rit9I;^eJEWBGh zu(rVv0*|ZR=fU4#mrbd?x`^8$$iR}I4YVUKBY-?(0Ma}gU2QwIu+;rU)MGOVC-#c&il%IugeUdauU|#s z7m{G!@IX{FUpOqdwLE$oB~w@cijR+ zsLA*GauOl^$Iioz}RLXK+yYs5C^w6Gn?Tf0u8&;gl0#Aqf23gnZSe zL*1o5m97Pe>e0E&<7@OpNl6Ka?Eio}IA~qnyNn6ky~;~ksmNaze2j92hOG1q46zv* z(FFx}zzmmLTAIDPySt%>@ER5Vsc|W@u(0r}1~>jcfBsaVq8|$h1*W9j@In|H{#<@A zridBkZ}wSS1UHu41Be_q$c`XxJML~K%Msdhmio}N4+=f?*`MKkxJc)uW!6?Vww^>( zlYYifp39R~VqeQM5YdoJ4eC^D>=!Cgo#9{*vg_X4xW{rp`K}um%93^P4FhoAymtM% ztiQk1!s23PoE(U=krA6*W(?{!QfHQ)lC&KX+|i)`2G+NQn7)10fPno|A1|+KIyyR& zHqm(n1vXROhi7Mgpo@r_y?#zav}o+P(`vNq(do_V=aiTLX^n1n4wXEgRQAFhM2}Kz zr@yjn-kKPL>JA_;%1?f>iD)$9B8iUd+$&u$MUaSdOS}TqePf;Dt0R)jO2=ygG$BiJ z3rUBW01?}X;@y(ZpIAh)%FF3Qrrj89Y;5NCjt5bwkoyKT-w+5k77>S$Cp4+$_vC^1 z?`m>$No~hU6hV4|TRF9~w7$i)?K1UNk3>f|<2r3zT^|7^eJR4Cen(}vw`8^_^E>nH zuPWd4C9(5jbZV8;ebpx5;#i1aQ=w&J6r5ImjKv9XTCyMl9joS%b}i_o_V*#q1-U#; z;L}Kq;iiil9sxs^6rr&%g1K+ARHa847&~iB*e(}o{5lLcK1uQshXoP8ljX~aiHQMn zULK8<9vyjkNwR!Xm275r-tpB^iWr)0v&Ie_0UaFV-~0CUFW?AYEVz^pF$_C z_gsEi=D03NCD+x78gAA3^EHO>tUv zPVs;%d+n}P_^t=+~40wropmYqii0D zKI1EM*H6)y_SbXNn{DA-ki0XcsR?uXeITCJJovG6<~1Mw^s6cfFpIQGeasU*<4`O8 z-gLAacU-$Y!HeJX}vem#XtYbA9) zK$Fi>)tg73HS|-ZuQ>|T{XM+4DSQ)88jL>3KHsXTN71|}O4b1nG>3lw9e6?ipPp;} z&+{lrs?&wVB|(JovD)_dc1tA+8xcKxLZW%ut86=_P>j#6wyheA-faJ*uRV{lZx-mh zd+5K;&o6-VeOA1%(722gl;Ro7Sv%ETs((H^qijLL%fvj3owWCyj6@~`;Eg)xSqyM1 zFS21RYaW8B3=1!qZ}`Flqax&MlruFvoedEFg?cdig-J)q*c+H%nuXPyEP-1`rWz$@ zV<|S-hj8xPh;O-)pS!yHtHs_BDX)N}FLyst zxp(#dCI%z}GKYrPiv}wxZ{Nx)&!o2Xo0!k|E8n_v01h9dQ@}}Yq@(~Qzmen29C=az zR=DV#8o(jl_Dx9A@oprlo>K2aPTEC%_NjCX{c4XYRG(jye742bCsJI zoU=tR;SMAf2gB?!8syQUrNlE9AW9{Xqz8ywwV{S*&xH)t#-z(CZ8jsK88F}W&UV65 zHZGFyW5TH;Lu9KCG%Dl<$R+Pu1QnWsCjd~RpeA+2!Q;@HLXq3zXfSR#qSpYHs| z-VpA~behA8tqmWWJbqms|4V3RJ&Q zsi>urP-cv5(72tP>u%seXz-X}UauGTGh5i&)tT*U2AJb{x@tkBioqJI)JaH1XbO`X ziedKThwZ*j1BUBWHsUFW!>`DvST1bUU!|nZPR|Gyt~IF91APi}Tca&|-HSN#!#vA^ z89&0*?HlLySD`6e@C+RQz8J+~3AA?OGkLfD7Ci0AZ%y_(MliKyvD+rr{)Kr-m-Fn+sIn&PGy|J$0>q}a)oUK^_+pRtVz*ou<$ zvHJj28Y-EUt36vRk~QVG&he?_obA)W!`jRXC$Ij|6v8q{cFA1h6uRi-Z(|5`Zs${UM9N)XKjtQM@nao#>c6TMp-xtMWcO} zx$_8aDyKKVE>cUH2VZBGg6agS8e;(WZ*thQ>o*)fjjumYGQttA5$&g@v$Qp*h4 zG`6PfRjue3yMsKzPWpY9TH53YPNK+`tyOB->#l-^$-a4=*EZ2EJt@xMU#~OUr|7pE#f9y6jWS%D#s^L{yf(fAc?tK3?MjJMk{xMfD4BTh~bvP<0gOy1ng5#bK z4I$3eu~^f80!o~D`o+Zj;+jSWK?_m?%%c@f+hrUoHT?H1FUb|mJ_x;}+xAELrJOT5p;hTQjl zApK8u)g$^RWBnubL@JcC!i56OpXyJoA(kT`>=&Wu^9NA8@%0-a%7UIzYreZ^jIv8% zz!I)FJzd(%9lq(C|4fZ$0E&Q~*?F(UJ_N>QW~`;?KZR=3KIrfG|B?Df*thT|nPHrzw8;1z0Lp0?hUPMbC-?&qt|F`Q) zX}xiyD{%q%F+JL_97_#r`{ZwG1|L4_q;rZq*?{?N^;mDZ<{BhFLY^>Z44^G!Ap8f=}F$MOTnd4-SUNROAXl_}8Bdy5bFBxB2I^XV^&p-)8c9LJNqc6e+Imrm9N1of-<{EmZ~SiO(; z8kfLlxW~C4lQmVCzw_d^N9>qDYuK{`xvh!QWke4-A~E3f^XB=kv0iiHfZO@8<&D|7 z*E%{pK{7H8jg2{tjRx#peOF-A#Doinr`2!+J5Jg#eerNCD*ko9t=1U`(xS8^3o`N6%@Al*DVqMGJ|D~Q@ zL|9kur`iZlMI^>QiQF_};5H$hHrLwT@lt;4$)08MXsT25>2UpnX2JLTVNdVs6}=2X z1r`~WYbkEgumv3ExtiP92#WryuBlnLJOgp`Y{XQ*OFZoUJ6jK925xMyyi5?JpgN#Z zVkZK>H>BSktVX}(^)NR#_ac7t>4-2W@bQx;4KBCRBDhU#on49T?(;^^(9TsKYAt~+ z@*p-b72XVD=cTu#X46xVQKxgrB7suvjPU+>2u&O}W+Wa)d6mD|%${y-l`VRW_!-YV z@5K$(=5Ff}LAo8zdHkhYX$Jt(sLNUaMEBVRa}FT@J43rfy${RfpK&89cW`nV93SbO zoBI~q;6Z7emAnXf0N!CIzW``xXe6c~bVI?9uz*9;I3KtILxPf$5)ux=R1te!hpm6Sz{E@%*dMz#<{lMk%wczBn2J71jsgOUe$)aS6P0__}@3uOO6 z-NXN7`on{)ygkhm4Mn#~dn^Qb!**vs-i^M?=b@KLtX_N5a z+4UX&!i8reT)keHuWuTp#Uiw6wZGlkepPh<8L73opu<~U4^#w{fPMaMgCChBt!uI- zQ$)FZa4sQn68a9#8#xoBFBYFCQ#BM{9=CqdGG69c zxn;O*$tz0ofFkQGv^l7`m-^fNgNF_BMr-SmA8K)Y-4gR2g7rOmWI#aVn~cwrdPH6z zmK#An>oiB|A3rx)P@x5h16`WPfKY-e0y4ht#)$?biMI_Cr?XmP&2kD{LxkYyF#YhbA;WET+~Ox@z(~0N>Kv zV)IXK_f>b>vZvYi-Q|Z|eNqD^Rlye#GD8642SFTZ+L`xYK?R_d1n|0C@fW)9xouPmv zsSI^@Y`$YugW{N)y}sxX?-XPB?kr&>X$zOwZsvMGSQmjGLlkRH8GQ>6nNr$#+PQkI z^)L+sf`66q#f2B}1Nfur4BzDvbGg)XLKD$5a+$I@X;O{yPy$Is)!nQpAI0NZ^L^Gi z+Q1le9$ayV+**lTt(W_aFNLF9X7b zPy$LS)BNpdtxT+WX?;)aX-`@yU$?Kk9$OYk`wnAA717bFPRFc^XbNEtv%|y;_vMwQ z3-or^WST*iac%V)#?Ra$Nabb36Uc)kLX)GO*#M#QJMYaD?~&|)-l8Tq3jT4qJe}6K z@s_^hAH%hvl8@TypSa0JWra)%AkkVXTu*re9|yr61itMt!>ZS%b8!mGD&MUfd!&g6 z%u06c37zOfQkmt~5UAh2j#Q`=$*$zY-P0aB6ReeY6xf$h wcp#84^Pc-=ik=x*o)s3B*7@(tyJGM(Ifg+M>kut-u-Xq$QPfZYjQ{`u diff --git a/icons/obj/clothing/accessories.dmi b/icons/obj/clothing/accessories.dmi index 767a8eb0f7bf204cec484c7c2e8b9921e3f566f1..d100834737edc2367f781235f1a72419776d5235 100644 GIT binary patch literal 12666 zcmb8W1yGdH*FXL&jkI*gBCVh_NO#B5C`!6?cP^}gASER&-3`(mN=tW(bT_z5{nzjN z`_H^Hzjx+0@60~WK5_5ad*YsR?&qEj)6`HTctrCE0007IB{^->_wRoP4i@T6^TKuw z06-ePy06{kEZp9^+Bm!0I5`4<_qT-j(Qq^#{NB;YLUvzrt=au|6c(phmE6z*mxAQ` zr{#n-kPd7!^7&==XP>YF?qu4T-R{~SUVXbb^41jEfCkOht-LfSp(!5-s<>QK&_iDc z=)Y#L=r6Jpw-f#g`BpsmTBCW!PA{FBZe^A0H6MdB#Ts-sgwq_xz$6n{fXU_d1Nw?A zwnB3}+h#Xhp7VxR{i5xK&H?=9yRSmkGcV9aJCq@f&U^ls)H6!=laOaZFQmOlv_87X zICfo}Rmp$ckfN^{N>HM}TgG(Th^ZcuuCS5fcEO>alpJI2FA%B1Vw8+ul=S7=OYagI z5wXunh|la2dh%(Ua(vgk*mRi5ohm3c3dySKkEEU}8D!|nvuiVUq<~zXl75c4DTda3 zNW~%X!M|NRsGz47D(yjD7B#J8dir{a6>)XHNXV(uloAC120&R(TG#vAVY;6;nMKBN z$Fvdb*!|^(44QJtzIieeBRgw2T1`;UdMr<*tQ?7g)pXw?)-qr2=&%0fKDXZaH+|nO zc?m^DezRvW*%BW!edJ_7W5f@3?qFt)30`UuUDjJZM&u&Pb-kJ=jnXS#q8)GhAe9X~ zJYc0Fm*uO+u>EqROPZhqT2R**cF+oKr|G*vZggHMk#78c(;XZ>hM;VwUvT`8FaPaf z=FZ2=%7FB->jEx`PuzYl&D8^)#?#-G2*$Wt&)B|sSPG8Ta^84y0Wrw=-A}Z!8#q_H z!#I`6vcIZY@S)|{7{PbeNB+9&P=CisrAb1T_B95S+nw1Aot0*~_H%&LA1(Qa9XGQb zHj3%j7qrIC1Nibc{+IhdFM0~kYPtO?EPEq*v)_~sG~t4WCNUKQvgSVon(d7;UdP#- zT|9F1T8J`eF$IC(obk9qWkzY9lMj_d9Js(-jkBXa5_YRKnUOv+WL1{{n)yq!((4xTU-0%w{LWf?_RoldF8gXJrVUh z=!_1$eLsyz29SQUL;Ay2L{c@$`0K?;toW{syQF#*JHz5W9upyBf$A80GQ)C5q(jopTz02-s z!WN6B{4T%CwebcQpY7iGp`Fw!9mCofIW_1r2&M1uH3^zgW8{S)-2wQ#eaPf422fjD z3jhm?iy*-7`Y54evheSV9BSPiqgd!;~ z(9#N`&AQa=!2yED#Xa8G-VROS;^HE5Y@n5TaFL3l!p9n)nF(21dIxl3gZ;TXgG=y> z_`BwrUT{YbhCHZYD`@m%XDxSuZQ4Df-Svm6(>8Y9?XgGCgK3=hriuZ$xZhQOrk@zS zy1I9e3q^LXXfrx{KjugsXx%E9Vn?YQ7sXmEV-58OQ{ogcBCCFPOUJC>VQUOrtZ_x0 z)-HxfI&6-<>}Xs3;sRhTx0Du^$c>8(m&y+)N|DK-Q-1U!+Dr#sD z!cXG4de)r#6%LM$utv|FMbdW;59O__*hVtMBN7uS)Y1fBs7bEv!&Mf6V{ z`sH#$`q)xJ#9{N5dl+LG9X4rSmnnBvH1WkJ#vEc*cC4WWE@oN zU}dSvZG3SNuW%B#WtlL#k0}j;pa%@!zKu;v!j>l1eEs_K%#8lU)fF1>Q!|`CDws=_ zJvRoWPuGJ25Nm4=J4ac1qKfsD-8GKc7V6}R!5=-Cn4~Jek5o?=(F*|Kq}4ATnmPQ? z&4~=yUVulspsRmAIH@<|wXY~)oPCwvFGyoXn4j97^>smBK|*Bt2|l9~&PO14%mf_> z?SfZGNomNABJW%-lblSH6q2kuQyqfG?cqH=vIp@OQI_c6DgKC9U`bvfM;rZovfX?8u{c^Jh03V2FW0I5vJ2t!(q*WJAOH14QjB+Kh2`re; zqWgm4*&u_59rg9~Md{onirr)AnKHxMl9Sn

23!_uW)jcee1+?{G{#$PJX4>Es5 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 literal 11201 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 From 93ee93cb25c35ff65ad2c43d519653e5292f47f8 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 16:01:38 -0700 Subject: [PATCH 19/40] Automatic changelog generation for PR #53234 [ci skip] --- html/changelogs/AutoChangeLog-pr-53234.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53234.yml diff --git a/html/changelogs/AutoChangeLog-pr-53234.yml b/html/changelogs/AutoChangeLog-pr-53234.yml new file mode 100644 index 00000000000..4f8d8dfcc86 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53234.yml @@ -0,0 +1,5 @@ +author: "oranges, kryson" +delete-after: True +changes: + - rscadd: "Added a medal box for the Head Of Personnel" + - rscadd: "Added the OrdoM memorial medal for paperwork excellence" From 7852a4508f469bc187d36a7772c40e2e432905b8 Mon Sep 17 00:00:00 2001 From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Date: Sat, 29 Aug 2020 19:12:33 -0400 Subject: [PATCH 20/40] Makes water recyclers fabricate-able, and makes showers preform a touch reaction only. (#53279) --- code/game/objects/structures/shower.dm | 1 - code/modules/research/designs/stock_parts_designs.dm | 10 ++++++++++ code/modules/research/techweb/all_nodes.dm | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index e80853e34b1..2eea9f6fb07 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -121,7 +121,6 @@ A.wash(CLEAN_WASH) SEND_SIGNAL(A, COMSIG_ADD_MOOD_EVENT, "shower", /datum/mood_event/nice_shower) reagents.expose(A, TOUCH) - reagents.expose(A, VAPOR) if(isliving(A)) check_heat(A) diff --git a/code/modules/research/designs/stock_parts_designs.dm b/code/modules/research/designs/stock_parts_designs.dm index ad9c51e8b14..699f0ac5035 100644 --- a/code/modules/research/designs/stock_parts_designs.dm +++ b/code/modules/research/designs/stock_parts_designs.dm @@ -370,3 +370,13 @@ materials = list(/datum/material/iron=50, /datum/material/glass=10) build_path = /obj/item/stock_parts/card_reader category = list("Stock Parts") + +/datum/design/water_recycler + name = "Water Recycler" + desc = "A small hydrostatic reclaimer, it takes moisture out of the air and returns it back to the source." + id = "w-recycler" + build_type = PROTOLATHE | AUTOLATHE + materials = list(/datum/material/plastic = 200, /datum/material/iron = 50) + build_path = /obj/item/stock_parts/water_recycler + category = list("Stock Parts") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 072a4107958..169091f9d9d 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -56,7 +56,7 @@ starting_node = TRUE display_name = "Basic Medical Equipment" description = "Basic medical tools and equipment." - design_ids = list("cybernetic_liver", "cybernetic_heart", "cybernetic_lungs","cybernetic_stomach", "scalpel", "circular_saw", "bonesetter", "surgicaldrill", "retractor", "cautery", "hemostat", "stethoscope", + design_ids = list("cybernetic_liver", "cybernetic_heart", "cybernetic_lungs","cybernetic_stomach", "scalpel", "circular_saw", "bonesetter", "surgicaldrill", "retractor", "cautery", "hemostat", "stethoscope", "surgical_drapes", "syringe", "plumbing_rcd", "beaker", "large_beaker", "xlarge_beaker", "dropper", "defibmountdefault", "surgical_tape", "portable_chem_mixer") /////////////////////////Biotech///////////////////////// @@ -134,7 +134,7 @@ display_name = "Industrial Engineering" description = "A refresher course on modern engineering technology." prereq_ids = list("base") - design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "scanner_gate", + design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "w-recycler" , "emitter", "high_cell", "adv_matter_bin", "scanner_gate", "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "welding_goggles", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt", "electrolyzer", "adv_electrolite") From edc15376cd11a92f5fc2ae2c5644c4279be7a6e7 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 16:12:38 -0700 Subject: [PATCH 21/40] Automatic changelog generation for PR #53279 [ci skip] --- html/changelogs/AutoChangeLog-pr-53279.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53279.yml diff --git a/html/changelogs/AutoChangeLog-pr-53279.yml b/html/changelogs/AutoChangeLog-pr-53279.yml new file mode 100644 index 00000000000..3f91a18ef29 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53279.yml @@ -0,0 +1,5 @@ +author: "ArcaneMusic" +delete-after: True +changes: + - bugfix: "Showers now preform a touch reaction, not a touch/vapor reaction with piped reagents." + - bugfix: "You can now build water recyclers in lathes, as intended." From f84c8e44c00229f8b281d8e710b1f7c64ece074a Mon Sep 17 00:00:00 2001 From: Qustinnus Date: Sun, 30 Aug 2020 01:48:17 +0200 Subject: [PATCH 22/40] Adds a food trash element (#53225) adds a food trash element, for dumping trash when u eat food unused now, needed for food refactor. spawns trash in your hands (or on the floor) when the food this is attached to is eaten. --- code/__DEFINES/dcs/signals.dm | 3 ++ code/datums/components/food/edible.dm | 22 +++++++-------- code/datums/elements/food/food_trash.dm | 37 +++++++++++++++++++++++++ tgstation.dme | 1 + 4 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 code/datums/elements/food/food_trash.dm diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 1e8d0d8d35d..c64fcdefaca 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -662,6 +662,9 @@ ///from base of obj/item/reagent_containers/food/snacks/attack() & Edible component: (mob/living/eater, mob/feeder, bitecount, bitesize) #define COMSIG_FOOD_EATEN "food_eaten" +///from base of Component/edible/On_Consume: (mob/living/eater, mob/living/feeder) +#define COMSIG_FOOD_CONSUMED "food_consumed" + #define COMSIG_ITEM_FRIED "item_fried" #define COMSIG_FRYING_HANDLED (1<<0) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index a3b90c8c131..a38dcc04d59 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -157,7 +157,6 @@ Behavior that's still missing from this component that original food items had t return if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it. to_chat(feeder, "None of [owner] left, oh no!") - on_consume?.Invoke(eater, feeder) if(isturf(parent)) var/turf/T = parent T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) @@ -230,7 +229,8 @@ Behavior that's still missing from this component that original food items had t var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, methods = INGEST) bitecount++ - On_Consume(eater) + if(!owner.reagents.total_volume) + On_Consume(eater, feeder) checkLiked(fraction, eater) //Invoke our after eat callback if it is valid @@ -283,18 +283,16 @@ Behavior that's still missing from this component that original food items had t last_check_time = world.time ///Delete the item when it is fully eaten -/datum/component/edible/proc/On_Consume(mob/living/eater) +/datum/component/edible/proc/On_Consume(mob/living/eater, mob/living/feeder) + SEND_SIGNAL(parent, COMSIG_FOOD_CONSUMED, eater, feeder) - var/atom/owner = parent + on_consume?.Invoke(eater, feeder) - if(!eater) - return - if(!owner.reagents.total_volume) - if(isturf(parent)) - var/turf/T = parent - T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) - else - qdel(parent) + if(isturf(parent)) + var/turf/T = parent + T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) + else + qdel(parent) ///Ability to feed food to puppers /datum/component/edible/proc/UseByAnimal(datum/source, mob/user) diff --git a/code/datums/elements/food/food_trash.dm b/code/datums/elements/food/food_trash.dm new file mode 100644 index 00000000000..b38f328bd0c --- /dev/null +++ b/code/datums/elements/food/food_trash.dm @@ -0,0 +1,37 @@ +// If an item has the food_trash element it will drop an item when it is consumed. +/datum/element/food_trash + element_flags = ELEMENT_BESPOKE + id_arg_index = 2 + /// The type of trash that is spawned by this element + var/trash + +/datum/element/food_trash/Attach(datum/target, atom/trash) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + src.trash = trash + RegisterSignal(target, COMSIG_FOOD_CONSUMED, .proc/generate_trash) + +/datum/element/food_trash/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_FOOD_CONSUMED) + +/datum/element/food_trash/proc/generate_trash(datum/source, mob/living/eater, mob/living/feeder) + SIGNAL_HANDLER + + ///cringy signal_handler shouldnt be needed if you dont want to return but oh well + INVOKE_ASYNC(src, .proc/async_generate_trash, source) + +/datum/element/food_trash/proc/async_generate_trash(datum/source) + var/datum/component/edible/edible_component = source + + var/obj/item/trash_item = new trash() + + var/atom/edible_object = edible_component.parent + + var/mob/living/mob_location = edible_object.loc //The foods location + + if(istype(mob_location)) + mob_location.put_in_hands(trash_item) + else + trash_item.forceMove(get_turf(edible_component.parent)) diff --git a/tgstation.dme b/tgstation.dme index 2773f014d1c..310b0f663d1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -582,6 +582,7 @@ #include "code\datums\elements\update_icon_updates_onmob.dm" #include "code\datums\elements\waddling.dm" #include "code\datums\elements\food\dunkable.dm" +#include "code\datums\elements\food\food_trash.dm" #include "code\datums\elements\food\processable.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" From 0f1aca2b1c0f83c3434c4323a43dc1c886ed36fc Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 16:48:22 -0700 Subject: [PATCH 23/40] Automatic changelog generation for PR #53225 [ci skip] --- html/changelogs/AutoChangeLog-pr-53225.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53225.yml diff --git a/html/changelogs/AutoChangeLog-pr-53225.yml b/html/changelogs/AutoChangeLog-pr-53225.yml new file mode 100644 index 00000000000..54a6eabc72d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53225.yml @@ -0,0 +1,4 @@ +author: "qustinnus" +delete-after: True +changes: + - code_imp: "food trash element, for dumping trash when u eat food" From 584068b59e271c0108557902e8516c70d6ae56f2 Mon Sep 17 00:00:00 2001 From: Ghilker <42839747+Ghilker@users.noreply.github.com> Date: Sun, 30 Aug 2020 01:50:57 +0200 Subject: [PATCH 24/40] Add pressure valve atmos device (#53281) New item the pressure valve its a device that allow gas flow in a pipenet if the input pressure is higher than the set pressure adds: Pressure Valve (a device that allow gas flow in a pipenet if the input pressure is higher than the set pressure) --- code/game/objects/items/RPD.dm | 1 + .../binary_devices/pressure_valve.dm | 176 ++++++++++++++++++ .../components/binary_devices.dmi | Bin 41057 -> 46296 bytes icons/obj/atmospherics/pipes/pipe_item.dmi | Bin 25534 -> 25165 bytes tgstation.dme | 1 + 5 files changed, 178 insertions(+) create mode 100644 code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index c91f7557eb2..2cc7e05a2b8 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -33,6 +33,7 @@ GLOBAL_LIST_INIT(atmos_pipe_recipes, list( new /datum/pipe_info/pipe("Passive Vent", /obj/machinery/atmospherics/components/unary/passive_vent), new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve), new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital), + new /datum/pipe_info/pipe("Pressure Valve", /obj/machinery/atmospherics/components/binary/pressure_valve), new /datum/pipe_info/meter("Meter"), ), "Heat Exchange" = list( diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm new file mode 100644 index 00000000000..f378009a0b5 --- /dev/null +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -0,0 +1,176 @@ +/obj/machinery/atmospherics/components/binary/pressure_valve + icon_state = "pvalve_map-2" + name = "pressure valve" + desc = "An activable valve that let gas pass through if the pressure on the input side is higher than the set pressure." + + can_unwrench = TRUE + shift_underlay_only = FALSE + + ///Amount of pressure needed before the valve for it to open + var/target_pressure = ONE_ATMOSPHERE + ///Frequency for radio signaling + var/frequency = 0 + ///ID for radio signaling + var/id = null + ///Connection to the radio processing + var/datum/radio_frequency/radio_connection + ///Check if the gas is moving from one pipenet to the other + var/is_gas_flowing = FALSE + + construction_type = /obj/item/pipe/directional + pipe_state = "pvalve" + +/obj/machinery/atmospherics/components/binary/pressure_valve/CtrlClick(mob/user) + if(can_interact(user)) + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(user)]", INVESTIGATE_ATMOS) + update_icon() + return ..() + +/obj/machinery/atmospherics/components/binary/pressure_valve/AltClick(mob/user) + if(can_interact(user)) + target_pressure = MAX_OUTPUT_PRESSURE + investigate_log("was set to [target_pressure] kPa by [key_name(user)]", INVESTIGATE_ATMOS) + update_icon() + return ..() + +/obj/machinery/atmospherics/components/binary/pressure_valve/Destroy() + SSradio.remove_object(src,frequency) + if(radio_connection) + radio_connection = null + return ..() + +/obj/machinery/atmospherics/components/binary/pressure_valve/update_icon_nopipes() + if(on && is_operational && is_gas_flowing) + icon_state = "pvalve_flow" + else if(on && is_operational && !is_gas_flowing) + icon_state = "pvalve_on" + else + icon_state = "pvalve_off" + +/obj/machinery/atmospherics/components/binary/pressure_valve/process_atmos() + + if(!on || !is_operational) + return + + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + + if(air1.return_pressure() > target_pressure) + if(air1.pump_gas_to(air2, air1.return_pressure())) + update_parents() + is_gas_flowing = TRUE + update_icon_nopipes() + else + is_gas_flowing = FALSE + update_icon_nopipes() + +/obj/machinery/atmospherics/components/binary/pressure_valve/proc/set_frequency(new_frequency) + SSradio.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) + +/obj/machinery/atmospherics/components/binary/pressure_valve/proc/broadcast_status() + if(!radio_connection) + return + + var/datum/signal/signal = new(list( + "tag" = id, + "device" = "AGP", + "power" = on, + "target_output" = target_pressure, + "sigtype" = "status" + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) + +/obj/machinery/atmospherics/components/binary/pressure_valve/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AtmosPump", name) + ui.open() + +/obj/machinery/atmospherics/components/binary/pressure_valve/ui_data() + var/data = list() + data["on"] = on + data["pressure"] = round(target_pressure) + data["max_pressure"] = round(MAX_OUTPUT_PRESSURE) + return data + +/obj/machinery/atmospherics/components/binary/pressure_valve/ui_act(action, params) + if(..()) + return + switch(action) + if("power") + on = !on + investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) + . = TRUE + if("pressure") + var/pressure = params["pressure"] + if(pressure == "max") + pressure = MAX_OUTPUT_PRESSURE + . = TRUE + else if(text2num(pressure) != null) + pressure = text2num(pressure) + . = TRUE + if(.) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) + investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) + update_icon() + +/obj/machinery/atmospherics/components/binary/pressure_valve/atmosinit() + . = ..() + if(frequency) + set_frequency(frequency) + +/obj/machinery/atmospherics/components/binary/pressure_valve/receive_signal(datum/signal/signal) + if(!signal.data["tag"] || (signal.data["tag"] != id) || (signal.data["sigtype"]!="command")) + return + + var/old_on = on //for logging + + if("power" in signal.data) + on = text2num(signal.data["power"]) + + if("power_toggle" in signal.data) + on = !on + + if("set_output_pressure" in signal.data) + target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + + if(on != old_on) + investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) + + if("status" in signal.data) + broadcast_status() + return + + broadcast_status() + update_icon() + +/obj/machinery/atmospherics/components/binary/pressure_valve/can_unwrench(mob/user) + . = ..() + if(. && on && is_operational) + to_chat(user, "You cannot unwrench [src], turn it off first!") + return FALSE + + +/obj/machinery/atmospherics/components/binary/pressure_valve/layer1 + piping_layer = 1 + icon_state= "pvalve_map-1" + +/obj/machinery/atmospherics/components/binary/pressure_valve/layer3 + piping_layer = 3 + icon_state= "pvalve_map-3" + +/obj/machinery/atmospherics/components/binary/pressure_valve/on + on = TRUE + icon_state = "pvalve_on_map-2" + +/obj/machinery/atmospherics/components/binary/pressure_valve/on/layer1 + piping_layer = 1 + icon_state= "pvalve_on_map-1" + +/obj/machinery/atmospherics/components/binary/pressure_valve/on/layer3 + piping_layer = 3 + icon_state= "pvalve_on_map-3" diff --git a/icons/obj/atmospherics/components/binary_devices.dmi b/icons/obj/atmospherics/components/binary_devices.dmi index c35d6d0e55087a2d76c720c5e3f89c2ab70f2733..212589d183e1da43b210f7009cb925d411ca3abd 100644 GIT binary patch literal 46296 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 }ieF}Mqqm7|(RE8&>xs{T4Mlu;9}jkQ4A%&d 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 BA&b_L$OdY~ANe0|(F{DKkW|2@Bot}Db1 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 b-G&itQ-B?bY3IgN3_SFY8tN2i+uZzraNv(< literal 41057 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®4Nv7J!IG_=zjsgzVxa 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%0A3gByxziAX;NQS3dj}6PC1oHZr#e2r7C*uc zC{#8bJZ`uJ=fGQ=2d1#c(|Ih{3f=FUN$Zd~JSmqq!+&5$dY~SEXK!TLbbE}jiXzAt zE%$Kj|8@%jK0WfTvZDsN^J3il?%Qd#qxrZrX%h&j)*HiR^ zgxkXZp9kKl{;wnAr}*po8ULRD?icp{&$;4%y`5cNZ%VEhm)q^htc^CmfTMo9+z$kP zdVhnVhpBFJ?B{%u4d3e?06Qpu{s5Z=bABt#-|_C)H{IJOrz`#b4eGAV!roo0I9Vnt zIrIO$l;}#&fN$^l_TS7~y!!ur)&pPf>(~9w7vuV2^QAupSg}d(|Hp0n|GD$G|C)+7 zom9O3$pUw3bofW?wSSPoC%}91)C;Mmq;1-qcdG3RUWr`D;gee)qsROr&q;UQj>pHj zExuY^n3GY_HD9bxM6vU59J>K{2wlXrZZB|YVbt2R+Hz|ba1Si&f063;*&lXo*>dDx z^9TK&IMTa*t*=6`r=RE%-{RcFC|m{nd^%%$n-9<`(N|@Yw`Kg`0jtX z(haNh4YmHH>;?{oPZ6(Y*irX)*Hoc6z3FS6fS%dF&cOaIxpdYKsVi0vR!@$nKY9%u zy9G{LWo@;Z(5Ncx`rinc&feHp0tb6{Z~R~KdwcedSAUp|f7s+X1?S{Q?gTBW%3dfu z-R=LbiS`H1?XNw2u`lrVbou$ghxsMGtj}dQckbM+cj?Q2OJDUj2bS+isi{lfFM6tK z9e%YaJ~lS=-`YKT0pEW#*W2?nP0C}ct)F~KULDx21BOZDzq@JHoBmt;w9neobEN)p z*QdRXhySrB$3#ZH%-#ZAC=t8Z&;xif5bAtj^A4o>z()?=a~6Q+1N*4o*DG>2emQAg zrS;dE5>{uoI2$2}m0NAIIcj1|MnrT{la_H>?zC}em`F#jpuOF-`PhQHq--4zdz6gpPazO z)=#7w9JUJp_j;A=$=R|7xF4_mo>TfB=d#Wzp$Pzn C{RNN! diff --git a/icons/obj/atmospherics/pipes/pipe_item.dmi b/icons/obj/atmospherics/pipes/pipe_item.dmi index a7501045f9e1f9f1627806ef4e40c6aa3b04d5fe..1ce202ee7cd42de9ab559b81bcc0dc84c291a930 100644 GIT binary patch literal 25165 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 P4#d>h+^ERVG5G%hOcY}4 diff --git a/tgstation.dme b/tgstation.dme index 310b0f663d1..814ef3a7c2a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1629,6 +1629,7 @@ #include "code\modules\atmospherics\machinery\components\binary_devices\circulator.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\dp_vent_pump.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\passive_gate.dm" +#include "code\modules\atmospherics\machinery\components\binary_devices\pressure_valve.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\pump.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\valve.dm" #include "code\modules\atmospherics\machinery\components\binary_devices\volume_pump.dm" From 7269e682dcdca27230f3af6aa9c2eb454cf66974 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 29 Aug 2020 16:51:00 -0700 Subject: [PATCH 25/40] Automatic changelog generation for PR #53281 [ci skip] --- html/changelogs/AutoChangeLog-pr-53281.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53281.yml diff --git a/html/changelogs/AutoChangeLog-pr-53281.yml b/html/changelogs/AutoChangeLog-pr-53281.yml new file mode 100644 index 00000000000..9c85f741eee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53281.yml @@ -0,0 +1,4 @@ +author: "Ghilker" +delete-after: True +changes: + - rscadd: "Pressure Valve (a device that allow gas flow in a pipenet if the input pressure is higher than the set pressure)" From 5130bf00fccdc459e12de8766add4941ade55a63 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 30 Aug 2020 00:03:05 +0000 Subject: [PATCH 26/40] Automatic changelog compile [ci skip] --- html/changelog.html | 102 ++++++++------------- html/changelogs/.all_changelog.yml | 28 ++++++ html/changelogs/AutoChangeLog-pr-51082.yml | 5 - html/changelogs/AutoChangeLog-pr-52936.yml | 4 - html/changelogs/AutoChangeLog-pr-53198.yml | 4 - html/changelogs/AutoChangeLog-pr-53224.yml | 6 -- html/changelogs/AutoChangeLog-pr-53225.yml | 4 - html/changelogs/AutoChangeLog-pr-53234.yml | 5 - html/changelogs/AutoChangeLog-pr-53279.yml | 5 - html/changelogs/AutoChangeLog-pr-53281.yml | 4 - html/changelogs/AutoChangeLog-pr-53296.yml | 4 - 11 files changed, 68 insertions(+), 103 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-51082.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-52936.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53198.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53224.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53225.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53234.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53279.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53281.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-53296.yml diff --git a/html/changelog.html b/html/changelog.html index 4fd172b2aa2..bffed07e4c6 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,6 +51,46 @@ -->
+

30 August 2020

+

ArcaneMusic updated:

+
    +
  • Showers now preform a touch reaction, not a touch/vapor reaction with piped reagents.
  • +
  • You can now build water recyclers in lathes, as intended.
  • +
+

Ghilker updated:

+
    +
  • Pressure Valve (a device that allow gas flow in a pipenet if the input pressure is higher than the set pressure)
  • +
+

Jared-Fogle updated:

+
    +
  • You can now spray paint anything you want again.
  • +
+

LemonInTheDark updated:

+
    +
  • You can no longer increase your view range by messing about with ghostroles
  • +
+

Qustinnus, 4Dplanner updated:

+
    +
  • Adds map_generator datums, which will handle terrain generation for a specific area
  • +
  • Adds a jungle generator datum, which uses rust-g noise to generate 3 layers of perlin noise to make a somewhat coheisve and seamless jungle based on height humidity and heat.
  • +
+

YPOQ updated:

+
    +
  • Silicons and parrots can speak into their radios again.
  • +
+

oranges, kryson updated:

+
    +
  • Added a medal box for the Head Of Personnel
  • +
  • Added the OrdoM memorial medal for paperwork excellence
  • +
+

qustinnus updated:

+
    +
  • burgers now composition based
  • +
  • you can now grind bread again
  • +
  • you can now auto-eat things with edible component
  • +
  • food trash element, for dumping trash when u eat food
  • +
+

29 August 2020

ATHATH updated:

    @@ -2718,68 +2758,6 @@
  • ...And they turned the old medipen into a luxury
  • Lavaland Extract was found to break laws of physics and was removed from existance
- -

28 June 2020

-

ATHATH updated:

-
    -
  • Fixed n2o knocking out players for longer than expected.
  • -
-

ArcaneMusic updated:

-
    -
  • Adds the Cargo Bounty UI as a modular app, with cargo access.
  • -
  • The Cargo Bounty UI has been revamped.
  • -
  • Cargo tablets now come preinstalled with the price tagger and cargo bounty apps.
  • -
-

Cyberboss updated:

-
    -
  • TGS4 channel tags will now use ',' as a delimiter to indicate multiple tags.
  • -
-

EdgeLordExe updated:

-
    -
  • Mansus grasp now wont proc on things it shouldnt proc on, tl;dr you wont loose your charges by missclicking on a tile.
  • -
  • Replaced touch of madness with a new fun late game spell
  • -
  • Switches positions of blood siphon and cleave
  • -
-

Fikou updated:

-
    -
  • you can now transmute a pen, a pair of eyes, a bible and human skin into a spare codex cicatrix if you researched some new lore
  • -
  • mjolnir now knockdowns instead of stunning
  • -
-

Hopek updated:

-
    -
  • Tape recorder has been reworked.
  • -
-

KathyRyals updated:

-
    -
  • The Xray mutation can no longer be obtained via combining radioactive and thermal eyes.
  • -
-

ShizCalev updated:

-
    -
  • Fixed some bad areacoord messages when teleporting around.
  • -
  • Fixed an exploit that would allow you to destroy round-critical / indestructible items with folders.
  • -
-

XRandomXManX updated:

-
    -
  • Removed Decal Painter from BEPIS Minor Rewards
  • -
  • Added Decal Painter to the Basic Tools Research Node
  • -
  • Added Decal Painter to Maintenance Loot alongside the Airlock Painter
  • -
-

necromanceranne updated:

-
    -
  • Added new heretic blade sprites! One for the Ashen Blade, Rusted Blade and Flesh Blade
  • -
  • The blades have some descriptions now.
  • -
  • Fixed some infiltrator toolbox sprites (hopefully).
  • -
  • Some eldritch items have had their descriptions and text altered to be a bit more legible and flavourful.
  • -
-

nightred updated:

-
    -
  • Service department area update on Meta
  • -
  • Stackers deposit to the silo when picking up stacks from the input side.
  • -
-

silicons updated:

-
    -
  • An explosion compressor has been added to science. It makes raw anomaly cores into proper anomaly cores using prepared TTVs of a specific required blast radius.
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index dd7d478a2a9..22cc54d7889 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -42440,3 +42440,31 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. fixed. actioninja: - rscadd: Automatic glide size adjustment for smoother movement +2020-08-30: + ArcaneMusic: + - bugfix: Showers now preform a touch reaction, not a touch/vapor reaction with + piped reagents. + - bugfix: You can now build water recyclers in lathes, as intended. + Ghilker: + - rscadd: Pressure Valve (a device that allow gas flow in a pipenet if the input + pressure is higher than the set pressure) + Jared-Fogle: + - rscadd: You can now spray paint anything you want again. + LemonInTheDark: + - bugfix: You can no longer increase your view range by messing about with ghostroles + Qustinnus, 4Dplanner: + - rscadd: Adds map_generator datums, which will handle terrain generation for a + specific area + - rscadd: Adds a jungle generator datum, which uses rust-g noise to generate 3 layers + of perlin noise to make a somewhat coheisve and seamless jungle based on height + humidity and heat. + YPOQ: + - bugfix: Silicons and parrots can speak into their radios again. + oranges, kryson: + - rscadd: Added a medal box for the Head Of Personnel + - rscadd: Added the OrdoM memorial medal for paperwork excellence + qustinnus: + - code_imp: burgers now composition based + - bugfix: you can now grind bread again + - rscadd: you can now auto-eat things with edible component + - code_imp: food trash element, for dumping trash when u eat food diff --git a/html/changelogs/AutoChangeLog-pr-51082.yml b/html/changelogs/AutoChangeLog-pr-51082.yml deleted file mode 100644 index e925a508334..00000000000 --- a/html/changelogs/AutoChangeLog-pr-51082.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Qustinnus, 4Dplanner" -delete-after: True -changes: - - rscadd: "Adds map_generator datums, which will handle terrain generation for a specific area" - - rscadd: "Adds a jungle generator datum, which uses rust-g noise to generate 3 layers of perlin noise to make a somewhat coheisve and seamless jungle based on height humidity and heat." diff --git a/html/changelogs/AutoChangeLog-pr-52936.yml b/html/changelogs/AutoChangeLog-pr-52936.yml deleted file mode 100644 index f634e219660..00000000000 --- a/html/changelogs/AutoChangeLog-pr-52936.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jared-Fogle" -delete-after: True -changes: - - rscadd: "You can now spray paint anything you want again." diff --git a/html/changelogs/AutoChangeLog-pr-53198.yml b/html/changelogs/AutoChangeLog-pr-53198.yml deleted file mode 100644 index 7331d13abbd..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53198.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LemonInTheDark" -delete-after: True -changes: - - bugfix: "You can no longer increase your view range by messing about with ghostroles" diff --git a/html/changelogs/AutoChangeLog-pr-53224.yml b/html/changelogs/AutoChangeLog-pr-53224.yml deleted file mode 100644 index 40e6d8341d5..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53224.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "qustinnus" -delete-after: True -changes: - - code_imp: "burgers now composition based" - - bugfix: "you can now grind bread again" - - rscadd: "you can now auto-eat things with edible component" diff --git a/html/changelogs/AutoChangeLog-pr-53225.yml b/html/changelogs/AutoChangeLog-pr-53225.yml deleted file mode 100644 index 54a6eabc72d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53225.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "qustinnus" -delete-after: True -changes: - - code_imp: "food trash element, for dumping trash when u eat food" diff --git a/html/changelogs/AutoChangeLog-pr-53234.yml b/html/changelogs/AutoChangeLog-pr-53234.yml deleted file mode 100644 index 4f8d8dfcc86..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53234.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "oranges, kryson" -delete-after: True -changes: - - rscadd: "Added a medal box for the Head Of Personnel" - - rscadd: "Added the OrdoM memorial medal for paperwork excellence" diff --git a/html/changelogs/AutoChangeLog-pr-53279.yml b/html/changelogs/AutoChangeLog-pr-53279.yml deleted file mode 100644 index 3f91a18ef29..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53279.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ArcaneMusic" -delete-after: True -changes: - - bugfix: "Showers now preform a touch reaction, not a touch/vapor reaction with piped reagents." - - bugfix: "You can now build water recyclers in lathes, as intended." diff --git a/html/changelogs/AutoChangeLog-pr-53281.yml b/html/changelogs/AutoChangeLog-pr-53281.yml deleted file mode 100644 index 9c85f741eee..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53281.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghilker" -delete-after: True -changes: - - rscadd: "Pressure Valve (a device that allow gas flow in a pipenet if the input pressure is higher than the set pressure)" diff --git a/html/changelogs/AutoChangeLog-pr-53296.yml b/html/changelogs/AutoChangeLog-pr-53296.yml deleted file mode 100644 index 5b53a476028..00000000000 --- a/html/changelogs/AutoChangeLog-pr-53296.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "YPOQ" -delete-after: True -changes: - - bugfix: "Silicons and parrots can speak into their radios again." From 70d8d59911e7c8e184dcedaecfbdcf3c1f030583 Mon Sep 17 00:00:00 2001 From: TiviPlus <57223640+TiviPlus@users.noreply.github.com> Date: Sun, 30 Aug 2020 02:47:38 +0200 Subject: [PATCH 27/40] Fix the lighting overlay (#53317) Co-authored-by: TiviPlus --- icons/effects/light_overlays/light_256.dmi | Bin 35566 -> 21365 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/effects/light_overlays/light_256.dmi b/icons/effects/light_overlays/light_256.dmi index f895792da42d63143e15641a198443e290f3671c..701562efcd8f85fea23b0bf9475c33698c57c338 100644 GIT binary patch literal 21365 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 Date: Sat, 29 Aug 2020 17:47:42 -0700 Subject: [PATCH 28/40] Automatic changelog generation for PR #53317 [ci skip] --- html/changelogs/AutoChangeLog-pr-53317.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53317.yml diff --git a/html/changelogs/AutoChangeLog-pr-53317.yml b/html/changelogs/AutoChangeLog-pr-53317.yml new file mode 100644 index 00000000000..a80c9a1602a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53317.yml @@ -0,0 +1,4 @@ +author: "TiviPlus" +delete-after: True +changes: + - bugfix: "fixed overlay lighting sometimes displaying offset" From f25927fdf9ce5024e500ea9b1e3affb4c103399e Mon Sep 17 00:00:00 2001 From: Aleksej Komarov Date: Sun, 30 Aug 2020 03:54:13 +0300 Subject: [PATCH 29/40] tgui: Add a proxy storage object with graceful fallback (#53294) --- tgui/packages/common/storage.js | 66 +++++++++++++++++++++++++------- tgui/public/tgui-common.chunk.js | 2 +- tgui/public/tgui.html | 3 ++ 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js index 33397f33a17..83dc6d99c1c 100644 --- a/tgui/packages/common/storage.js +++ b/tgui/packages/common/storage.js @@ -44,19 +44,19 @@ class MemoryBackend { this.store = {}; } - async get(key) { + get(key) { return this.store[key]; } - async set(key, value) { + set(key, value) { this.store[key] = value; } - async remove(key) { + remove(key) { this.store[key] = undefined; } - async clear() { + clear() { this.store = {}; } } @@ -64,25 +64,24 @@ class MemoryBackend { class LocalStorageBackend { constructor() { this.impl = IMPL_LOCAL_STORAGE; - this.store = {}; } - async get(key) { + get(key) { const value = localStorage.getItem(key); if (typeof value === 'string') { return JSON.parse(value); } } - async set(key, value) { + set(key, value) { localStorage.setItem(key, JSON.stringify(value)); } - async remove(key) { + remove(key) { localStorage.removeItem(key); } - async clear() { + clear() { localStorage.clear(); } } @@ -150,8 +149,47 @@ class IndexedDbBackend { } } -export const storage = ( - testIndexedDb() && new IndexedDbBackend() - || testLocalStorage() && new LocalStorageBackend() - || new MemoryBackend() -); +/** + * Web Storage Proxy object, which selects the best backend available + * depending on the environment. + */ +class StorageProxy { + constructor() { + this.backendPromise = (async () => { + if (testIndexedDb()) { + try { + const backend = new IndexedDbBackend(); + await backend.dbPromise; + return backend; + } + catch {} + } + if (testLocalStorage()) { + return new LocalStorageBackend(); + } + return new MemoryBackend(); + })(); + } + + async get(key) { + const backend = await this.backendPromise; + return backend.get(key); + } + + async set(key, value) { + const backend = await this.backendPromise; + return backend.set(key, value); + } + + async remove(key) { + const backend = await this.backendPromise; + return backend.remove(key); + } + + async clear() { + const backend = await this.backendPromise; + return backend.clear(); + } +} + +export const storage = new StorageProxy(); diff --git a/tgui/public/tgui-common.chunk.js b/tgui/public/tgui-common.chunk.js index fb47607b4bb..3ede7277f03 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(447);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(104);t.Icon=m.Icon;var y=n(197);t.Input=y.Input;var b=n(472);t.Knob=b.Knob;var w=n(473);t.LabeledControls=w.LabeledControls;var x=n(198);t.LabeledList=x.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(25),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(26),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(9),a=n(7),c=n(8),u=n(20),s=n(84),l=n(32),f=n(26),d=n(16).f,p=n(41),h=n(55),g=n(14),v=n(67),m=a.Int8Array,y=m&&m.prototype,b=a.Uint8ClampedArray,w=b&&b.prototype,x=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 x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},N))for(r in T)a[r]&&h(a[r],x);if((!N||!_||_===E)&&(_=x.prototype,N))for(r in T)a[r]&&h(a[r].prototype,_);if(N&&p(w)!==_&&h(w,_),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(x,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(x[e]&&!n)return;try{return f(x,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:x,TypedArrayPrototype:_}},function(e,t,n){"use strict";var r=n(7),o=n(111),i=n(20),a=n(67),c=n(115),u=n(155),s=o("wks"),l=r.Symbol,f=u?l:l&&l.withoutSetter||a;e.exports=function(e){return i(s,e)||(c&&i(l,e)?s[e]=l[e]:s[e]=f("Symbol."+e)),s[e]}},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),w=o(b),x=r(h,g,3),_=a(w.length),E=0,k=v||c,S=t?k(p,_):n?k(p,0):undefined;_>E;E++)if((d||E in w)&&(y=x(m=w[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";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(11),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";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";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(10),o=n(28),i=n(14)("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(9),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(39),v=n(20),m=n(84),y=n(8),b=n(48),w=n(55),x=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,R=o.RangeError,V=u.ArrayBuffer,P=u.DataView,B=c.NATIVE_ARRAY_BUFFER_VIEWS,D=c.TYPED_ARRAY_TAG,j=c.TypedArray,F=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 V||"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(F,"buffer"),U(F,"byteOffset"),U(F,"byteLength"),U(F,"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)})),w&&w(v,j),E(x(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 R("Wrong length");if((a=g-f)<0)throw R("Wrong length")}else if((a=d(r)*i)+f>g)throw R("Wrong length");u=a/i}else u=p(t),o=new V(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(14)("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(14),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(28);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(39),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(10),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(25),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(36);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){"use strict";var r=n(40),o=n(16),i=n(14),a=n(9),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(10),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=t.loadStyleSheet=void 0;var r=n(458),o=(0,n(25).createLogger)("assets"),i=[/v4shim/i],a={},c={},u=function l(e,t){if(void 0===t&&(t=1),!a[e]){a[e]=!0,o.log("loading stylesheet '"+e+"'");var n=(0,r.loadCSS)(e);n.addEventListener("load",(function(){if(!s(n,e))return n.parentNode.removeChild(n),n=null,a[e]=null,t>=5?void o.error("Error: Failed to load the stylesheet '"+e+"' after 5 attempts.\nIt was either not found, or you're trying to load an empty stylesheet that has no CSS rules in it."):void setTimeout((function(){return l(e,t+1)}),3e3)}))}};t.loadStyleSheet=u;var s=function(e,t){var n=e.sheet;if(n)return n.rules.length>0;for(var r=document.styleSheets,i=r.length,a=0;a0}return o.warn("Warning: stylesheet '"+t+"' was not found in the DOM"),!1};t.resolveAsset=function(e){return c[e]||e};t.assetMiddleware=function(e){return function(e){return function(t){var n=t.type,r=t.payload;if("asset/stylesheet"!==n)if("asset/mappings"!==n)e(t);else for(var o=function(){var e=s[a];if(i.some((function(t){return t.test(e)})))return"continue";var t=r[e],n=e.split(".").pop();c[e]=t,"css"===n&&u(t)},a=0,s=Object.keys(r);al;)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(14)("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(14),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(26);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(10);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";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={}.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(40);e.exports=r("navigator","userAgent")||""},function(e,t,n){"use strict";var r=n(120),o=n(36),i=n(14)("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(14)("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(28),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(9),i=n(123),a=n(32),c=n(75),u=n(5),s=n(60),l=n(37),f=n(12),d=n(168),p=n(267),h=n(41),g=n(55),v=n(52).f,m=n(16).f,y=n(117),b=n(49),w=n(33),x=w.get,_=w.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]},R=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},V=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 x(this)[t]}})},D=function(e,t,n,r){var o=d(n),i=x(e);if(o+t>i.byteLength)throw A("Wrong index");var a=x(i.buffer).bytes,c=o+i.byteOffset,u=a.slice(c,c+t);return r?u:u.reverse()},j=function(e,t,n,r,o,i){var a=d(n),c=x(e);if(a+t>c.byteLength)throw A("Wrong index");for(var u=x(c.buffer).bytes,s=a+c.byteOffset,l=r(+o),f=0;fY;)(F=z[Y++])in k||a(k,F,E[F]);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=x(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 R(D(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return R(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){j(this,1,e,I,t)},setUint8:function(e,t){j(this,1,e,I,t)},setInt16:function(e,t){j(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){j(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){j(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){j(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){j(this,4,e,V,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){j(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(26),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,w=y,x={},_=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()})))))w=n.getConstructor(t,e,g,m),c.REQUIRED=!0;else if(i(e,!0)){var E=new w,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||((w=t((function(t,n){s(t,w,e);var r=h(new y,t,w);return n!=undefined&&u(n,r[m],r,g),r}))).prototype=b,b.constructor=w),(S||N)&&(_("delete"),_("has"),g&&_("get")),(N||k)&&_(m),v&&b.clear&&delete b.clear}return x[e]=w,r({global:!0,forced:w!=y},x),p(w,e),v||n.setStrong(w,e,g),w}},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(36),i=n(14)("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],w=y[1];r(String.prototype,e,b),r(RegExp.prototype,h,2==t?function(e,t){return w.call(e,this,t)}:function(e){return w.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(36),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(80))},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(){var e=o(regeneratorRuntime.mark((function t(e){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.store[e]);case 1: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:this.store[e]=n;case 1: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:this.store[e]=undefined;case 1: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:this.store={};case 1:case"end":return e.stop()}}),t,this)})));return function(){return e.apply(this,arguments)}}(),e}(),s=function(){function e(){this.impl=1,this.store={}}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:if("string"!=typeof(n=localStorage.getItem(e))){t.next=3;break}return t.abrupt("return",JSON.parse(n));case 3:case"end":return t.stop()}}),t)})));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:localStorage.setItem(e,JSON.stringify(n));case 1:case"end":return t.stop()}}),t)})));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:localStorage.removeItem(e);case 1:case"end":return t.stop()}}),t)})));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:localStorage.clear();case 1:case"end":return e.stop()}}),t)})));return function(){return e.apply(this,arguments)}}(),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=c()&&new l||a()&&new s||new u;t.storage=f},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(15),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=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(40),o=n(52),i=n(114),a=n(10);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(14),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(14)("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(14)("toStringTag")]="z",e.exports="[object z]"===String(r)},function(e,t,n){"use strict";var r=n(4),o=n(164),i=n(41),a=n(55),c=n(49),u=n(32),s=n(26),l=n(14),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 w,x,_,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&&(w=i(T.call(new e)),h!==Object.prototype&&w.next&&(f||i(w)===h||(a?a(w,h):"function"!=typeof w[v]&&u(w,v,m)),c(w,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(x={values:E("values"),keys:y?A:E("keys"),entries:E("entries")},b)for(_ in x)(g||S||!(_ in C))&&s(C,_,x[_]);else r({target:t,proto:!0,forced:g||S},x);return x}},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(37),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(36),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,w={},x=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},_=function(e){return function(){x(e)}},E=function(e){x(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 w[++b]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},r(b),b},g=function(e){delete w[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),x(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(28),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(37),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(14)("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(25).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,w=s.lineHeight,x=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":w,"font-size":x},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(11),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,w=f.width,x=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:w,minHeight:b,lineHeight:x,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":x,"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(222),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(248),n(250),n(251),n(252),n(163),n(253),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(268),n(269),n(270),n(271),n(272),n(274),n(275),n(277),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(294),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(308),n(309),n(310),n(311),n(312),n(313),n(315),n(316),n(318),n(320),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(344),n(345),n(346),n(348),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(129),n(364),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(402),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)},function(e,t,n){"use strict";var r=n(9),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(9),o=n(16),i=n(10),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(40);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(14);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(10);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(41),c=n(32),u=n(20),s=n(14),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(37),i=n(12),a=n(44),c=n(29),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(37),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(28),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(9),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(36),h=n(127).set,g=n(177),v=f.MutationObserver||f.WebKitMutationObserver,m=f.process,y=f.Promise,b="process"==p(m),w=d(f,"queueMicrotask"),x=w&&w.value;x||(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=x||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(10),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(401);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(10),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),w(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(25),c=n(17),u=n(104),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,w=e.compact,x=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",x&&"Button--circular",w&&"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(42),l=n(137),f=(n(200),n(188)),d=n(25),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,w=(0,l.useDebug)(this.context).debugLayout,x=(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";var r=n(4),o=n(7),i=n(40),a=n(43),c=n(9),u=n(115),s=n(155),l=n(5),f=n(20),d=n(58),p=n(8),h=n(10),g=n(18),v=n(31),m=n(39),y=n(51),b=n(48),w=n(71),x=n(52),_=n(158),E=n(114),k=n(23),S=n(16),C=n(81),N=n(32),A=n(26),T=n(111),O=n(82),I=n(68),M=n(67),L=n(14),R=n(159),V=n(27),P=n(49),B=n(33),D=n(21).forEach,j=O("hidden"),F=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,j)&&e[j][r]&&(e[j][r]=!1),n=b(n,{enumerable:y(0,!1)})):(f(e,j)||W(e,j,y(1,{})),e[j][r]=!0),re(e,r,n)):W(e,r,n)},ce=function(e,t){h(e);var n=v(t),r=w(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,j)&&this[j][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,j)&&n[j][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,j)&&f(this[j],t)&&(this[j][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,x.f=_.f=fe,E.f=de,R.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(w(ee),(function(e){V(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[F]||N(U.prototype,F,U.prototype.valueOf),P(U,"Symbol"),I[j]=!0},function(e,t,n){"use strict";var r=n(4),o=n(9),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(27)("asyncIterator")},function(e,t,n){"use strict";n(27)("hasInstance")},function(e,t,n){"use strict";n(27)("isConcatSpreadable")},function(e,t,n){"use strict";n(27)("iterator")},function(e,t,n){"use strict";n(27)("match")},function(e,t,n){"use strict";n(27)("matchAll")},function(e,t,n){"use strict";n(27)("replace")},function(e,t,n){"use strict";n(27)("search")},function(e,t,n){"use strict";n(27)("species")},function(e,t,n){"use strict";n(27)("split")},function(e,t,n){"use strict";n(27)("toPrimitive")},function(e,t,n){"use strict";n(27)("toStringTag")},function(e,t,n){"use strict";n(27)("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(14),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(29),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(29),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(29),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(29),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(37),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(28),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(247);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(29),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(249);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),w=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>w;w++)p=y?m(h[w],w):h[w],u(n,w,p);else for(d=(f=b.call(h)).next,n=new g;!(l=d.call(f)).done;w++)p=y?i(f,m,[l.value,w],!0):l.value,u(n,w,p);return n.length=w,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(29)("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(29),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(29),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(29),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(29),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(14),f=n(73),d=n(29),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(28),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(37),a=n(12),c=n(18),u=n(72),s=n(54),l=n(73),f=n(29),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(10),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(39);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(276),i=n(14)("toPrimitive"),a=Date.prototype;i in a||r(a,i,o)},function(e,t,n){"use strict";var r=n(10),o=n(39);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(26),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(41),a=n(14)("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(9),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(40),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(293)})},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(9),o=n(7),i=n(70),a=n(26),c=n(20),u=n(36),s=n(89),l=n(39),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)),w=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 x,_=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(w(t)),n,_):w(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,x=E[k])&&!c(_,x)&&g(_,x,h(m,x));_.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(307)})},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(314);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(37),i=n(317),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(36);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(319);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(e,t,n){"use strict";var r=n(9),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(9)},{create:n(48)})},function(e,t,n){"use strict";var r=n(4),o=n(9),i=n(92),a=n(18),c=n(28),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(9);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperties:n(156)})},function(e,t,n){"use strict";var r=n(4),o=n(9);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(9),i=n(92),a=n(18),c=n(28),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(9),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(9),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(41),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(9),i=n(92),a=n(18),c=n(39),u=n(41),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(9),i=n(92),a=n(18),c=n(39),u=n(41),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(26),i=n(343);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(40),f=n(176),d=n(26),p=n(75),h=n(49),g=n(59),v=n(8),m=n(28),y=n(60),b=n(36),w=n(110),x=n(61),_=n(85),E=n(45),k=n(127).set,S=n(178),C=n(179),N=n(347),A=n(128),T=n(180),O=n(33),I=n(70),M=n(14),L=n(116),R=M("species"),V="Promise",P=O.get,B=O.set,D=O.getterFor(V),j=f,F=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(V,(function(){if(!(w(j)!==String(j))){if(66===L)return!0;if(!H&&"function"!=typeof PromiseRejectionEvent)return!0}if(u&&!j.prototype["finally"])return!0;if(L>=51&&/native code/.test(j))return!1;var e=j.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[R]=t,!(e.then((function(){}))instanceof t)})),G=q||!_((function(e){j.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(F("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 F("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&&(j=function(e){y(this,j,V),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:V,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:undefined})}).prototype=p(j.prototype,{then:function(e,t){var n=D(this),r=U(E(this,j));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===j||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 j((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(j,Y.apply(s,arguments))}}))),c({global:!0,wrap:!0,forced:q},{Promise:j}),h(j,V,!1,!0),g(V),i=l(V),c({target:V,stat:!0,forced:q},{reject:function(e){var t=U(this);return t.reject.call(undefined,e),t.promise}}),c({target:V,stat:!0,forced:u||q},{resolve:function(e){return C(u&&this===i?j:this,e)}}),c({target:V,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;x(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);x(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(28),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(40),u=n(45),s=n(179),l=n(26);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(40),i=n(28),a=n(10),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(40),i=n(28),a=n(10),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(9),i=n(10),a=n(39),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(10),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(10),a=n(20),c=n(23),u=n(41);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(9),i=n(10),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(10),i=n(41);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(10),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(40),i=n(10);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(10),i=n(8),a=n(20),c=n(5),u=n(16),s=n(23),l=n(41),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(10),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(9),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(26),p=n(5),h=n(33).set,g=n(59),v=n(14)("match"),m=o.RegExp,y=m.prototype,b=/a/g,w=/a/g,x=new m(b)!==b,_=f.UNSUPPORTED_Y;if(r&&i("RegExp",!x||_||p((function(){return w[v]=!1,m(b)!=b||m(w)==w||"/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;x?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(x?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(9),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(9),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(26),o=n(10),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(10),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(28),u=n(10),s=n(36),l=n(93),f=n(77),d=n(32),p=n(5),h=n(14),g=n(45),v=n(97),m=n(33),y=n(43),b=h("matchAll"),w=m.set,x=m.getterFor("RegExp String Iterator"),_=RegExp.prototype,E=_.exec,k="".matchAll,S=!!k&&!p((function(){"a".matchAll(/./)})),C=o((function(e,t,n,r){w(this,{type:"RegExp String Iterator",regexp:e,string:t,global:n,unicode:r,done:!1})}),"RegExp String",(function(){var e=x(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 w=u.unicode;u.lastIndex=0}for(var x=[];;){var _=l(u,p);if(null===_)break;if(x.push(_),!g)break;""===String(_[0])&&(u.lastIndex=s(p,a(u.lastIndex),w))}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(10),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(10),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 w=0,x=0,_=[];x1?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(37);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(14)("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,w=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)?w.call(this,e,t):n.frozen.set(e,t)}else w.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(36),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=w(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 w(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,w(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 x(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(x,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),w=String(a.char),x=a.location,_=a.keyCode||(a.keyCode=b)&&b.charCodeAt(0)||0,E=a.charCode||(a.charCode=w)&&w.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=Re,t._MP=Ce,t._MR=ye,t.__render=je,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),Fe(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=Fe,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",j="http://www.w3.org/XML/1998/namespace",F={"xlink:actuate":D,"xlink:arcrole":D,"xlink:href":D,"xlink:role":D,"xlink:show":D,"xlink:title":D,"xlink:type":D,"xml:base":j,"xml:lang":j,"xml:space":j};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){we(e),w(e,t)}function we(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),Re(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=R());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=R();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,w=t.className;e.className!==w&&(i(w)?u.removeAttribute("class"):r?u.setAttribute("class",w):u.className=w);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 x=t.ref,_=e.ref;_!==x&&(me(_),ye(x,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));Ve(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=R());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:Ve(n,r,o,i,a,c,s);break;case 1:be(n,o);break;case 16:we(n),S(o,r);break;default:!function(e,t,n,r,o,i){we(e),Me(t,n,r,o,b(e,!0),i),w(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:xe(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)),Ve(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)),Ve(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,w=i-c+1,_=a-c+1,E=new Int32Array(_+1),k=w===r,S=!1,C=0,N=0;if(o<4||(w|_)<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)),Ve(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)),Ve(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(25),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 w=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(104);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(11),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,w=e.fillValue,x=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!=w?w:c,l,s),h=(0,o.scale)(c,l,s),g=x||(0,o.keyOfMatchingRange)(null!=w?w: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(11),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(11),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,w=e.color,x=e.ranges,_=void 0===x?{}:x,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=w||(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(104);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(11),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,w=y.PC_batteryicon,x=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)})}),!!x&&w&&(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:[w&&(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(w)}),_&&_]}),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.shift&&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.keys,o=Object.freeze,i=Object.seal,a="undefined"!=typeof Reflect&&Reflect,c=a.apply,u=a.construct;c||(c=function(e,t,n){return e.apply(t,n)}),o||(o=function(e){return e}),i||(i=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),D=i(/^data-[\-\w.\u00B7-\uFFFF]/),j=i(/^aria-[\-\w]+$/),F=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),K=i(/^(?:\w+script|data):/i),z=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g),Y="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 U(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&arguments[0]!==undefined?arguments[0]:$(),t=function(e){return W(e)};if(t.version="2.0.12",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,i=!1,a=e.document,c=e.DocumentFragment,u=e.HTMLTemplateElement,E=e.Node,k=e.NodeFilter,q=e.NamedNodeMap,G=q===undefined?e.NamedNodeMap||e.MozNamedAttrMap:q,X=e.Text,Z=e.Comment,Q=e.DOMParser,J=e.trustedTypes;if("function"==typeof u){var ee=a.createElement("template");ee.content&&ee.content.ownerDocument&&(a=ee.content.ownerDocument)}var te=H(J,n),ne=te&&Re?te.createHTML(""):"",re=a,oe=re.implementation,ie=re.createNodeIterator,ae=re.getElementsByTagName,ce=re.createDocumentFragment,ue=n.importNode,se={};t.isSupported=oe&&"undefined"!=typeof oe.createHTMLDocument&&9!==a.documentMode;var le=P,fe=B,de=D,pe=j,he=K,ge=z,ve=F,me=null,ye=S({},[].concat(U(N),U(A),U(T),U(O),U(I))),be=null,we=S({},[].concat(U(M),U(L),U(R),U(V))),xe=null,_e=null,Ee=!0,ke=!0,Se=!1,Ce=!1,Ne=!1,Ae=!1,Te=!1,Oe=!1,Ie=!1,Me=!1,Le=!1,Re=!1,Ve=!0,Pe=!0,Be=!1,De={},je=S({},["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"]),Fe=null,Ke=S({},["audio","video","img","source","image","track"]),ze=null,Ye=S({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),Ue=null,$e=a.createElement("form"),He=function(e){Ue&&Ue===e||(e&&"object"===(void 0===e?"undefined":Y(e))||(e={}),me="ALLOWED_TAGS"in e?S({},e.ALLOWED_TAGS):ye,be="ALLOWED_ATTR"in e?S({},e.ALLOWED_ATTR):we,ze="ADD_URI_SAFE_ATTR"in e?S(C(Ye),e.ADD_URI_SAFE_ATTR):Ye,Fe="ADD_DATA_URI_TAGS"in e?S(C(Ke),e.ADD_DATA_URI_TAGS):Ke,xe="FORBID_TAGS"in e?S({},e.FORBID_TAGS):{},_e="FORBID_ATTR"in e?S({},e.FORBID_ATTR):{},De="USE_PROFILES"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,ke=!1!==e.ALLOW_DATA_ATTR,Se=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=e.SAFE_FOR_JQUERY||!1,Ne=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Ie=e.RETURN_DOM||!1,Me=e.RETURN_DOM_FRAGMENT||!1,Le=e.RETURN_DOM_IMPORT||!1,Re=e.RETURN_TRUSTED_TYPE||!1,Oe=e.FORCE_BODY||!1,Ve=!1!==e.SANITIZE_DOM,Pe=!1!==e.KEEP_CONTENT,Be=e.IN_PLACE||!1,ve=e.ALLOWED_URI_REGEXP||ve,Ne&&(ke=!1),Me&&(Ie=!0),De&&(me=S({},[].concat(U(I))),be=[],!0===De.html&&(S(me,N),S(be,M)),!0===De.svg&&(S(me,A),S(be,L),S(be,V)),!0===De.svgFilters&&(S(me,T),S(be,L),S(be,V)),!0===De.mathMl&&(S(me,O),S(be,R),S(be,V))),e.ADD_TAGS&&(me===ye&&(me=C(me)),S(me,e.ADD_TAGS)),e.ADD_ATTR&&(be===we&&(be=C(be)),S(be,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&S(ze,e.ADD_URI_SAFE_ATTR),Pe&&(me["#text"]=!0),Ae&&S(me,["html","head","body"]),me.table&&(S(me,["tbody"]),delete xe.tbody),o&&o(e),Ue=e)},We=function(e){p(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(n){e.outerHTML=ne}},qe=function(e,n){try{p(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(r){p(t.removed,{attribute:null,from:n})}n.removeAttribute(e)},Ge=function(e){var t=void 0,n=void 0;if(Oe)e=""+e;else{var r=v(e,/^[\r\n\t ]+/);n=r&&r[0]}var o=te?te.createHTML(e):e;try{t=(new Q).parseFromString(o,"text/html")}catch(u){}if(i&&S(xe,["title"]),!t||!t.documentElement){var c=(t=oe.createHTMLDocument("")).body;c.parentNode.removeChild(c.parentNode.firstElementChild),c.outerHTML=o}return e&&n&&t.body.insertBefore(a.createTextNode(n),t.body.childNodes[0]||null),ae.call(t,Ae?"html":"body")[0]};t.isSupported&&function(){try{var e=Ge("</title><img>");w(/<\/title/,e.querySelector("title").innerHTML)&&(i=!0)}catch(t){}}();var Xe=function(e){return ie.call(e.ownerDocument||e,e,k.SHOW_ELEMENT|k.SHOW_COMMENT|k.SHOW_TEXT,(function(){return k.FILTER_ACCEPT}),!1)},Ze=function(e){return!(e instanceof X||e instanceof Z||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof G&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI)},Qe=function(e){return"object"===(void 0===E?"undefined":Y(E))?e instanceof E:e&&"object"===(void 0===e?"undefined":Y(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},Je=function(e,n,r){se[e]&&s(se[e],(function(e){e.call(t,n,r,Ue)}))},et=function(e){var n=void 0;if(Je("beforeSanitizeElements",e,null),Ze(e))return We(e),!0;var r=g(e.nodeName);if(Je("uponSanitizeElement",e,{tagName:r,allowedTags:me}),("svg"===r||"math"===r)&&0!==e.querySelectorAll("p, br").length)return We(e),!0;if(!me[r]||xe[r]){if(Pe&&!je[r]&&"function"==typeof e.insertAdjacentHTML)try{var o=e.innerHTML;e.insertAdjacentHTML("AfterEnd",te?te.createHTML(o):o)}catch(i){}return We(e),!0}return"noscript"===r&&w(/<\/noscript/i,e.innerHTML)||"noembed"===r&&w(/<\/noembed/i,e.innerHTML)?(We(e),!0):(!Ce||e.firstElementChild||e.content&&e.content.firstElementChild||!w(/</g,e.textContent)||(p(t.removed,{element:e.cloneNode()}),e.innerHTML?e.innerHTML=m(e.innerHTML,/</g,"<"):e.innerHTML=m(e.textContent,/</g,"<")),Ne&&3===e.nodeType&&(n=e.textContent,n=m(n,le," "),n=m(n,fe," "),e.textContent!==n&&(p(t.removed,{element:e.cloneNode()}),e.textContent=n)),Je("afterSanitizeElements",e,null),!1)},tt=function(e,t,n){if(Ve&&("id"===t||"name"===t)&&(n in a||n in $e))return!1;if(ke&&w(de,t));else if(Ee&&w(pe,t));else{if(!be[t]||_e[t])return!1;if(ze[t]);else if(w(ve,m(n,ge,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Fe[e])if(Se&&!w(he,m(n,ge,"")));else if(n)return!1}return!0},nt=function(e){var n=void 0,o=void 0,i=void 0,a=void 0,c=void 0;Je("beforeSanitizeAttributes",e,null);var u=e.attributes;if(u){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:be};for(c=u.length;c--;){var p=n=u[c],v=p.name,y=p.namespaceURI;if(o=b(n.value),i=g(v),s.attrName=i,s.attrValue=o,s.keepAttr=!0,s.forceKeepAttr=undefined,Je("uponSanitizeAttribute",e,s),o=s.attrValue,!s.forceKeepAttr){if("name"===i&&"IMG"===e.nodeName&&u.id)a=u.id,u=h(u,[]),qe("id",e),qe(v,e),l(u,a)>c&&e.setAttribute("id",a.value);else{if("INPUT"===e.nodeName&&"type"===i&&"file"===o&&s.keepAttr&&(be[i]||!_e[i]))continue;"id"===v&&e.setAttribute(v,""),qe(v,e)}if(s.keepAttr)if(Ce&&w(/\/>/i,o))qe(v,e);else if(w(/svg|math/i,e.namespaceURI)&&w(x("</("+f(r(je),"|")+")","i"),o))qe(v,e);else{Ne&&(o=m(o,le," "),o=m(o,fe," "));var _=e.nodeName.toLowerCase();if(tt(_,i,o))try{y?e.setAttributeNS(y,v,o):e.setAttribute(v,o),d(t.removed)}catch(E){}}}}Je("afterSanitizeAttributes",e,null)}},rt=function ot(e){var t=void 0,n=Xe(e);for(Je("beforeSanitizeShadowDOM",e,null);t=n.nextNode();)Je("uponSanitizeShadowNode",t,null),et(t)||(t.content instanceof c&&ot(t.content),nt(t));Je("afterSanitizeShadowDOM",e,null)};return t.sanitize=function(r,o){var i=void 0,a=void 0,u=void 0,s=void 0,l=void 0;if(r||(r="\x3c!--\x3e"),"string"!=typeof r&&!Qe(r)){if("function"!=typeof r.toString)throw _("toString is not a function");if("string"!=typeof(r=r.toString()))throw _("dirty is not a string, aborting")}if(!t.isSupported){if("object"===Y(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof r)return e.toStaticHTML(r);if(Qe(r))return e.toStaticHTML(r.outerHTML)}return r}if(Te||He(o),t.removed=[],"string"==typeof r&&(Be=!1),Be);else if(r instanceof E)1===(a=(i=Ge("\x3c!--\x3e")).ownerDocument.importNode(r,!0)).nodeType&&"BODY"===a.nodeName||"HTML"===a.nodeName?i=a:i.appendChild(a);else{if(!Ie&&!Ne&&!Ae&&-1===r.indexOf("<"))return te&&Re?te.createHTML(r):r;if(!(i=Ge(r)))return Ie?null:ne}i&&Oe&&We(i.firstChild);for(var f=Xe(Be?r:i);u=f.nextNode();)3===u.nodeType&&u===s||et(u)||(u.content instanceof c&&rt(u.content),nt(u),s=u);if(s=null,Be)return r;if(Ie){if(Me)for(l=ce.call(i.ownerDocument);i.firstChild;)l.appendChild(i.firstChild);else l=i;return Le&&(l=ue.call(n,l,!0)),l}var d=Ae?i.outerHTML:i.innerHTML;return Ne&&(d=m(d,le," "),d=m(d,fe," ")),te&&Re?te.createHTML(d):d},t.setConfig=function(e){He(e),Te=!0},t.clearConfig=function(){Ue=null,Te=!1},t.isValidAttribute=function(e,t,n){Ue||He({});var r=g(e),o=g(t);return tt(r,o,n)},t.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},t.removeHook=function(e){se[e]&&d(se[e])},t.removeHooks=function(e){se[e]&&(se[e]=[])},t.removeAllHooks=function(){se={}},t}()}()},function(e,t,n){"use strict";e.exports=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function n(e,n){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var o=0;return function(){return o>=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]=w(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 w(e,t,n){var r=e.length;if(0===r)return"";for(var o=0;o<r;){var i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var x={escape:function(e,t){if(t){if(o.test(e))return e.replace(i,s)}else if(a.test(e))return e.replace(c,s);return e},unescape:f,edit:function(e,t){e=e.source||e,t=t||"";var n={replace:function(t,r){return r=(r=r.source||r).replace(d,"$1"),e=e.replace(t,r),n},getRegex:function(){return new RegExp(e,t)}};return n},cleanUrl:function(e,t,n){if(e){var r;try{r=decodeURIComponent(f(n)).replace(p,"").toLowerCase()}catch(o){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!h.test(n)&&(n=b(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(o){return null}return n},resolveUrl:b,noopTest:{exec:function(){}},merge:function(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){var n=e.replace(/\|/g,(function(e,t,n){for(var r=!1,o=t;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:w,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,r=0,o=0;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&--r<0)return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&e.silent}},_=r.defaults,E=x.rtrim,k=x.splitCells,S=x.escape,C=x.findClosingBracket;function N(e,t,n){var r=t.href,o=t.title?S(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:S(i)}}var A=function(){function e(e){this.options=e||_}var t=e.prototype;return t.space=function(e){var t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{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<o;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]="right":/^ *:-+: *$/.test(n.align[r])?n.align[r]="center":/^ *:-+ *$/.test(n.align[r])?n.align[r]="left":n.align[r]=null;for(o=n.cells.length,r=0;r<o;r++)n.cells[r]=k(n.cells[r],n.header.length);return n}}},t.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},t.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *> ?/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;m<v;m++)s=n=h[m],r=n.length,~(n=n.replace(/^ *([*+-]|\d+[.)]) */,"")).indexOf("\n ")&&(r-=n.length,n=this.options.pedantic?n.replace(/^ {1,4}/gm,""):n.replace(new RegExp("^ {1,"+r+"}","gm"),"")),m!==v-1&&(o=this.rules.block.bullet.exec(h[m+1])[0],(f?1===o.length||!d&&")"===o[o.length-1]:o.length>1||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<o;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]="right":/^ *:-+: *$/.test(n.align[r])?n.align[r]="center":/^ *:-+ *$/.test(n.align[r])?n.align[r]="left":n.align[r]=null;for(o=n.cells.length,r=0;r<o;r++)n.cells[r]=k(n.cells[r].replace(/^ *\| *| *\| *$/g,""),n.header.length);return n}}},t.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}},t.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}},t.text=function(e,t){var n=this.rules.block.text.exec(e);if(n){var r=t[t.length-1];return r&&"text"===r.type?{raw:n[0],text:n[0]}:{type:"text",raw:n[0],text:n[0]}}},t.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:S(t[1])}},t.tag=function(e,t,n){var r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/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=x.noopTest,O=x.edit,I=x.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]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\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=/<!--(?!-?>)[\s\S]*?-->/,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","</?(?:tag)(?: +|\\n|/?>)|<(?: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","</?(?:tag)(?: +|\\n|/?>)|<(?: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","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.pedantic=I({},M.normal,{html:O("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\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:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\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:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\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]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/,punctuation:/^([\s*punctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};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]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),L.gfm.url=O(L.gfm.url,"i").replace("email",L.gfm._extended_email).getRegex(),L.breaks=I({},L.gfm,{br:O(L.br).replace("{2,}","*").getRegex(),text:O(L.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var R={block:M,inline:L},V=r.defaults,P=R.block,B=R.inline;function D(e){return e.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201c").replace(/"/g,"\u201d").replace(/\.{3}/g,"\u2026")}function j(e){var t,n,r="",o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var F=function(){function t(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||V,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;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(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(e){var c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(c)}return t},i.inline=function(e){var t,n,r,o,i,a,c=e.length;for(t=0;t<c;t++)switch((a=e[t]).type){case"paragraph":case"text":case"heading":a.tokens=[],this.inlineTokens(a.text,a.tokens);break;case"table":for(a.tokens={header:[],cells:[]},o=a.header.length,n=0;n<o;n++)a.tokens.header[n]=[],this.inlineTokens(a.header[n],a.tokens.header[n]);for(o=a.cells.length,n=0;n<o;n++)for(i=a.cells[n],a.tokens.cells[n]=[],r=0;r<i.length;r++)a.tokens.cells[n][r]=[],this.inlineTokens(i[r],a.tokens.cells[n][r]);break;case"blockquote":this.inline(a.tokens);break;case"list":for(o=a.items.length,n=0;n<o;n++)this.inline(a.items[n].tokens)}return e},i.inlineTokens=function(e,t,n,r,o){var i;void 0===t&&(t=[]),void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o="");var a,c=e;if(this.tokens.links){var u=Object.keys(this.tokens.links);if(u.length>0)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,j))e=e.substring(i.raw.length),t.push(i);else if(n||!(i=this.tokenizer.url(e,j))){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=x.cleanUrl,Y=x.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?'<pre><code class="'+this.options.langPrefix+Y(r,!0)+'">'+(n?e:Y(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Y(e,!0))+"</code></pre>\n"},t.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},t.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},t.listitem=function(e){return"<li>"+e+"</li>\n"},t.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},t.paragraph=function(e){return"<p>"+e+"</p>\n"},t.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},t.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},t.strong=function(e){return"<strong>"+e+"</strong>"},t.em=function(e){return"<em>"+e+"</em>"},t.codespan=function(e){return"<code>"+e+"</code>"},t.br=function(){return this.options.xhtml?"<br/>":"<br>"},t.del=function(e){return"<del>"+e+"</del>"},t.link=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+Y(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},t.image=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},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=x.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,w="",x=e.length;for(n=0;n<x;n++)switch((f=e[n]).type){case"space":continue;case"hr":w+=this.renderer.hr();continue;case"heading":w+=this.renderer.heading(this.parseInline(f.tokens),f.depth,q(this.parseInline(f.tokens,this.textRenderer)),this.slugger);continue;case"code":w+=this.renderer.code(f.text,f.lang,f.escaped);continue;case"table":for(s="",u="",i=f.header.length,r=0;r<i;r++)u+=this.renderer.tablecell(this.parseInline(f.tokens.header[r]),{header:!0,align:f.align[r]});for(s+=this.renderer.tablerow(u),l="",i=f.cells.length,r=0;r<i;r++){for(u="",a=(c=f.tokens.cells[r]).length,o=0;o<a;o++)u+=this.renderer.tablecell(this.parseInline(c[o]),{header:!1,align:f.align[o]});l+=this.renderer.tablerow(u)}w+=this.renderer.table(s,l);continue;case"blockquote":l=this.parse(f.tokens),w+=this.renderer.blockquote(l);continue;case"list":for(d=f.ordered,p=f.start,h=f.loose,i=f.items.length,l="",r=0;r<i;r++)m=(v=f.items[r]).checked,y=v.task,g="",v.task&&(b=this.renderer.checkbox(m),h?v.tokens.length>0&&"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);w+=this.renderer.list(l,d,p);continue;case"html":w+=this.renderer.html(f.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(f.tokens));continue;case"text":for(l=f.tokens?this.parseInline(f.tokens):f.text;n+1<x&&"text"===e[n+1].type;)l+="\n"+((f=e[++n]).tokens?this.parseInline(f.tokens):f.text);w+=t?this.renderer.paragraph(l):l;continue;default:var _='Token with "'+f.type+'" type was not found.';if(this.options.silent)return;throw new Error(_)}return w},t.parseInline=function(e,t){t=t||this.renderer;var n,r,o="",i=e.length;for(n=0;n<i;n++)switch((r=e[n]).type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:var a='Token with "'+r.type+'" type was not found.';if(this.options.silent)return;throw new Error(a)}return o},e}(),X=x.merge,Z=x.checkSanitizeDeprecation,Q=x.escape,J=r.getDefaults,ee=r.changeDefaults,te=r.defaults;function ne(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=X({},ne.defaults,t||{}),Z(t),n){var r,o=t.highlight;try{r=F.lex(e,t)}catch(u){return n(u)}var i=function(e){var i;if(!e)try{i=G.parse(r,t)}catch(u){e=u}return t.highlight=o,e?n(e):n(null,i)};if(!o||o.length<3)return i();if(delete t.highlight,!r.length)return i();var a=0;return ne.walkTokens(r,(function(e){"code"===e.type&&(a++,setTimeout((function(){o(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0==--a&&i()}))}),0))})),void(0===a&&i())}try{var c=F.lex(e,t);return t.walkTokens&&ne.walkTokens(c,t.walkTokens),G.parse(c,t)}catch(u){if(u.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Q(u.message+"",!0)+"</pre>";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<o;a++)i[a]=arguments[a];var c=e.renderer[t].apply(n,i);return!1===c&&(c=r.apply(n,i)),c}};for(var o in e.renderer)r(o);t.renderer=n}(),e.tokenizer&&function(){var n=ne.defaults.tokenizer||new A,r=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];var c=e.tokenizer[t].apply(n,i);return!1===c&&(c=r.apply(n,i)),c}};for(var o in e.tokenizer)r(o);t.tokenizer=n}(),e.walkTokens){var n=ne.defaults.walkTokens;t.walkTokens=function(t){e.walkTokens(t),n&&n(t)}}ne.setOptions(t)},ne.walkTokens=function(e,t){for(var r,o=n(e);!(r=o()).done;){var i=r.value;switch(t(i),i.type){case"table":for(var a,c=n(i.tokens.header);!(a=c()).done;){var u=a.value;ne.walkTokens(u,t)}for(var s,l=n(i.tokens.cells);!(s=l()).done;)for(var f,d=n(s.value);!(f=d()).done;){var p=f.value;ne.walkTokens(p,t)}break;case"list":ne.walkTokens(i.items,t);break;default:i.tokens&&ne.walkTokens(i.tokens,t)}}},ne.Parser=G,ne.parser=G.parse,ne.Renderer=U,ne.TextRenderer=$,ne.Lexer=F,ne.lexer=F.lex,ne.Tokenizer=A,ne.Slugger=H,ne.parse=ne,ne}()}]]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[function(e,t,n){"use strict";t.__esModule=!0;var r=n(447);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(104);t.Icon=m.Icon;var y=n(197);t.Input=y.Input;var b=n(472);t.Knob=b.Knob;var w=n(473);t.LabeledControls=w.LabeledControls;var x=n(198);t.LabeledList=x.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(25),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<u.length;c++){var s=u[c],l=r.shared[s];a[s]=""===l?undefined:JSON.parse(l)}return Object.assign({},e,{config:o,data:i,shared:a,suspended:!1})}if("backend/setSharedState"===n){var f,p=r.key,h=r.nextState;return Object.assign({},e,{shared:Object.assign({},e.shared,(f={},f[p]=h,f))})}if("backend/suspendStart"===n)return Object.assign({},e,{suspending:!0});if("backend/suspendSuccess"===n){var g=r.timestamp;return Object.assign({},e,{data:{},shared:{},config:Object.assign({},e.config,{title:"",status:1}),suspending:!1,suspended:g})}return e};t.backendMiddleware=function(t){var n,a;return function(l){return function(d){var h=g(t.getState()).suspended,v=d.type,m=d.payload;if("update"!==v)if("suspend"!==v){if("ping"!==v){if("backend/suspendStart"===v&&!a){u.log("suspending ("+window.__windowId__+")");var y=function(){return p({type:"suspend"})};y(),a=setInterval(y,2e3)}if("backend/suspendSuccess"===v&&((0,c.suspendRenderer)(),clearInterval(a),a=undefined,Byond.winset(window.__windowId__,{"is-visible":!1}),e((function(){return(0,i.focusMap)()}))),"backend/update"===v){var b,w,x=null==(b=m.config)||null==(w=b.window)?void 0:w.fancy;n===undefined?n=x:n!==x&&(u.log("changing fancy mode to",x),n=x,Byond.winset(window.__windowId__,{titlebar:!x,"can-resize":!x}))}return"backend/update"===v&&h&&((0,c.resumeRenderer)(),(0,o.setupDrag)(),e((function(){r.perf.mark("resume/start"),g(t.getState()).suspended||(Byond.winset(window.__windowId__,{"is-visible":!0}),r.perf.mark("resume/finish"))}))),l(d)}p({type:"pingReply"})}else t.dispatch(f());else t.dispatch(s(m))}}};var p=function(e){void 0===e&&(e={});var t=e,n=t.payload,r=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=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(26),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;n<e.length;n++){var r=e[n];"string"==typeof r&&(t+=r+" ")}return t};t.normalizeChildren=function(e){return Array.isArray(e)?e.flat().filter((function(e){return e})):"object"==typeof e?[e]:[]};var r=function(e,t){var n;for(n in e)if(!(n in t))return!0;for(n in t)if(e[n]!==t[n])return!0;return!1};t.shallowDiffers=r;var o={onComponentShouldUpdate:function(e,t){return r(e,t)}};t.pureComponentHooks=o;t.canRender=function(e){return e!==undefined&&null!==e&&"boolean"!=typeof e}},function(e,t,n){"use strict";(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n(80))},function(e,t,n){"use strict";e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var r=n(5);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(e,t,n){"use strict";var r=n(8);e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},function(e,t,n){"use strict";t.__esModule=!0,t.keyOfMatchingRange=t.inRange=t.toFixed=t.round=t.scale=t.clamp01=t.clamp=void 0;t.clamp=function(e,t,n){return e<t?t:e>n?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);n<o.length;n++){var i=o[n],a=t[i];if(r(e,a))return i}}},function(e,t,n){"use strict";var r=n(37),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";var r,o=n(123),i=n(9),a=n(7),c=n(8),u=n(20),s=n(84),l=n(32),f=n(26),d=n(16).f,p=n(41),h=n(55),g=n(14),v=n(67),m=a.Int8Array,y=m&&m.prototype,b=a.Uint8ClampedArray,w=b&&b.prototype,x=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 x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},N))for(r in T)a[r]&&h(a[r],x);if((!N||!_||_===E)&&(_=x.prototype,N))for(r in T)a[r]&&h(a[r].prototype,_);if(N&&p(w)!==_&&h(w,_),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(x,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(x[e]&&!n)return;try{return f(x,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:x,TypedArrayPrototype:_}},function(e,t,n){"use strict";var r=n(7),o=n(111),i=n(20),a=n(67),c=n(115),u=n(155),s=o("wks"),l=r.Symbol,f=u?l:l&&l.withoutSetter||a;e.exports=function(e){return i(s,e)||(c&&i(l,e)?s[e]=l[e]:s[e]=f("Symbol."+e)),s[e]}},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;r<t.length;r++){var o=t[r];e(o,r,t)&&n.push(o)}return n}throw new Error("filter() can't iterate on type "+typeof t)}};var r=function(e){return function(t){if(null===t&&t===undefined)return t;if(Array.isArray(t)){for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r,t));return n}if("object"==typeof t){var o=Object.prototype.hasOwnProperty,i=[];for(var a in t)o.call(t,a)&&i.push(e(t[a],a,t));return i}throw new Error("map() can't iterate on type "+typeof t)}};t.map=r;var o=function(e,t){for(var n=e.criteria,r=t.criteria,o=n.length,i=0;i<o;i++){var a=n[i],c=r[i];if(a<c)return-1;if(a>c)return 1}return 0};t.sortBy=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){if(!Array.isArray(e))return e;for(var n=e.length,r=[],i=function(n){var o=e[n];r.push({criteria:t.map((function(e){return e(o)})),value:o})},a=0;a<n;a++)i(a);for(r.sort(o);n--;)r[n]=r[n].value;return r}};t.reduce=function(e,t){return function(n){var r,o,i=n.length;for(t===undefined?(r=1,o=n[0]):(r=0,o=t);r<i;r++)o=e(o,n[r],r,n);return o}};t.uniqBy=function(e){return function(t){var n=t.length,r=[],o=e?[]:r,i=-1;e:for(;++i<n;){var a=t[i],c=e?e(a):a;if(a=0!==a?a:0,c==c){for(var u=o.length;u--;)if(o[u]===c)continue e;e&&o.push(c),r.push(a)}else o.includes(c)||(o!==r&&o.push(c),r.push(a))}return r}};var i=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(0!==t.length){for(var r=t.length,o=t[0].length,i=[],a=0;a<o;a++){for(var c=[],u=0;u<r;u++)c.push(t[u][a]);i.push(c)}return i}};t.zip=i;t.zipWith=function(e){return function(){return r((function(t){return e.apply(void 0,t)}))(i.apply(void 0,arguments))}}},function(e,t,n){"use strict";var r=n(9),o=n(149),i=n(10),a=n(39),c=Object.defineProperty;t.f=r?c:function(e,t,n){if(i(e),t=a(t,!0),i(n),o)try{return c(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){"use strict";t.__esModule=!0,t.Box=t.computeBoxClassName=t.computeBoxProps=t.halfUnit=t.unit=void 0;var r=n(6),o=n(0),i=n(464),a=n(42);var c=function(e){return"string"==typeof e?e.endsWith("px")&&!Byond.IS_LTE_IE8?parseFloat(e)/12+"rem":e:"number"==typeof e?Byond.IS_LTE_IE8?12*e+"px":e+"rem":void 0};t.unit=c;var u=function(e){return"string"==typeof e?c(e):"number"==typeof e?c(.5*e):void 0};t.halfUnit=u;var s=function(e){return"string"==typeof e&&a.CSS_COLORS.includes(e)},l=function(e){return function(t,n){"number"!=typeof n&&"string"!=typeof n||(t[e]=n)}},f=function(e,t){return function(n,r){"number"!=typeof r&&"string"!=typeof r||(n[e]=t(r))}},d=function(e,t){return function(n,r){r&&(n[e]=t)}},p=function(e,t,n){return function(r,o){if("number"==typeof o||"string"==typeof o)for(var i=0;i<n.length;i++)r[e+"-"+n[i]]=t(o)}},h=function(e){return function(t,n){s(n)||(t[e]=n)}},g={position:l("position"),overflow:l("overflow"),overflowX:l("overflow-x"),overflowY:l("overflow-y"),top:f("top",c),bottom:f("bottom",c),left:f("left",c),right:f("right",c),width:f("width",c),minWidth:f("min-width",c),maxWidth:f("max-width",c),height:f("height",c),minHeight:f("min-height",c),maxHeight:f("max-height",c),fontSize:f("font-size",c),fontFamily:l("font-family"),lineHeight:function(e,t){"number"==typeof t?e["line-height"]=t:"string"==typeof t&&(e["line-height"]=c(t))},opacity:l("opacity"),textAlign:l("text-align"),verticalAlign:l("vertical-align"),inline:d("display","inline-block"),bold:d("font-weight","bold"),italic:d("font-style","italic"),nowrap:d("white-space","nowrap"),m:p("margin",u,["top","bottom","left","right"]),mx:p("margin",u,["left","right"]),my:p("margin",u,["top","bottom"]),mt:f("margin-top",u),mb:f("margin-bottom",u),ml:f("margin-left",u),mr:f("margin-right",u),p:p("padding",u,["top","bottom","left","right"]),px:p("padding",u,["left","right"]),py:p("padding",u,["top","bottom"]),pt:f("padding-top",u),pb:f("padding-bottom",u),pl:f("padding-left",u),pr:f("padding-right",u),color:h("color"),textColor:h("color"),backgroundColor:h("background-color"),fillPositionedParent:function(e,t){t&&(e.position="absolute",e.top=0,e.bottom=0,e.left=0,e.right=0)}},v=function(e){for(var t={},n={},r=0,o=Object.keys(e);r<o.length;r++){var i=o[r];if("style"!==i)if(Byond.IS_LTE_IE8&&"onClick"===i)t.onclick=e[i];else{var a=e[i],c=g[i];c?c(n,a):t[i]=a}}for(var u="",s=0,l=Object.keys(n);s<l.length;s++){var f=l[s];u+=f+":"+n[f]+";"}if(e.style)for(var d=0,p=Object.keys(e.style);d<p.length;d++){var h=p[d];u+=h+":"+e.style[h]+";"}return u.length>0&&(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<i.length;r++)n=i[r],t.indexOf(n)>=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<t;n++)r[n]=e[n];return r}t.__esModule=!0,t.buildQueryString=t.decodeHtmlEntities=t.toTitleCase=t.capitalize=t.createSearch=t.createGlobPattern=t.multiline=void 0;t.multiline=function i(e){if(Array.isArray(e))return i(e.join(""));for(var t,n,o=e.split("\n"),a=r(o);!(n=a()).done;)for(var c=n.value,u=0;u<c.length;u++){if(" "!==c[u]){(t===undefined||u<t)&&(t=u);break}}return t||(t=0),o.map((function(e){return e.substr(t).trimRight()})).join("\n").trim()};t.createGlobPattern=function(e){var t=new RegExp("^"+e.split(/\*+/).map((function(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")})).join(".*")+"$");return function(e){return t.test(e)}};t.createSearch=function(e,t){var n=e.toLowerCase().trim();return function(e){if(!n)return!0;var r=t?t(e):e;return!!r&&r.toLowerCase().includes(n)}};t.capitalize=function a(e){return Array.isArray(e)?e.map(a):e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()};t.toTitleCase=function c(e){if(Array.isArray(e))return e.map(c);if("string"!=typeof e)return e;for(var t=e.replace(/([^\W_]+[^\s-]*) */g,(function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})),n=0,r=["A","An","And","As","At","But","By","For","For","From","In","Into","Near","Nor","Of","On","Onto","Or","The","To","With"];n<r.length;n++){var o=new RegExp("\\s"+r[n]+"\\s","g");t=t.replace(o,(function(e){return e.toLowerCase()}))}for(var i=0,a=["Id","Tv"];i<a.length;i++){var u=new RegExp("\\b"+a[i]+"\\b","g");t=t.replace(u,(function(e){return e.toLowerCase()}))}return t};t.decodeHtmlEntities=function(e){if(!e)return e;var t={nbsp:" ",amp:"&",quot:'"',lt:"<",gt:">",apos:"'"};return e.replace(/<br>/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),w=o(b),x=r(h,g,3),_=a(w.length),E=0,k=v||c,S=t?k(p,_):n?k(p,0):undefined;_>E;E++)if((d||E in w)&&(y=x(m=w[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);n<t;n++)r[n]=e[n];return r}t.createStore=function a(e,t){if(t)return t(a)(e);var n,r=[],o=function(t){n=e(n,t);for(var o=0;o<r.length;o++)r[o]()};return o({type:"@@INIT"}),{dispatch:o,subscribe:function(e){r.push(e)},getState:function(){return n}}};t.applyMiddleware=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(n){for(var o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];var c=e.apply(void 0,[n].concat(i)),u=function(){throw new Error("Dispatching while constructing your middleware is not allowed.")},s={getState:c.getState,dispatch:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return u.apply(void 0,[e].concat(n))}},l=t.map((function(e){return e(s)}));return u=r.compose.apply(void 0,l)(c.dispatch),Object.assign({},c,{dispatch:u})}}};t.combineReducers=function(e){var t=Object.keys(e),n=!1;return function(r,i){void 0===r&&(r={});for(var a,c=Object.assign({},r),u=o(t);!(a=u()).done;){var s=a.value,l=e[s],f=r[s],d=l(f,i);f!==d&&(n=!0,c[s]=d)}return n?c:r}};t.createAction=function(e,t){var n=function(){if(!t)return{type:e,payload:arguments.length<=0?undefined:arguments[0]};var n=t.apply(void 0,arguments);if(!n)throw new Error("prepare function did not return an object");var r={type:e};return"payload"in n&&(r.payload=n.payload),"meta"in n&&(r.meta=n.meta),r};return n.toString=function(){return""+e},n.type=e,n.match=function(t){return t.type===e},n};t.useDispatch=function(e){return e.store.dispatch};t.useSelector=function(e,t){return t(e.store.getState())}},function(e,t,n){"use strict";var r=n(9),o=n(81),i=n(51),a=n(31),c=n(39),u=n(20),s=n(149),l=Object.getOwnPropertyDescriptor;t.f=r?l:function(e,t){if(e=a(e),t=c(t,!0),s)try{return l(e,t)}catch(n){}if(u(e,t))return i(!o.f.call(e,t),e[t])}},function(e,t,n){"use strict";e.exports=function(e){if(e==undefined)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";t.__esModule=!0,t.logger=t.createLogger=void 0;n(100);var r=0,o=1,i=2,a=3,c=4,u=function(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];if(e>=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<t;o++)n[o]=arguments[o];return u.apply(void 0,[r,e].concat(n))},log:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return u.apply(void 0,[o,e].concat(n))},info:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return u.apply(void 0,[i,e].concat(n))},warn:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return u.apply(void 0,[a,e].concat(n))},error:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return u.apply(void 0,[c,e].concat(n))}}};t.createLogger=s;var l=s();t.logger=l},function(e,t,n){"use strict";var r=n(7),o=n(32),i=n(20),a=n(109),c=n(110),u=n(33),s=u.get,l=u.enforce,f=String(String).split("String");(e.exports=function(e,t,n,c){var u=!!c&&!!c.unsafe,s=!!c&&!!c.enumerable,d=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof t||i(n,"name")||o(n,"name",t),l(n).source=f.join("string"==typeof t?t:"")),e!==r?(u?!d&&e[t]&&(s=!0):delete e[t],s?e[t]=n:o(e,t,n)):s?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&s(this).source||c(this)}))},function(e,t,n){"use strict";var r=n(153),o=n(20),i=n(159),a=n(16).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},function(e,t,n){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},function(e,t,n){"use strict";var r=n(9),o=n(5),i=n(20),a=Object.defineProperty,c={},u=function(e){throw e};e.exports=function(e,t){if(i(c,e))return c[e];t||(t={});var n=[][e],s=!!i(t,"ACCESSORS")&&t.ACCESSORS,l=i(t,0)?t[0]:u,f=i(t,1)?t[1]:undefined;return c[e]=!!n&&!o((function(){if(s&&!r)return!0;var e={length:-1};s?a(e,1,{enumerable:!0,get:u}):e[1]=1,n.call(e,l,f)}))}},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<t;n++)r[n]=e[n];return r}t.__esModule=!0,t.compose=t.flow=void 0;t.flow=function i(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){for(var n=e,o=arguments.length,a=new Array(o>1?o-1:0),c=1;c<o;c++)a[c-1]=arguments[c];for(var u,s=r(t);!(u=s()).done;){var l=u.value;Array.isArray(l)?n=i.apply(void 0,l).apply(void 0,[n].concat(a)):l&&(n=l.apply(void 0,[n].concat(a)))}return n}};t.compose=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];return e.apply(void 0,[t.apply(void 0,[n].concat(o))].concat(o))}}))}},function(e,t,n){"use strict";var r=n(66),o=n(24);e.exports=function(e){return r(o(e))}},function(e,t,n){"use strict";var r=n(9),o=n(16),i=n(51);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){"use strict";var r,o,i,a=n(151),c=n(7),u=n(8),s=n(32),l=n(20),f=n(82),d=n(68),p=c.WeakMap;if(a){var h=new p,g=h.get,v=h.has,m=h.set;r=function(e,t){return m.call(h,e,t),t},o=function(e){return g.call(h,e)||{}},i=function(e){return v.call(h,e)}}else{var y=f("state");d[y]=!0,r=function(e,t){return s(e,y,t),t},o=function(e){return l(e,y)?e[y]:{}},i=function(e){return l(e,y)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!u(t)||(n=o(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){"use strict";var r=n(24),o=/"/g;e.exports=function(e,t,n,i){var a=String(r(e)),c="<"+t;return""!==n&&(c+=" "+n+'="'+String(i).replace(o,""")+'"'),c+">"+a+"</"+t+">"}},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";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(11),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;c<o;c++)c>0&&c<i&&(i-c)%3==0&&(a+="\u2009"),a+=n.charAt(c);return a};t.formatDb=function(e){var t=20*Math.log(e)/Math.log(10),n=t>=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";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";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(10),o=n(28),i=n(14)("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(9),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(39),v=n(20),m=n(84),y=n(8),b=n(48),w=n(55),x=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,j=c.TypedArray,F=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(F,"buffer"),U(F,"byteOffset"),U(F,"byteLength"),U(F,"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)})),w&&w(v,j),E(x(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<u;)C(e,l++)})),w&&w(v,j),m=v.prototype=b(F)),m.constructor!==v&&f(m,"constructor",v),D&&f(m,D,c),S[c]=v,r({global:!0,forced:v!=g,sham:!B},S),"BYTES_PER_ELEMENT"in v||f(v,"BYTES_PER_ELEMENT",i),"BYTES_PER_ELEMENT"in m||f(m,"BYTES_PER_ELEMENT",i),k(c)}):e.exports=function(){}},function(e,t,n){"use strict";var r=n(37),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},function(e,t,n){"use strict";var r,o=n(10),i=n(156),a=n(113),c=n(68),u=n(157),s=n(108),l=n(82),f=l("IE_PROTO"),d=function(){},p=function(e){return"<script>"+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(14)("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(14),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(28);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(39),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(10),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(25),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(36);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){"use strict";var r=n(40),o=n(16),i=n(14),a=n(9),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(10),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=t.loadStyleSheet=void 0;var r=n(458),o=(0,n(25).createLogger)("assets"),i=[/v4shim/i],a={},c={},u=function l(e,t){if(void 0===t&&(t=1),!a[e]){a[e]=!0,o.log("loading stylesheet '"+e+"'");var n=(0,r.loadCSS)(e);n.addEventListener("load",(function(){if(!s(n,e))return n.parentNode.removeChild(n),n=null,a[e]=null,t>=5?void o.error("Error: Failed to load the stylesheet '"+e+"' after 5 attempts.\nIt was either not found, or you're trying to load an empty stylesheet that has no CSS rules in it."):void setTimeout((function(){return l(e,t+1)}),3e3)}))}};t.loadStyleSheet=u;var s=function(e,t){var n=e.sheet;if(n)return n.rules.length>0;for(var r=document.styleSheets,i=r.length,a=0;a<i;a++){var c=r[a];if(c.href.includes(t))return c.rules.length>0}return o.warn("Warning: stylesheet '"+t+"' was not found in the DOM"),!1};t.resolveAsset=function(e){return c[e]||e};t.assetMiddleware=function(e){return function(e){return function(t){var n=t.type,r=t.payload;if("asset/stylesheet"!==n)if("asset/mappings"!==n)e(t);else for(var o=function(){var e=s[a];if(i.some((function(t){return t.test(e)})))return"continue";var t=r[e],n=e.split(".").pop();c[e]=t,"css"===n&&u(t)},a=0,s=Object.keys(r);a<s.length;a++)o();else u(r)}}}},,,function(e,t,n){"use strict";var r=n(5),o=n(36),i="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==o(e)?i.call(e,""):Object(e)}:Object},function(e,t,n){"use strict";var r=0,o=Math.random();e.exports=function(e){return"Symbol("+String(e===undefined?"":e)+")_"+(++r+o).toString(36)}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var r=n(31),o=n(12),i=n(47),a=function(e){return function(t,n,a){var c,u=r(t),s=o(u.length),l=i(a,s);if(e&&n!=n){for(;s>l;)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(14)("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(14),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(26);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(10);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";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={}.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(40);e.exports=r("navigator","userAgent")||""},function(e,t,n){"use strict";var r=n(120),o=n(36),i=n(14)("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(14)("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(28),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(9),i=n(123),a=n(32),c=n(75),u=n(5),s=n(60),l=n(37),f=n(12),d=n(168),p=n(267),h=n(41),g=n(55),v=n(52).f,m=n(16).f,y=n(117),b=n(49),w=n(33),x=w.get,_=w.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 x(this)[t]}})},D=function(e,t,n,r){var o=d(n),i=x(e);if(o+t>i.byteLength)throw A("Wrong index");var a=x(i.buffer).bytes,c=o+i.byteOffset,u=a.slice(c,c+t);return r?u:u.reverse()},j=function(e,t,n,r,o,i){var a=d(n),c=x(e);if(a+t>c.byteLength)throw A("Wrong index");for(var u=x(c.buffer).bytes,s=a+c.byteOffset,l=r(+o),f=0;f<t;f++)u[s+f]=l[i?f:t-f-1]};if(i){if(!u((function(){E(1)}))||!u((function(){new E(-1)}))||u((function(){return new E,new E(1.5),new E(NaN),"ArrayBuffer"!=E.name}))){for(var F,K=(k=function(e){return s(this,k),new E(d(e))}).prototype=E.prototype,z=v(E),Y=0;z.length>Y;)(F=z[Y++])in k||a(k,F,E[F]);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=x(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){j(this,1,e,I,t)},setUint8:function(e,t){j(this,1,e,I,t)},setInt16:function(e,t){j(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){j(this,2,e,M,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){j(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){j(this,4,e,L,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){j(this,4,e,R,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){j(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(26),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,w=y,x={},_=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()})))))w=n.getConstructor(t,e,g,m),c.REQUIRED=!0;else if(i(e,!0)){var E=new w,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||((w=t((function(t,n){s(t,w,e);var r=h(new y,t,w);return n!=undefined&&u(n,r[m],r,g),r}))).prototype=b,b.constructor=w),(S||N)&&(_("delete"),_("has"),g&&_("get")),(N||k)&&_(m),v&&b.clear&&delete b.clear}return x[e]=w,r({global:!0,forced:w!=y},x),p(w,e),v||n.setStrong(w,e,g),w}},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(36),i=n(14)("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<arguments.length-2;o++)arguments[o]===undefined&&(r[o]=undefined)})),r}),e.exports=s},function(e,t,n){"use strict";n(129);var r=n(26),o=n(5),i=n(14),a=n(95),c=n(32),u=i("species"),s=!o((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")})),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],w=y[1];r(String.prototype,e,b),r(RegExp.prototype,h,2==t?function(e,t){return w.call(e,this,t)}:function(e){return w.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(36),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(80))},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";t.__esModule=!0,t.vecNormalize=t.vecLength=t.vecInverse=t.vecScale=t.vecDivide=t.vecMultiply=t.vecSubtract=t.vecAdd=void 0;var r=n(15),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<e;n++)t[n]=arguments[n];return(0,r.reduce)((function(e,t){return(0,r.zipWith)(o)(e,t)}))(t)};t.vecSubtract=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,r.reduce)((function(e,t){return(0,r.zipWith)(i)(e,t)}))(t)};t.vecMultiply=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,r.reduce)((function(e,t){return(0,r.zipWith)(a)(e,t)}))(t)};var u=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,r.reduce)((function(e,t){return(0,r.zipWith)(c)(e,t)}))(t)};t.vecDivide=u;t.vecScale=function(e,t){return(0,r.map)((function(e){return e*t}))(e)};t.vecInverse=function(e){return(0,r.map)((function(e){return-e}))(e)};var s=function(e){return Math.sqrt((0,r.reduce)(o)((0,r.zipWith)(a)(e,e)))};t.vecLength=s;t.vecNormalize=function(e){return u(e,s(e))}},function(e,t,n){"use strict";t.__esModule=!0,t.Icon=void 0;var r=n(0),o=n(6),i=n(17);var a=/-o$/,c=function(e){var t=e.name,n=e.size,c=e.spin,u=e.className,s=e.style,l=void 0===s?{}:s,f=e.rotation,d=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(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=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(40),o=n(52),i=n(114),a=n(10);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(14),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(14)("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(14)("toStringTag")]="z",e.exports="[object z]"===String(r)},function(e,t,n){"use strict";var r=n(4),o=n(164),i=n(41),a=n(55),c=n(49),u=n(32),s=n(26),l=n(14),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 w,x,_,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&&(w=i(T.call(new e)),h!==Object.prototype&&w.next&&(f||i(w)===h||(a?a(w,h):"function"!=typeof w[v]&&u(w,v,m)),c(w,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(x={values:E("values"),keys:y?A:E("keys"),entries:E("entries")},b)for(_ in x)(g||S||!(_ in C))&&s(C,_,x[_]);else r({target:t,proto:!0,forced:g||S},x);return x}},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(37),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(36),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,w={},x=function(e){if(w.hasOwnProperty(e)){var t=w[e];delete w[e],t()}},_=function(e){return function(){x(e)}},E=function(e){x(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 w[++b]=function(){("function"==typeof e?e:Function(e)).apply(undefined,t)},r(b),b},g=function(e){delete w[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),x(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(28),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(37),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(14)("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(25).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);e<t.length;e++){var n=t[e];u[n]&&(u[n]=!1,i.log('releasing key "'+n+'"'),Byond.command('KeyUp "'+n+'"'))}};t.releaseHeldKeys=l;t.setupHotKeys=function(){Byond.winget("default.*").then((function(e){for(var t={},n=0,r=Object.keys(e);n<r.length;n++){var o=r[n],c=o.split("."),u=c[1],s=c[2];u&&s&&(t[u]||(t[u]={}),t[u][s]=e[o])}for(var l=/\\"/g,f=function(e){return e.substring(1,e.length-1).replace(l,'"')},d=0,p=Object.keys(t);d<p.length;d++){var h=t[p[d]],g=f(h.name);a[g]=f(h.command)}i.debug("loaded macros",a)})),o.globalEvents.on("window-blur",(function(){l()})),o.globalEvents.on("key",(function(e){s(e)}))}},function(e,t,n){"use strict";t.__esModule=!0,t.createRenderer=t.suspendRenderer=t.resumeRenderer=void 0;var r,o=n(99),i=n(0),a=((0,n(25).createLogger)("renderer"),!0),c=!1;t.resumeRenderer=function(){a=a||"resumed",c=!1};t.suspendRenderer=function(){c=!0};t.createRenderer=function(e){return function(){o.perf.mark("render/start"),r||(r=document.getElementById("react-root")),(0,i.render)(e(),r),o.perf.mark("render/finish"),c||a&&(a=!1)}}},function(e,t,n){"use strict";t.__esModule=!0,t.debugReducer=t.relayMiddleware=t.debugMiddleware=t.KitchenSink=t.useDebug=void 0;var r=n(461);t.useDebug=r.useDebug;var o=n(462);t.KitchenSink=o.KitchenSink;var i=n(484);t.debugMiddleware=i.debugMiddleware,t.relayMiddleware=i.relayMiddleware;var a=n(485);t.debugReducer=a.debugReducer},function(e,t,n){"use strict";t.__esModule=!0,t.AnimatedNumber=void 0;var r=n(11),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.state={value:0},i(t.initial)?n.state.value=t.initial:i(t.value)&&(n.state.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.tick=function(){var e=this.props,t=this.state,n=Number(t.value),r=Number(e.value);if(i(r)){var o=.5*n+.5*r;this.setState({value:o})}},a.componentDidMount=function(){var e=this;this.timer=setInterval((function(){return e.tick()}),50)},a.componentWillUnmount=function(){clearTimeout(this.timer)},a.render=function(){var e=this.props,t=this.state,n=e.format,o=e.children,a=t.value,c=e.value;if(!i(c))return c||null;var u=a;if(n)u=n(a);else{var s=String(c).split(".")[1],l=s?s.length:0;u=(0,r.toFixed)(a,(0,r.clamp)(l,0,8))}return"function"==typeof o?o(u,a):u},o}(o.Component);t.AnimatedNumber=a},function(e,t,n){"use strict";t.__esModule=!0,t.DraggableControl=void 0;var r=n(0),o=n(11),i=n(6),a=n(138);var c=function(e,t){return e.screenX*t[0]+e.screenY*t[1]},u=function(e){var t,n;function i(t){var n;return(n=e.call(this,t)||this).inputRef=(0,r.createRef)(),n.state={value:t.value,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,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,w=s.lineHeight,x=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":w,"font-size":x},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(11),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,w=f.width,x=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:w,minHeight:b,lineHeight:x,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":x,"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<i.length;r++)n=i[r],t.indexOf(n)>=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(222),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(248),n(250),n(251),n(252),n(163),n(253),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(268),n(269),n(270),n(271),n(272),n(274),n(275),n(277),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(294),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(308),n(309),n(310),n(311),n(312),n(313),n(315),n(316),n(318),n(320),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(344),n(345),n(346),n(348),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(129),n(364),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(402),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)},function(e,t,n){"use strict";var r=n(9),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;s<n.length;s++){var l=n[s];r(e,l)||c(e,l,u(t,l))}}},function(e,t,n){"use strict";var r=n(7);e.exports=r},function(e,t,n){"use strict";var r=n(20),o=n(31),i=n(69).indexOf,a=n(68);e.exports=function(e,t){var n,c=o(e),u=0,s=[];for(n in c)!r(a,n)&&r(c,n)&&s.push(n);for(;t.length>u;)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(9),o=n(16),i=n(10),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(40);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(14);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(s<u&&u<s+f&&(d=-1,s+=f-1,u+=f-1);f-- >0;)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);h<c;){if(h in n){if(d=g?g(n[h],h,t):n[h],s>0&&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(10);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(41),c=n(32),u=n(20),s=n(14),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(37),i=n(12),a=n(44),c=n(29),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(37),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(28),o=n(8),i=[].slice,a={},c=function(e,t,n){if(!(t in a)){for(var r=[],o=0;o<t;o++)r[o]="a["+o+"]";a[t]=Function("C,a","return new C("+r.join(",")+")")}return a[t](e,n)};e.exports=Function.bind||function(e){var t=r(this),n=i.call(arguments,1),a=function(){var r=n.concat(i.call(arguments));return this instanceof a?c(t,r.length,r):t.apply(e,r)};return o(t.prototype)&&(a.prototype=t.prototype),a}},function(e,t,n){"use strict";var r=n(16).f,o=n(48),i=n(75),a=n(53),c=n(60),u=n(61),s=n(121),l=n(59),f=n(9),d=n(56).fastKey,p=n(33),h=p.set,g=p.getterFor;e.exports={getConstructor:function(e,t,n,s){var l=e((function(e,r){c(e,l,t),h(e,{type:t,index:o(null),first:undefined,last:undefined,size:0}),f||(e.size=0),r!=undefined&&u(r,e[s],e,n)})),p=g(t),v=function(e,t,n){var r,o,i=p(e),a=m(e,t);return a?a.value=n:(i.last=a={index:o=d(t,!0),key:t,value:n,previous:r=i.last,next:undefined,removed:!1},i.first||(i.first=a),r&&(r.next=a),f?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},m=function(e,t){var n,r=p(e),o=d(t);if("F"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return i(l.prototype,{clear:function(){for(var e=p(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=undefined),delete t[n.index],n=n.next;e.first=e.last=undefined,f?e.size=0:this.size=0},"delete":function(e){var t=p(this),n=m(this,e);if(n){var r=n.next,o=n.previous;delete t.index[n.index],n.removed=!0,o&&(o.next=r),r&&(r.previous=o),t.first==n&&(t.first=r),t.last==n&&(t.last=o),f?t.size--:this.size--}return!!n},forEach:function(e){for(var t,n=p(this),r=a(e,arguments.length>1?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(9),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(36),h=n(127).set,g=n(177),v=f.MutationObserver||f.WebKitMutationObserver,m=f.process,y=f.Promise,b="process"==p(m),w=d(f,"queueMicrotask"),x=w&&w.value;x||(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=x||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(10),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(401);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(10),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;o<n;o++)r[o-1]=arguments[o];for(var i=0,a=t.length;i<a;i+=1){var c=t[i];c.apply(void 0,r)}}},t.clear=function(){this.listeners={}},e}();t.EventEmitter=r},function(e,t,n){"use strict";t.__esModule=!0,t.captureExternalLinks=void 0;t.captureExternalLinks=function(){document.addEventListener("click",(function(e){var t=String(e.target.tagName).toLowerCase(),n=e.target.getAttribute("href")||"";if("a"===t&&!("?"===n.charAt(0)||n.startsWith("byond://"))){e.preventDefault();var r=n;r.toLowerCase().startsWith("www")&&(r="https://"+r),Byond.topic({tgui:1,window_id:window.__windowId__,type:"openLink",url:r})}}))}},function(e,t,n){"use strict";t.__esModule=!0,t.StoreProvider=t.configureStore=void 0;var r=n(30),o=n(22),i=n(0),a=n(63),c=n(2),u=n(137);var s=(0,n(25).createLogger)("store");t.configureStore=function(e){var t,n;void 0===e&&(e={});var i=(0,r.flow)([(0,o.combineReducers)({debug:u.debugReducer,backend:c.backendReducer}),e.reducer]),s=[].concat((null==(t=e.middleware)?void 0:t.pre)||[],[a.assetMiddleware,c.backendMiddleware],(null==(n=e.middleware)?void 0:n.post)||[]);var f=o.applyMiddleware.apply(void 0,s),d=(0,o.createStore)(i,f);return window.__store__=d,window.__augmentStack__=l(d),d};var l=function(e){return function(t,n){var r,o;n?"object"!=typeof n||n.stack||(n.stack=t):(n=new Error(t.split("\n")[0])).stack=t,s.log("FatalError:",n);var i=e.getState(),a=null==i||null==(r=i.backend)?void 0:r.config,c=t;return c+="\nUser Agent: "+navigator.userAgent,c+="\nState: "+JSON.stringify({ckey:null==a||null==(o=a.client)?void 0:o.ckey,"interface":null==a?void 0:a["interface"],window:null==a?void 0:a.window})}},f=function(e){var t,n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var o=r.prototype;return o.getChildContext=function(){return{store:this.props.store}},o.render=function(){return this.props.children},r}(i.Component);t.StoreProvider=f},function(e,t,n){"use strict";t.__esModule=!0,t.resizeStartHandler=t.dragStartHandler=t.setupDrag=t.recallWindowGeometry=t.storeWindowGeometry=t.getScreenSize=t.getScreenPosition=t.setWindowSize=t.setWindowPosition=t.getWindowSize=t.getWindowPosition=t.setWindowKey=void 0;var r=n(102),o=n(103);function i(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 a(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function c(e){i(a,r,o,c,u,"next",e)}function u(e){i(a,r,o,c,u,"throw",e)}c(undefined)}))}}var c,u,s,l,f,d=(0,n(25).createLogger)("drag"),p=window.__windowId__,h=!1,g=!1,v=[0,0];t.setWindowKey=function(e){p=e};var m=function(){return[window.screenLeft,window.screenTop]};t.getWindowPosition=m;var y=function(){return[window.innerWidth,window.innerHeight]};t.getWindowSize=y;var b=function(e){var t=(0,o.vecAdd)(e,v);return Byond.winset(window.__windowId__,{pos:t[0]+","+t[1]})};t.setWindowPosition=b;var w=function(e){return Byond.winset(window.__windowId__,{size:e[0]+"x"+e[1]})};t.setWindowSize=w;var x=function(){return[0-v[0],0-v[1]]};t.getScreenPosition=x;var _=function(){return[window.screen.availWidth,window.screen.availHeight]};t.getScreenSize=_;var E=function(e,t,n){void 0===n&&(n=50);for(var r,o=[t],i=0;i<e.length;i++){var a=e[i];a!==t&&(o.length<n?o.push(a):r=a)}return[o,r]},k=function(){var e=a(regeneratorRuntime.mark((function t(){var e,n,o,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return d.log("storing geometry"),e={pos:m(),size:y()},r.storage.set(p,e),t.t0=E,t.next=6,r.storage.get("geometries");case 6:if(t.t1=t.sent,t.t1){t.next=9;break}t.t1=[];case 9:t.t2=t.t1,t.t3=p,n=(0,t.t0)(t.t2,t.t3),o=n[0],(i=n[1])&&r.storage.remove(i),r.storage.set("geometries",o);case 16:case"end":return t.stop()}}),t)})));return function(){return e.apply(this,arguments)}}();t.storeWindowGeometry=k;var S=function(){var e=a(regeneratorRuntime.mark((function t(e){var n,i,a,u,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(void 0===e&&(e={}),t.t0=e.fancy,!t.t0){t.next=6;break}return t.next=5,r.storage.get(p);case 5:t.t0=t.sent;case 6:if((n=t.t0)&&d.log("recalled geometry:",n),i=(null==n?void 0:n.pos)||e.pos,(a=e.size)&&w(a),!i){t.next=18;break}return t.next=14,c;case 14:a&&e.locked&&(i=N(i,a)[1]),b(i),t.next=24;break;case 18:if(!a){t.next=24;break}return t.next=21,c;case 21:u=[window.screen.availWidth-Math.abs(v[0]),window.screen.availHeight-Math.abs(v[1])],s=(0,o.vecAdd)((0,o.vecScale)(u,.5),(0,o.vecScale)(a,-.5),(0,o.vecScale)(v,-1)),b(s);case 24:case"end":return t.stop()}}),t)})));return function(t){return e.apply(this,arguments)}}();t.recallWindowGeometry=S;var C=function(){var e=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=Byond.winget(window.__windowId__,"pos").then((function(e){return[e.x-window.screenLeft,e.y-window.screenTop]})),e.next=3,c;case 3:v=e.sent,d.debug("screen offset",v);case 5:case"end":return e.stop()}}),t)})));return function(){return e.apply(this,arguments)}}();t.setupDrag=C;var N=function(e,t){for(var n=x(),r=_(),o=[e[0],e[1]],i=!1,a=0;a<2;a++){var c=n[a],u=n[a]+r[a];e[a]<c?(o[a]=c,i=!0):e[a]+t[a]>u&&(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),w(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(25),c=n(17),u=n(104),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<i.length;r++)n=i[r],t.indexOf(n)>=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,w=e.compact,x=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",x&&"Button--circular",w&&"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<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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(42),l=n(137),f=(n(200),n(188)),d=n(25),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,w=(0,l.useDebug)(this.context).debugLayout,x=(0,i.useDispatch)(this.context),_=null==(e=m.window)?void 0:e.fancy,E=m.user&&(m.user.observer?m.status<s.UI_DISABLED:m.status<s.UI_INTERACTIVE);return(0,r.createComponentVNode)(2,p.Layout,{className:"Window",theme:u,children:[(0,r.createComponentVNode)(2,y,{className:"Window__titleBar",title:!b&&(d||(0,a.decodeHtmlEntities)(m.title)),status:m.status,fancy:_,onDragStart:f.dragStartHandler,onClose:function(){h.log("pressed close"),x((0,c.backendSuspendStart)())}}),(0,r.createVNode)(1,"div",(0,o.classes)(["Window__rest",w&&"debug-layout"]),[!b&&g,E&&(0,r.createVNode)(1,"div","Window__dimmer")],0),_&&n&&(0,r.createFragment)([(0,r.createVNode)(1,"div","Window__resizeHandle__e",null,1,{onMousedown:(0,f.resizeStartHandler)(1,0)}),(0,r.createVNode)(1,"div","Window__resizeHandle__s",null,1,{onMousedown:(0,f.resizeStartHandler)(0,1)}),(0,r.createVNode)(1,"div","Window__resizeHandle__se",null,1,{onMousedown:(0,f.resizeStartHandler)(1,1)})],4)]})},u}(r.Component);t.Window=v;v.Content=function(e){var t=e.className,n=e.fitted,i=e.children,a=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=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";var r=n(4),o=n(7),i=n(40),a=n(43),c=n(9),u=n(115),s=n(155),l=n(5),f=n(20),d=n(58),p=n(8),h=n(10),g=n(18),v=n(31),m=n(39),y=n(51),b=n(48),w=n(71),x=n(52),_=n(158),E=n(114),k=n(23),S=n(16),C=n(81),N=n(32),A=n(26),T=n(111),O=n(82),I=n(68),M=n(67),L=n(14),V=n(159),R=n(27),P=n(49),B=n(33),D=n(21).forEach,j=O("hidden"),F=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,j)&&e[j][r]&&(e[j][r]=!1),n=b(n,{enumerable:y(0,!1)})):(f(e,j)||W(e,j,y(1,{})),e[j][r]=!0),re(e,r,n)):W(e,r,n)},ce=function(e,t){h(e);var n=v(t),r=w(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,j)&&this[j][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,j)&&n[j][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,j)&&f(this[j],t)&&(this[j][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,x.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(w(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[F]||N(U.prototype,F,U.prototype.valueOf),P(U,"Symbol"),I[j]=!0},function(e,t,n){"use strict";var r=n(4),o=n(9),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(27)("asyncIterator")},function(e,t,n){"use strict";n(27)("hasInstance")},function(e,t,n){"use strict";n(27)("isConcatSpreadable")},function(e,t,n){"use strict";n(27)("iterator")},function(e,t,n){"use strict";n(27)("match")},function(e,t,n){"use strict";n(27)("matchAll")},function(e,t,n){"use strict";n(27)("replace")},function(e,t,n){"use strict";n(27)("search")},function(e,t,n){"use strict";n(27)("species")},function(e,t,n){"use strict";n(27)("split")},function(e,t,n){"use strict";n(27)("toPrimitive")},function(e,t,n){"use strict";n(27)("toStringTag")},function(e,t,n){"use strict";n(27)("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(14),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;t<r;t++)if(m(i=-1===t?a:arguments[t])){if(d+(o=u(i.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n<o;n++,d++)n in i&&s(f,d,i[n])}else{if(d>=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(29),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(29),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(29),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(29),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(37),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(28),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(247);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(29),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(249);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),w=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>w;w++)p=y?m(h[w],w):h[w],u(n,w,p);else for(d=(f=b.call(h)).next,n=new g;!(l=d.call(f)).done;w++)p=y?i(f,m,[l.value,w],!0):l.value,u(n,w,p);return n.length=w,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(29)("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(29),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(29),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(29),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(29),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(14),f=n(73),d=n(29),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;p<h;p++,l++)p in f&&s(r,l,f[p]);return r.length=l,r}})},function(e,t,n){"use strict";var r=n(4),o=n(21).some,i=n(44),a=n(29),c=i("some"),u=a("some");r({target:"Array",proto:!0,forced:!c||!u},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}})},function(e,t,n){"use strict";var r=n(4),o=n(28),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(37),a=n(12),c=n(18),u=n(72),s=n(54),l=n(73),f=n(29),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;f<r;f++)(d=y+f)in v&&s(l,f,v[d]);if(l.length=r,n<r){for(f=y;f<m-r;f++)p=f+n,(d=f+r)in v?v[p]=v[d]:delete v[p];for(f=m;f>m-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<n;f++)v[f+y]=arguments[f+2];return v.length=m-r+n,l}})},function(e,t,n){"use strict";n(50)("flat")},function(e,t,n){"use strict";n(50)("flatMap")},function(e,t,n){"use strict";var r=n(4),o=n(7),i=n(87),a=n(59),c=i.ArrayBuffer;r({global:!0,forced:o.ArrayBuffer!==c},{ArrayBuffer:c}),a("ArrayBuffer")},function(e,t,n){"use strict";var r=Math.abs,o=Math.pow,i=Math.floor,a=Math.log,c=Math.LN2;e.exports={pack:function(e,t,n){var u,s,l,f=new Array(n),d=8*n-t-1,p=(1<<d)-1,h=p>>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<<t|s,d+=t;d>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<<i)-1,c=a>>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(10),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;r<o;)h.setUint8(g++,p.getUint8(r++));return i}})},function(e,t,n){"use strict";var r=n(4),o=n(87);r({global:!0,forced:!n(123)},{DataView:o.DataView})},function(e,t,n){"use strict";n(4)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(e,t,n){"use strict";var r=n(4),o=n(273);r({target:"Date",proto:!0,forced:Date.prototype.toISOString!==o},{toISOString:o})},function(e,t,n){"use strict";var r=n(5),o=n(124).start,i=Math.abs,a=Date.prototype,c=a.getTime,u=a.toISOString;e.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=u.call(new Date(-50000000000001))}))||!r((function(){u.call(new Date(NaN))}))?function(){if(!isFinite(c.call(this)))throw RangeError("Invalid time value");var e=this.getUTCFullYear(),t=this.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";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(39);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(276),i=n(14)("toPrimitive"),a=Date.prototype;i in a||r(a,i,o)},function(e,t,n){"use strict";var r=n(10),o=n(39);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(26),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(41),a=n(14)("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(9),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(40),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(293)})},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 i<s?l*(i/s/c+1/a-1/a)*s*c:(n=(t=(1+c/a)*i)-(t-i))>u||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;c<u;)s<(n=i(arguments[c++]))?(o=o*(r=s/n)*r+1,s=n):o+=n>0?(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(9),o=n(7),i=n(70),a=n(26),c=n(20),u=n(36),s=n(89),l=n(39),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)),w=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;c<a;c++)if((u=i.charCodeAt(c))<48||u>o)return NaN;return parseInt(i,r)}return+s};if(i("Number",!m(" 0o1")||!m("0b1")||m("+0x1"))){for(var x,_=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(w(t)),n,_):w(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,x=E[k])&&!c(_,x)&&g(_,x,h(m,x));_.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(307)})},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(314);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(37),i=n(317),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<<r),g(1,1),v(2),h=m()}else g(0,n),g(1<<-t,0),h=m()+a.call("0",f);return h=f>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(36);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(319);r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},function(e,t,n){"use strict";var r=n(9),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(9)},{create:n(48)})},function(e,t,n){"use strict";var r=n(4),o=n(9),i=n(92),a=n(18),c=n(28),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(9);r({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperties:n(156)})},function(e,t,n){"use strict";var r=n(4),o=n(9);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(9),i=n(92),a=n(18),c=n(28),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(9),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(9),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(41),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(9),i=n(92),a=n(18),c=n(39),u=n(41),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(9),i=n(92),a=n(18),c=n(39),u=n(41),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(26),i=n(343);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(40),f=n(176),d=n(26),p=n(75),h=n(49),g=n(59),v=n(8),m=n(28),y=n(60),b=n(36),w=n(110),x=n(61),_=n(85),E=n(45),k=n(127).set,S=n(178),C=n(179),N=n(347),A=n(128),T=n(180),O=n(33),I=n(70),M=n(14),L=n(116),V=M("species"),R="Promise",P=O.get,B=O.set,D=O.getterFor(R),j=f,F=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(!(w(j)!==String(j))){if(66===L)return!0;if(!H&&"function"!=typeof PromiseRejectionEvent)return!0}if(u&&!j.prototype["finally"])return!0;if(L>=51&&/native code/.test(j))return!1;var e=j.resolve(1),t=function(e){e((function(){}),(function(){}))};return(e.constructor={})[V]=t,!(e.then((function(){}))instanceof t)})),G=q||!_((function(e){j.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(F("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 F("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&&(j=function(e){y(this,j,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(j.prototype,{then:function(e,t){var n=D(this),r=U(E(this,j));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===j||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 j((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(j,Y.apply(s,arguments))}}))),c({global:!0,wrap:!0,forced:q},{Promise:j}),h(j,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?j: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;x(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);x(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(28),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(40),u=n(45),s=n(179),l=n(26);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(40),i=n(28),a=n(10),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(40),i=n(28),a=n(10),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(9),i=n(10),a=n(39),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(10),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(10),a=n(20),c=n(23),u=n(41);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(9),i=n(10),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(10),i=n(41);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(10),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(40),i=n(10);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(10),i=n(8),a=n(20),c=n(5),u=n(16),s=n(23),l=n(41),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(10),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(9),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(26),p=n(5),h=n(33).set,g=n(59),v=n(14)("match"),m=o.RegExp,y=m.prototype,b=/a/g,w=/a/g,x=new m(b)!==b,_=f.UNSUPPORTED_Y;if(r&&i("RegExp",!x||_||p((function(){return w[v]=!1,m(b)!=b||m(w)==w||"/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;x?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(x?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(9),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(9),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(26),o=n(10),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(10),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(28),u=n(10),s=n(36),l=n(93),f=n(77),d=n(32),p=n(5),h=n(14),g=n(45),v=n(97),m=n(33),y=n(43),b=h("matchAll"),w=m.set,x=m.getterFor("RegExp String Iterator"),_=RegExp.prototype,E=_.exec,k="".matchAll,S=!!k&&!p((function(){"a".matchAll(/./)})),C=o((function(e,t,n,r){w(this,{type:"RegExp String Iterator",regexp:e,string:t,global:n,unicode:r,done:!1})}),"RegExp String",(function(){var e=x(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<r&&a.push(String(arguments[c]));return a.join("")}})},function(e,t,n){"use strict";n(4)({target:"String",proto:!0},{repeat:n(125)})},function(e,t,n){"use strict";var r=n(96),o=n(10),i=n(18),a=n(12),c=n(37),u=n(24),s=n(97),l=n(98),f=Math.max,d=Math.min,p=Math.floor,h=/\$([$&'`]|\d\d?|<[^>]*>)/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 w=u.unicode;u.lastIndex=0}for(var x=[];;){var _=l(u,p);if(null===_)break;if(x.push(_),!g)break;""===String(_[0])&&(u.lastIndex=s(p,a(u.lastIndex),w))}for(var E,k="",S=0,C=0;C<x.length;C++){_=x[C];for(var N=String(_[0]),A=f(d(c(_.index),p.length),0),T=[],O=1;O<_.length;O++)T.push((E=_[O])===undefined?E:String(E));var I=_.groups;if(h){var M=[N].concat(T,A,p);I!==undefined&&M.push(I);var L=String(r.apply(undefined,M))}else L=b(N,p,A,T,I,r);A>=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(10),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(10),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<r.length&&p.apply(l,c.slice(1)),s=c[0].length,h=u,l.length>=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 w=0,x=0,_=[];x<d.length;){y.lastIndex=g?x:0;var E,k=l(y,g?d:d.slice(x));if(null===k||(E=h(s(y.lastIndex+(g?0:x)),d.length))===w)x=u(d,x,v);else{if(_.push(d.slice(w,x)),_.length===b)return _;for(var S=1;S<=k.length-1;S++)if(_.push(k[S]),_.length===b)return _;x=w=E}}return _.push(d.slice(w)),_}]}),!g)},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="".startsWith,d=Math.min,p=s("startsWith");o({target:"String",proto:!0,forced:!!(l||p||(r=i(String.prototype,"startsWith"),!r||r.writable))&&!p},{startsWith:function(e){var t=String(u(this));c(e);var n=a(d(arguments.length>1?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(37);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(14)("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;r<n;)e=this[r],this[r++]=this[--t],this[t]=e;return this}))},function(e,t,n){"use strict";var r=n(13),o=n(12),i=n(182),a=n(18),c=n(5),u=r.aTypedArray;(0,r.exportTypedArrayMethod)("set",(function(e){u(this);var t=i(arguments.length>1?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(;s<c;)this[t+s]=r[s++]}),c((function(){new Int8Array(1).set({})})))},function(e,t,n){"use strict";var r=n(13),o=n(45),i=n(5),a=r.aTypedArray,c=r.aTypedArrayConstructor,u=r.exportTypedArrayMethod,s=[].slice;u("slice",(function(e,t){for(var n=s.call(a(this),e,t),r=o(this,this.constructor),i=0,u=n.length,l=new(c(r))(u);u>i;)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,w=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)?w.call(this,e,t):n.frozen.set(e,t)}else w.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(36),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=w(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 w(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,w(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 x(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(x,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<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return d.prototype=m.constructor=p,p.constructor=d,d.displayName=c(p,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===d||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,c(e,a,"GeneratorFunction")),e.prototype=Object.create(m),e},e.awrap=function(e){return{__await:e}},y(b.prototype),b.prototype[i]=function(){return this},e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(u(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},y(m),c(m,a,"Generator"),m[o]=function(){return this},m.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=k,E.prototype={constructor:E,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(_),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=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<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=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<style>"+t+"</style>",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="<xyz></xyz>",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;i<c;i++)r.createElement(a[i]);return r},addElements:function(e,t){var n=h.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),h.elements=n+" "+e,p(t)}};t.html5=h,p(n),e.exports&&(e.exports=h)}(window,document)},function(e,t,n){"use strict";!function(e){if(!document.createEvent){var t,n=!0,r=!1,o="__IE8__"+Math.random(),i=Object.defineProperty||function(e,t,n){e[t]=n.value},a=Object.defineProperties||function(t,n){for(var r in n)if(u.call(n,r))try{i(t,r,n[r])}catch(o){e.console}},c=Object.getOwnPropertyDescriptor,u=Object.prototype.hasOwnProperty,s=e.Element.prototype,l=e.Text.prototype,f=/^[a-z]+$/,d=/loaded|complete/,p={},h=document.createElement("div"),g=document.documentElement,v=g.removeAttribute,m=g.setAttribute,y=function(e){return{enumerable:!0,writable:!0,configurable:!0,value:e}};E(e.HTMLCommentElement.prototype,s,"nodeValue"),E(e.HTMLScriptElement.prototype,null,"text"),E(l,null,"nodeValue"),E(e.HTMLTitleElement.prototype,null,"text"),i(e.HTMLStyleElement.prototype,"textContent",(t=c(e.CSSStyleSheet.prototype,"cssText"),_((function(){return t.get.call(this.styleSheet)}),(function(e){t.set.call(this.styleSheet,e)}))));var b=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;i(e.CSSStyleDeclaration.prototype,"opacity",{get:function(){var e=this.filter.match(b);return e?(e[1]/100).toString():""},set:function(e){this.zoom=1;var t=!1;e=e<1?" alpha(opacity="+Math.round(100*e)+")":"",this.filter=this.filter.replace(b,(function(){return t=!0,e})),!t&&e&&(this.filter+=e)}}),a(s,{textContent:{get:S,set:T},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;t<n;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:y((function(e,t,n){if("function"==typeof t||"object"==typeof t){var r,a,c=this,s="on"+e,l=c[o]||i(c,o,{value:{}})[o],d=l[s]||(l[s]={}),g=d.h||(d.h=[]);if(!u.call(d,"w")){if(d.w=function(e){return e[o]||x(c,O(0,e),g,!1)},!u.call(p,s))if(f.test(e)){try{(r=document.createEventObject())[o]=!0,9!=c.nodeType&&(null==c.parentNode&&h.appendChild(c),(a=c.getAttribute(s))&&v.call(c,s)),c.fireEvent(s,r),p[s]=!0}catch(y){for(p[s]=!1;h.hasChildNodes();)h.removeChild(h.firstChild)}null!=a&&m.call(c,s,a)}else p[s]=!1;(d.n=p[s])&&c.attachEvent(s,d.w)}k(g,t)<0&&g[n?"unshift":"push"](t),"input"===e&&c.attachEvent("onkeyup",C)}})),dispatchEvent:y((function(e){var t,n="on"+e.type,r=this[o],i=r&&r[n],a=!!i;return e.target||(e.target=this),a?i.n?this.fireEvent(n,e):x(this,e,i.h,!0):!(t=this.parentNode)||t.dispatchEvent(e),!e.defaultPrevented})),removeEventListener:y((function(e,t,n){if("function"==typeof t||"object"==typeof t){var r="on"+e,i=this[o],a=i&&i[r],c=a&&a.h,u=c?k(c,t):-1;-1<u&&c.splice(u,1)}}))}),a(l,{addEventListener:y(s.addEventListener),dispatchEvent:y(s.dispatchEvent),removeEventListener:y(s.removeEventListener)}),a(e.XMLHttpRequest.prototype,{addEventListener:y((function(e,t,n){var r=this,a="on"+e,c=r[o]||i(r,o,{value:{}})[o],u=c[a]||(c[a]={}),s=u.h||(u.h=[]);k(s,t)<0&&(r[a]||(r[a]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),r.dispatchEvent(t)}),s[n?"unshift":"push"](t))})),dispatchEvent:y((function(e){var t="on"+e.type,n=this[o],r=n&&n[t];return!!r&&(r.n?this.fireEvent(t,e):x(this,e,r.h,!0))})),removeEventListener:y(s.removeEventListener)});var w=c(Event.prototype,"button").get;a(e.Event.prototype,{bubbles:y(!0),cancelable:y(!0),preventDefault:y((function(){this.cancelable&&(this.returnValue=!1)})),stopPropagation:y((function(){this.stoppedPropagation=!0,this.cancelBubble=!0})),stopImmediatePropagation:y((function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()})),initEvent:y((function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()})),pageX:{get:function(){return this._pageX||(this._pageX=this.clientX+e.scrollX-(g.clientLeft||0))}},pageY:{get:function(){return this._pageY||(this._pageY=this.clientY+e.scrollY-(g.clientTop||0))}},which:{get:function(){return this.keyCode?this.keyCode:isNaN(this.button)?undefined:this.button+1}},charCode:{get:function(){return this.keyCode&&"keypress"==this.type?this.keyCode:0}},buttons:{get:function(){return w.call(this)}},button:{get:function(){var e=this.buttons;return 1&e?0:2&e?2:4&e?1:undefined}},defaultPrevented:{get:function(){var e=this.returnValue;return!(void 0===e||e)}},relatedTarget:{get:function(){var e=this.type;return"mouseover"===e?this.fromElement:"mouseout"===e?this.toElement:null}}}),a(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?S.call(this):null},set:function(e){11===this.nodeType&&T.call(this,e)}},addEventListener:y((function(t,r,o){var i=this;s.addEventListener.call(i,t,r,o),n&&"DOMContentLoaded"===t&&!d.test(i.readyState)&&(n=!1,i.attachEvent("onreadystatechange",N),e==top&&function a(e){try{i.documentElement.doScroll("left"),N()}catch(t){setTimeout(a,50)}}())})),dispatchEvent:y(s.dispatchEvent),removeEventListener:y(s.removeEventListener),createEvent:y((function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return(t=document.createEventObject()).timeStamp=(new Date).getTime(),t}))}),a(e.Window.prototype,{getComputedStyle:y(function(){var e=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,t=/^(top|right|bottom|left)$/,n=/\-([a-z])/g,r=function(e,t){return t.toUpperCase()};function o(e){this._=e}function i(){}return o.prototype.getPropertyValue=function(o){var i,a,c,u=this._,s=u.style,l=u.currentStyle,f=u.runtimeStyle;return"opacity"==o?s.opacity||"1":(o=("float"===o?"style-float":o).replace(n,r),i=l?l[o]:s[o],e.test(i)&&!t.test(o)&&(a=s.left,(c=f&&f.left)&&(f.left=l.left),s.left="fontSize"===o?"1em":i,i=s.pixelLeft+"px",s.left=a,c&&(f.left=c)),null==i?i:i+""||"auto")},i.prototype.getPropertyValue=function(){return null},function(e,t){return t?new i(e):new o(e)}}()),addEventListener:y((function(t,n,r){var i,a=e,c="on"+t;a[c]||(a[c]=function(e){return x(a,O(0,e),i,!1)&&undefined}),k(i=a[c][o]||(a[c][o]=[]),n)<0&&i[r?"unshift":"push"](n)})),dispatchEvent:y((function(t){var n=e["on"+t.type];return!n||!1!==n.call(e,t)&&!t.defaultPrevented})),removeEventListener:y((function(t,n,r){var i=(e["on"+t]||Object)[o],a=i?k(i,n):-1;-1<a&&i.splice(a,1)})),pageXOffset:{get:A("scrollLeft")},pageYOffset:{get:A("scrollTop")},scrollX:{get:A("scrollLeft")},scrollY:{get:A("scrollTop")},innerWidth:{get:A("clientWidth")},innerHeight:{get:A("clientHeight")}}),e.HTMLElement=e.Element,function(e,t,n){for(n=0;n<t.length;n++)document.createElement(t[n]);e.length||document.createStyleSheet(""),e[0].addRule(t.join(","),"display:block;")}(document.styleSheets,["header","nav","section","article","aside","footer"]),function(){if(!document.createRange){document.createRange=function(){return new n};var e=n.prototype;e.cloneContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),r=0,o=n.length;r<o;r++)e.appendChild(n[r].cloneNode(!0));return e},e.cloneRange=function(){var e=new n;return e._start=this._start,e._end=this._end,e},e.deleteContents=function(){for(var e=this._start.parentNode,n=t(this._start,this._end),r=0,o=n.length;r<o;r++)e.removeChild(n[r])},e.extractContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),r=0,o=n.length;r<o;r++)e.appendChild(n[r]);return e},e.setEndAfter=function(e){this._end=e},e.setEndBefore=function(e){this._end=e.previousSibling},e.setStartAfter=function(e){this._start=e.nextSibling},e.setStartBefore=function(e){this._start=e}}function t(e,t){for(var n=[e];e!==t;)n.push(e=e.nextSibling);return n}function n(){}}()}function x(e,t,n,r){for(var o,i,a=n.slice(),c=function(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}(t,e),u=0,s=a.length;u<s&&("object"==typeof(o=a[u])?"function"==typeof o.handleEvent&&o.handleEvent(c):o.call(e,c),!c.stoppedImmediatePropagation);u++);return i=!c.stoppedPropagation,r&&i&&e.parentNode?e.parentNode.dispatchEvent(c):!c.defaultPrevented}function _(e,t){return{configurable:!0,get:e,set:t}}function E(e,t,n){var r=c(t||e,n);i(e,"textContent",_((function(){return r.get.call(this)}),(function(e){r.set.call(this,e)})))}function k(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function S(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function C(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function N(e){!r&&d.test(document.readyState)&&(r=!r,document.detachEvent("onreadystatechange",N),(e=document.createEvent("Event")).initEvent("DOMContentLoaded",!0,!0),document.dispatchEvent(e))}function A(e){return function(){return g[e]||document.body&&document.body[e]||0}}function T(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function O(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}}(window)},function(e,t,n){"use strict";!function(e){function t(){return f.createDocumentFragment()}function n(e){return f.createElement(e)}function r(e,t){if(!e)throw new Error("Failed to construct "+t+": 1 argument required, but only 0 present.")}function o(e){if(1===e.length)return i(e[0]);for(var n=t(),r=M.call(e),o=0;o<e.length;o++)n.appendChild(i(r[o]));return n}function i(e){return"object"==typeof e?e:f.createTextNode(e)}for(var a,c,u,s,l,f=e.document,d=Object.prototype.hasOwnProperty,p=Object.defineProperty||function(e,t,n){return d.call(n,"value")?e[t]=n.value:(d.call(n,"get")&&e.__defineGetter__(t,n.get),d.call(n,"set")&&e.__defineSetter__(t,n.set)),e},h=[].indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},g=function(e){var t="undefined"==typeof e.className,n=t?e.getAttribute("class")||"":e.className,r=t||"object"==typeof n,o=(r?t?n:n.baseVal:n).replace(m,"");o.length&&I.push.apply(this,o.split(y)),this._isSVG=r,this._=e},v={get:function(){return new g(this)},set:function(){}},m=/^\s+|\s+$/g,y=/\s+/,b=function(e,t){return this.contains(e)?t||this.remove(e):(t===undefined||t)&&(t=!0,this.add(e)),!!t},w=e.DocumentFragment&&DocumentFragment.prototype,x=e.Node,_=(x||Element).prototype,E=e.CharacterData||x,k=E&&E.prototype,S=e.DocumentType,C=S&&S.prototype,N=(e.Element||x||e.HTMLElement).prototype,A=e.HTMLSelectElement||n("select").constructor,T=A.prototype.remove,O=e.SVGElement,I=["matches",N.matchesSelector||N.webkitMatchesSelector||N.khtmlMatchesSelector||N.mozMatchesSelector||N.msMatchesSelector||N.oMatchesSelector||function(e){var t=this.parentNode;return!!t&&-1<h.call(t.querySelectorAll(e),this)},"closest",function(e){for(var t,n=this;(t=n&&n.matches)&&!n.matches(e);)n=n.parentNode;return t?n:null},"prepend",function(){var e=this.firstChild,t=o(arguments);e?this.insertBefore(t,e):this.appendChild(t)},"append",function(){this.appendChild(o(arguments))},"before",function(){var e=this.parentNode;e&&e.insertBefore(o(arguments),this)},"after",function(){var e=this.parentNode,t=this.nextSibling,n=o(arguments);e&&(t?e.insertBefore(n,t):e.appendChild(n))},"toggleAttribute",function(e,t){var n=this.hasAttribute(e);return 1<arguments.length?n&&!t?this.removeAttribute(e):t&&!n&&this.setAttribute(e,""):n?this.removeAttribute(e):this.setAttribute(e,""),this.hasAttribute(e)},"replace",function(){this.replaceWith.apply(this,arguments)},"replaceWith",function(){var e=this.parentNode;e&&e.replaceChild(o(arguments),this)},"remove",function(){var e=this.parentNode;e&&e.removeChild(this)}],M=I.slice,L=I.length;L;L-=2)if((c=I[L-2])in N||(N[c]=I[L-1]),"remove"!==c||T._dom4||((A.prototype[c]=function(){return 0<arguments.length?T.apply(this,arguments):N.remove.call(this)})._dom4=!0),/^(?:before|after|replace|replaceWith|remove)$/.test(c)&&(E&&!(c in k)&&(k[c]=I[L-1]),S&&!(c in C)&&(C[c]=I[L-1])),/^(?:append|prepend)$/.test(c))if(w)c in w||(w[c]=I[L-1]);else try{t().constructor.prototype[c]=I[L-1]}catch(R){}var V;n("a").matches("a")||(N[c]=(V=N[c],function(e){return V.call(this.parentNode?this:t().appendChild(this),e)})),g.prototype={length:0,add:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)||I.push.call(this,c);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},contains:function(e){return function(t){return-1<(L=e.call(this,c=function(e){if(!e)throw"SyntaxError";if(y.test(e))throw"InvalidCharacterError";return e}(t)))}}([].indexOf||function(e){for(L=this.length;L--&&this[L]!==e;);return L}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t<arguments.length;t++)e=arguments[t],this.contains(e)&&I.splice.call(this,L,1);this._isSVG?this._.setAttribute("class",""+this):this._.className=""+this},toggle:b,toString:function(){return I.join.call(this," ")}},O&&!("classList"in O.prototype)&&p(O.prototype,"classList",v),"classList"in f.documentElement?((s=n("div").classList).add("a","b","a"),"a b"!=s&&("add"in(u=s.constructor.prototype)||(u=e.TemporaryTokenList.prototype),l=function(e){return function(){for(var t=0;t<arguments.length;)e.call(this,arguments[t++])}},u.add=l(u.add),u.remove=l(u.remove),u.toggle=b)):p(N,"classList",v),"contains"in _||p(_,"contains",{value:function(e){for(;e&&e!==this;)e=e.parentNode;return this===e}}),"head"in f||p(f,"head",{get:function(){return a||(a=f.getElementsByTagName("head")[0])}}),function(){for(var t,n=e.requestAnimationFrame,r=e.cancelAnimationFrame,o=["o","ms","moz","webkit"],i=o.length;!r&&i--;)n=n||e[o[i]+"RequestAnimationFrame"],r=e[o[i]+"CancelAnimationFrame"]||e[o[i]+"CancelRequestAnimationFrame"];r||(n?(t=n,n=function(e){var n=!0;return t((function(){n&&e.apply(this,arguments)})),function(){n=!1}},r=function(e){e()}):(n=function(e){return setTimeout(e,15,15)},r=function(e){clearTimeout(e)})),e.requestAnimationFrame=n,e.cancelAnimationFrame=r}();try{new e.CustomEvent("?")}catch(R){e.CustomEvent=function(e,t){function n(e,t,n,r){this.initEvent(e,t,n),this.detail=r}return function(r,o){var i=f.createEvent(e);if("string"!=typeof r)throw new Error("An event name must be provided");return"Event"==e&&(i.initCustomEvent=n),null==o&&(o=t),i.initCustomEvent(r,o.bubbles,o.cancelable,o.detail),i}}(e.CustomEvent?"CustomEvent":"Event",{bubbles:!1,cancelable:!1,detail:null})}try{new Event("_")}catch(R){R=function(e){function t(e,t){r(arguments.length,"Event");var n=f.createEvent("Event");return t||(t={}),n.initEvent(e,!!t.bubbles,!!t.cancelable),n}return t.prototype=e.prototype,t}(e.Event||function(){}),p(e,"Event",{value:R}),Event!==R&&(Event=R)}try{new KeyboardEvent("_",{})}catch(R){R=function(t){var n,o=0,i={char:"",key:"",location:0,ctrlKey:!1,shiftKey:!1,altKey:!1,metaKey:!1,altGraphKey:!1,repeat:!1,locale:navigator.language,detail:0,bubbles:!1,cancelable:!1,keyCode:0,charCode:0,which:0};try{var a=f.createEvent("KeyboardEvent");a.initKeyboardEvent("keyup",!1,!1,e,"+",3,!0,!1,!0,!1,!1),o="+"==(a.keyIdentifier||a.key)&&3==(a.keyLocation||a.location)&&(a.ctrlKey?a.altKey?1:3:a.shiftKey?2:4)||9}catch(R){}function c(e){for(var t=[],n=["ctrlKey","Control","shiftKey","Shift","altKey","Alt","metaKey","Meta","altGraphKey","AltGraph"],r=0;r<n.length;r+=2)e[n[r]]&&t.push(n[r+1]);return t.join(" ")}function u(e,t){for(var n in t)t.hasOwnProperty(n)&&!t.hasOwnProperty.call(e,n)&&(e[n]=t[n]);return e}function s(e,t,n){try{t[e]=n[e]}catch(R){}}function l(t,a){r(arguments.length,"KeyboardEvent"),a=u(a||{},i);var l,d=f.createEvent(n),p=a.ctrlKey,h=a.shiftKey,g=a.altKey,v=a.metaKey,m=a.altGraphKey,y=o>3?c(a):null,b=String(a.key),w=String(a.char),x=a.location,_=a.keyCode||(a.keyCode=b)&&b.charCodeAt(0)||0,E=a.charCode||(a.charCode=w)&&w.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<o&&"initKeyboardEvent"in d){switch(l=[t,k,S,A],o){case 1:l.push(b,x,p,h,g,v,m);break;case 2:l.push(p,g,h,v,_,E);break;case 3:l.push(b,x,p,g,h,v,m);break;case 4:l.push(b,x,y,C,N);break;default:l.push(char,b,x,y,C,N)}d.initKeyboardEvent.apply(d,l)}else d.initEvent(t,k,S);for(b in d)i.hasOwnProperty(b)&&d[b]!==a[b]&&s(b,d,a);return d}return n=0<o?"KeyboardEvent":"Event",l.prototype=t.prototype,l}(e.KeyboardEvent||function(){}),p(e,"KeyboardEvent",{value:R}),KeyboardEvent!==R&&(KeyboardEvent=R)}try{new MouseEvent("_",{})}catch(R){R=function(t){function n(t,n){r(arguments.length,"MouseEvent");var o=f.createEvent("MouseEvent");return n||(n={}),o.initMouseEvent(t,!!n.bubbles,!!n.cancelable,n.view||e,n.detail||1,n.screenX||0,n.screenY||0,n.clientX||0,n.clientY||0,!!n.ctrlKey,!!n.altKey,!!n.shiftKey,!!n.metaKey,n.button||0,n.relatedTarget||null),o}return n.prototype=t.prototype,n}(e.MouseEvent||function(){}),p(e,"MouseEvent",{value:R}),MouseEvent!==R&&(MouseEvent=R)}f.querySelectorAll("*").forEach||function(){function e(e){var t=e.querySelectorAll;e.querySelectorAll=function(e){var n=t.call(this,e);return n.forEach=Array.prototype.forEach,n}}e(f),e(Element.prototype)}();try{f.querySelector(":scope *")}catch(R){!function(){var e="data-scope-"+(1e9*Math.random()>>>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=je,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),Fe(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=Fe,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;t<e.length;t++)e[t]()}function y(e,t,n){var r=e.children;return 4&n?r.$LI:8192&n?2===e.childFlags?r:r[t?0:r.length-1]:r}function b(e,t){for(var n;e;){if(2033&(n=e.flags))return e.dom;e=y(e,t,n)}return null}function w(e,t){do{var n=e.flags;if(2033&n)return void v(t,e.dom);var r=e.children;if(4&n&&(e=r.$LI),8&n&&(e=r),8192&n){if(2!==e.childFlags){for(var o=0,i=r.length;o<i;++o)w(r[o],t);return}e=r}}while(e)}function x(e,t,n){do{var r=e.flags;if(2033&r)return void g(t,e.dom,n);var o=e.children;if(4&r&&(e=o.$LI),8&r&&(e=o),8192&r){if(2!==e.childFlags){for(var i=0,a=o.length;i<a;++i)x(o[i],t,n);return}e=o}}while(e)}function _(e,t,n){return e.constructor.getDerivedStateFromProps?l(n,e.constructor.getDerivedStateFromProps(t,n)):n}t.Fragment="$F";var E={v:!1},k={componentComparator:null,createVNode:null,renderComplete:null};function S(e,t){e.textContent=t}function C(e,t){return f(e)&&e.event===t.event&&e.data===t.data}function N(e,t){for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e}function A(e,t){return!!c(e)&&(e(t),!0)}t.options=k;function T(e,t,n,r,o,i,a,c){this.childFlags=e,this.children=t,this.className=n,this.dom=null,this.flags=r,this.key=void 0===o?null:o,this.props=void 0===i?null:i,this.ref=void 0===a?null:a,this.type=c}function O(e,t,n,r,o,i,a,c){var u=void 0===o?1:o,s=new T(u,r,n,e,a,i,c,t);return k.createVNode&&k.createVNode(s),0===u&&P(s,s.children),s}function I(e,t){return new T(1,i(e)||!0===e||!1===e?"":e,null,16,t,null,null,null)}function M(e,t,n){var r=O(8192,8192,null,e,t,null,n,null);switch(r.childFlags){case 1:r.children=V(),r.childFlags=2;break;case 16:r.children=[I(e)],r.childFlags=4}return r}function L(e){var t=-16385&e.flags,n=e.props;if(14&t&&!s(n)){var r=n;for(var o in n={},r)n[o]=r[o]}return 0==(8192&t)?new T(e.childFlags,e.children,e.className,t,e.key,n,e.ref,e.type):function(e){var t,n=e.children,r=e.childFlags;if(2===r)t=L(n);else if(12&r){t=[];for(var o=0,i=n.length;o<i;++o)t.push(L(n[o]))}return M(t,r,e.key)}(e)}function V(){return I("",null)}function R(e,t,n,i){for(var c=e.length;n<c;n++){var l=e[n];if(!a(l)){var f=i+"$"+n;if(r(l))R(l,t,0,f);else{if(o(l))l=I(l,f);else{var d=l.key,p=u(d)&&"$"===d[0];(81920&l.flags||p)&&(l=L(l)),l.flags|=65536,p?d.substring(0,i.length)!==i&&(l.key=i+d):s(d)?l.key=f:l.key=i+d}t.push(l)}}}}function P(e,t){var n,i=1;if(a(t))n=t;else if(o(t))i=16,n=t;else if(r(t)){for(var c=t.length,l=0;l<c;++l){var f=t[l];if(a(f)||r(f)){n=n||t.slice(0,l),R(t,n,l,"");break}if(o(f))(n=n||t.slice(0,l)).push(I(f,"$"+l));else{var d=f.key,p=(81920&f.flags)>0,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",j="http://www.w3.org/XML/1998/namespace",F={"xlink:actuate":D,"xlink:arcrole":D,"xlink:href":D,"xlink:role":D,"xlink:show":D,"xlink:title":D,"xlink:type":D,"xml:base":j,"xml:lang":j,"xml:space":j};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<e.length;++a)Q(o,e[a],n);if(c(t)){var s=this.$V,l=s.props||d;t(l,i,!1,s)}}};return Object.defineProperty(n,"wrapped",{configurable:!1,enumerable:!1,value:!0,writable:!1}),n}function ee(e,t,n){var r="$"+t,o=e[r];if(o){if(o[1].wrapped)return;e.removeEventListener(o[0],o[1]),e[r]=null}c(n)&&(e.addEventListener(t,n),e[r]=[t,n])}function te(e){return"checkbox"===e||"radio"===e}var ne=J("onInput",ie),re=J(["onClick","onChange"],ie);function oe(e){e.stopPropagation()}function ie(e,t){var n=e.type,r=e.value,o=e.checked,a=e.multiple,c=e.defaultValue,u=!i(r);n&&n!==t.type&&t.setAttribute("type",n),i(a)||a===t.multiple||(t.multiple=a),i(c)||u||(t.defaultValue=c+""),te(n)?(u&&(t.value=r),i(o)||(t.checked=o)):u&&t.value!==r?(t.defaultValue=r,t.value=r):i(o)||(t.checked=o)}function ae(e,t){if("option"===e.type)!function(e,t){var n=e.props||d,o=e.dom;o.value=n.value,n.value===t||r(t)&&-1!==t.indexOf(n.value)?o.selected=!0:i(t)&&i(n.selected)||(o.selected=n.selected||!1)}(e,t);else{var n=e.children,o=e.flags;if(4&o)ae(n.$LI,t);else if(8&o)ae(n,t);else if(2===e.childFlags)ae(n,t);else if(12&e.childFlags)for(var a=0,c=n.length;a<c;++a)ae(n[a],t)}}oe.wrapped=!0;var ce=J("onChange",ue);function ue(e,t,n,r){var o=Boolean(e.multiple);i(e.multiple)||o===t.multiple||(t.multiple=o);var a=e.selectedIndex;if(-1===a&&(t.selectedIndex=-1),1!==r.childFlags){var c=e.value;"number"==typeof a&&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){we(e),w(e,t)}function we(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;l<f;l++){var p=u[l];U[p]&&H(p,e.dom)}12&a?xe(r):2===a&&we(r)}else r&&(4&n?(c(r.componentWillUnmount)&&r.componentWillUnmount(),me(e.ref),r.$UN=!0,we(r.$LI)):8&n?(!i(t=e.ref)&&c(t.onComponentWillUnmount)&&t.onComponentWillUnmount(b(e,!0),e.props||d),we(r)):1024&n?be(r,e.ref):8192&n&&12&e.childFlags&&xe(r))}function xe(e){for(var t=0,n=e.length;t<n;++t)we(e[t])}function _e(e){e.textContent=""}function Ee(e,t,n){xe(n),8192&t.flags?w(t,e):_e(e)}function ke(e,t,n,r){var o=e&&e.__html||"",a=t&&t.__html||"";o!==a&&(i(a)||function(e,t){var n=document.createElement("i");return n.innerHTML=t,n.innerHTML===e.innerHTML}(r,a)||(s(n)||(12&n.childFlags?xe(n.children):2===n.childFlags&&we(n.children),n.children=null,n.childFlags=1),r.innerHTML=a))}function Se(e,t,n,r,o,a,s){switch(e){case"children":case"childrenType":case"className":case"defaultValue":case"key":case"multiple":case"ref":case"selectedIndex":break;case"autoFocus":r.autofocus=!!n;break;case"allowfullscreen":case"autoplay":case"capture":case"checked":case"controls":case"default":case"disabled":case"hidden":case"indeterminate":case"loop":case"muted":case"novalidate":case"open":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"selected":r[e]=!!n;break;case"defaultChecked":case"value":case"volume":if(a&&"value"===e)break;var l=i(n)?"":n;r[e]!==l&&(r[e]=l);break;case"style":!function(e,t,n){if(i(t))n.removeAttribute("style");else{var r,o,a=n.style;if(u(t))a.cssText=t;else if(i(e)||u(e))for(r in t)o=t[r],a.setProperty(r,o);else{for(r in t)(o=t[r])!==e[r]&&a.setProperty(r,o);for(r in e)i(t[r])&&a.removeProperty(r)}}}(t,n,r);break;case"dangerouslySetInnerHTML":ke(t,n,s,r);break;default:U[e]?function(e,t,n,r){if(c(n))$(e,r)[e]=n;else if(f(n)){if(C(t,n))return;$(e,r)[e]=n}else H(e,r)}(e,t,n,r):111===e.charCodeAt(0)&&110===e.charCodeAt(1)?function(e,t,n,r){if(f(n)){if(C(t,n))return;n=function(e){var t=e.event;return function(n){t(e.data,n)}}(n)}ee(r,p(e),n)}(e,t,n,r):i(n)?r.removeAttribute(e):o&&F[e]?r.setAttributeNS(F[e],e,n):r.setAttribute(e,n)}}function Ce(e,t,n,r,o){var i=!1,a=(448&t)>0;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;a<e.length;++a){var c=e[a];16384&c.flags&&(e[a]=c=L(c)),Te(c,t,n,r,o,i)}}function Le(e,t,n){ye(e,t,n),c(t.componentDidMount)&&n.push(function(e){return function(){e.componentDidMount()}}(t))}function Ve(e,t){var n=e.ref;i(n)||(A(n.onComponentWillMount,e.props||d),c(n.onComponentDidMount)&&t.push(function(e,t){return function(){e.onComponentDidMount(b(t,!0),t.props||d)}}(n,e)))}function Re(e,t,n,r,o,u,f){var p=t.flags|=16384;e.flags!==p||e.type!==t.type||e.key!==t.key||2048&p?16384&e.flags?function(e,t,n,r,o,i){we(e),0!=(t.flags&e.flags&2033)?(Te(t,null,r,o,null,i),function(e,t,n){e.replaceChild(t,n)}(n,t.dom,e.dom)):(Te(t,n,r,o,b(e,!0),i),w(e,n))}(e,t,n,r,o,f):Te(t,n,r,o,u,f):481&p?function(e,t,n,r,o,a){var c,u=t.dom=e.dom,s=e.props,l=t.props,f=!1,p=!1;if(r=r||(32&o)>0,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,w=t.className;e.className!==w&&(i(w)?u.removeAttribute("class"):r?u.setAttribute("class",w):u.className=w);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 x=t.ref,_=e.ref;_!==x&&(me(_),ye(x,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:we(n),S(o,r);break;default:!function(e,t,n,r,o,i){we(e),Me(t,n,r,o,b(e,!0),i),w(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:xe(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)<a?b(t[l],!0):c;h<=p;)16384&(v=t[h]).flags&&(t[h]=v=L(v)),++h,Te(v,n,r,o,f,s)}else if(h>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,w=i-c+1,_=a-c+1,E=new Int32Array(_+1),k=w===r,S=!1,C=0,N=0;if(o<4||(w|_)<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;m<v;)be(e[m++],u);C>c?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<u;++n)if(0!==(t=e[n])){if(r=se[o],e[r]<t){le[n]=r,se[++o]=n;continue}for(i=0,a=o;i<a;)e[se[c=i+a>>1]]<t?i=c+1:a=c;t<e[se[i]]&&(i>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)<o?b(t[g],!0):l,d)):c<0||v!==T[c]?x(h=t[C=v+y],u,(g=C+1)<o?b(t[g],!0):l):c--}else if(N!==_)for(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)<o?b(t[g],!0):l,d))}(e,t,r,i,a,d,p,h,n,o,c,u,s)}(n,r,o,i,a,l,f,c,u,s):function(e,t,n,r,o,i,a,c,u){for(var s,l,f=i>a?a:i,d=0;d<f;++d)s=t[d],l=e[d],16384&s.flags&&(s=t[d]=L(s)),Re(l,s,n,r,o,c,u),e[d]=s;if(i<a)for(d=f;d<a;++d)16384&(s=t[d]).flags&&(s=t[d]=L(s)),Te(s,n,r,o,c,u);else if(i>a)for(d=f;d<i;++d)be(e[d],n)}(n,r,o,i,a,l,f,c,s)}}}function Be(e,t,n,r,o,i,a,u,s){var f=e.state,d=e.props,p=Boolean(e.$N),h=c(e.shouldComponentUpdate);if(p&&(t=_(e,n,t!==f?l(f,t):t)),a||!h||h&&e.shouldComponentUpdate(n,t,o)){!p&&c(e.componentWillUpdate)&&e.componentWillUpdate(n,t,o),e.props=n,e.state=t,e.context=o;var g=null,v=Ne(e,n,o);p&&c(e.getSnapshotBeforeUpdate)&&(g=e.getSnapshotBeforeUpdate(d,f)),Re(e.$LI,v,r,e.$CX,i,u,s),e.$LI=v,c(e.componentDidUpdate)&&function(e,t,n,r,o){o.push((function(){e.componentDidUpdate(t,n,r)}))}(e,d,f,g,s)}else e.props=n,e.state=t,e.context=o}var De=0;function je(e,t,n,r){var o=[],a=t.$V;E.v=!0,i(a)?i(e)||(16384&e.flags&&(e=L(e)),Te(e,t,r,!1,null,o),t.$V=e,a=e):i(e)?(be(a,t),t.$V=null):(16384&e.flags&&(e=L(e)),Re(a,e,t,r,!1,null,o),a=t.$V=e),m(o),E.v=!1,c(n)&&n(),c(k.renderComplete)&&k.renderComplete(a,t)}function Fe(e,t,n,r){void 0===n&&(n=null),void 0===r&&(r=d),je(e,t,n,r)}"undefined"!=typeof document&&window.Node&&(Node.prototype.$EV=null,Node.prototype.$V=null);var Ke=[],ze="undefined"!=typeof Promise?Promise.resolve().then.bind(Promise.resolve()):function(e){window.setTimeout(e,0)},Ye=!1;function Ue(e,t,n,r){var o=e.$PS;if(c(t)&&(t=t(o?l(e.state,o):e.state,e.props,e.context)),i(o))e.$PS=t;else for(var a in t)o[a]=t[a];if(e.$BR)c(n)&&e.$L.push(n.bind(e));else{if(!E.v&&0===Ke.length)return We(e,r),void(c(n)&&n.call(e));if(-1===Ke.indexOf(e)&&Ke.push(e),Ye||(Ye=!0,ze(He)),c(n)){var u=e.$QU;u||(u=e.$QU=[]),u.push(n)}}}function $e(e){for(var t=e.$QU,n=0;n<t.length;++n)t[n].call(e);e.$QU=null}function He(){var e;for(Ye=!1;e=Ke.shift();)e.$UN||(We(e,!1),e.$QU&&$e(e))}function We(e,t){if(t||!e.$BR){var n=e.$PS;e.$PS=null;var r=[];E.v=!0,Be(e,l(e.state,n),e.props,b(e.$LI,!0).parentNode,e.context,e.$SVG,t,null,r),m(r),E.v=!1}else e.state=e.$PS,e.$PS=null}var qe=function(e,t){this.state=null,this.$BR=!1,this.$BS=!0,this.$PS=null,this.$LI=null,this.$UN=!1,this.$CX=null,this.$QU=null,this.$N=!1,this.$L=null,this.$SVG=!1,this.props=e||d,this.context=t||d};t.Component=qe,qe.prototype.forceUpdate=function(e){this.$UN||Ue(this,{},e,!0)},qe.prototype.setState=function(e,t){this.$UN||this.$BS||Ue(this,e,t,!1)},qe.prototype.render=function(e,t,n){return null};t.version="7.4.2"},,,,,,,,,,,function(e,t,n){"use strict";(function(e){var n;n=void 0!==e?e:void 0,t.loadCSS=function(e,t,r,o){var i,a=n.document,c=a.createElement("link");if(t)i=t;else{var u=(a.body||a.getElementsByTagName("head")[0]).childNodes;i=u[u.length-1]}var s=a.styleSheets;if(o)for(var l in o)o.hasOwnProperty(l)&&c.setAttribute(l,o[l]);c.rel="stylesheet",c.href=e,c.media="only x",function p(e){if(a.body)return e();setTimeout((function(){p(e)}))}((function(){i.parentNode.insertBefore(c,t?i:i.nextSibling)}));var f=function h(e){for(var t=c.href,n=s.length;n--;)if(s[n].href===t)return e();setTimeout((function(){h(e)}))};function d(){c.addEventListener&&c.removeEventListener("load",d),c.media=r||"all"}return c.addEventListener&&c.addEventListener("load",d),c.onloadcssdefined=f,f(d),c}}).call(this,n(80))},function(e,t,n){"use strict";(function(e,t){!function(e,n){if(!e.setImmediate){var r,o,i,a,c,u=1,s={},l=!1,f=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?r=function(e){t.nextTick((function(){h(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((i=new MessageChannel).port1.onmessage=function(e){h(e.data)},r=function(e){i.port2.postMessage(e)}):f&&"onreadystatechange"in f.createElement("script")?(o=f.documentElement,r=function(e){var t=f.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):r=function(e){setTimeout(h,0,e)}:(a="setImmediate$"+Math.random()+"$",c=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&h(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",c,!1):e.attachEvent("onmessage",c),r=function(t){e.postMessage(a+t,"*")}),d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var o={callback:e,args:t};return s[u]=o,r(u),u++},d.clearImmediate=p}function p(e){delete s[e]}function h(e){if(l)setTimeout(h,0,e);else{var t=s[e];if(t){l=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(void 0,n)}}(t)}finally{p(e),l=!1}}}}}("undefined"==typeof self?void 0===e?void 0:e:self)}).call(this,n(80),n(460))},function(e,t,n){"use strict";var r,o,i=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function u(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:a}catch(e){r=a}try{o="function"==typeof clearTimeout?clearTimeout:c}catch(e){o=c}}();var s,l=[],f=!1,d=-1;function p(){f&&s&&(f=!1,s.length?l=s.concat(l):d=-1,l.length&&h())}function h(){if(!f){var e=u(p);f=!0;for(var t=l.length;t;){for(s=l,l=[];++d<t;)s&&s[d].run();d=-1,t=l.length}s=null,f=!1,function(e){if(o===clearTimeout)return clearTimeout(e);if((o===c||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(e);try{o(e)}catch(t){try{return o.call(null,e)}catch(t){return o.call(this,e)}}}(e)}}function g(e,t){this.fun=e,this.array=t}function v(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new g(e,t)),1!==l.length||f||u(h)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(e,t,n){"use strict";t.__esModule=!0,t.useDebug=void 0;var r=n(22),o=n(190);t.useDebug=function(e){return(0,r.useSelector)(e,o.selectDebug)}},function(e,t,n){"use strict";(function(e){t.__esModule=!0,t.KitchenSink=void 0;var r=n(0),o=n(2),i=n(1),a=n(38),c=n(3),u=(0,n(25).createLogger)("KitchenSink"),s=["red","orange","yellow","olive","green","teal","blue","violet","purple","pink","brown","grey"],l=["good","average","bad","black","white"],f=[{title:"Button",component:function(){return d}},{title:"Box",component:function(){return p}},{title:"Flex & Sections",component:function(){return h}},{title:"ProgressBar",component:function(){return g}},{title:"Tabs",component:function(){return v}},{title:"Tooltip",component:function(){return m}},{title:"Input / Control",component:function(){return y}},{title:"Collapsible",component:function(){return b}},{title:"BlockQuote",component:function(){return x}},{title:"ByondUi",component:function(){return _}},{title:"Themes",component:function(){return E}},{title:"Storage",component:function(){return k}}];t.KitchenSink=function(e,t){var n=e.panel,a=(0,o.useLocalState)(t,"kitchenSinkTheme")[0],u=(0,o.useLocalState)(t,"pageIndex",0),s=u[0],l=u[1],d=f[s].component(),p=n?c.Pane:c.Window;return(0,r.createComponentVNode)(2,p,{title:"Kitchen Sink",width:600,height:500,theme:a,resizable:!0,children:(0,r.createComponentVNode)(2,i.Flex,{height:"100%",children:[(0,r.createComponentVNode)(2,i.Flex.Item,{m:1,mr:0,children:(0,r.createComponentVNode)(2,i.Section,{fill:!0,fitted:!0,children:(0,r.createComponentVNode)(2,i.Tabs,{vertical:!0,children:f.map((function(e,t){return(0,r.createComponentVNode)(2,i.Tabs.Tab,{color:"transparent",selected:t===s,onClick:function(){return l(t)},children:e.title},t)}))})})}),(0,r.createComponentVNode)(2,i.Flex.Item,{position:"relative",grow:1,children:(0,r.createComponentVNode)(2,p.Content,{scrollable:!0,children:(0,r.createComponentVNode)(2,d)})})]})})};var d=function(e){return(0,r.createComponentVNode)(2,i.Section,{children:[(0,r.createComponentVNode)(2,i.Box,{mb:1,children:[(0,r.createComponentVNode)(2,i.Button,{content:"Simple"}),(0,r.createComponentVNode)(2,i.Button,{selected:!0,content:"Selected"}),(0,r.createComponentVNode)(2,i.Button,{altSelected:!0,content:"Alt Selected"}),(0,r.createComponentVNode)(2,i.Button,{disabled:!0,content:"Disabled"}),(0,r.createComponentVNode)(2,i.Button,{color:"transparent",content:"Transparent"}),(0,r.createComponentVNode)(2,i.Button,{icon:"cog",content:"Icon"}),(0,r.createComponentVNode)(2,i.Button,{icon:"power-off"}),(0,r.createComponentVNode)(2,i.Button,{fluid:!0,content:"Fluid"}),(0,r.createComponentVNode)(2,i.Button,{my:1,lineHeight:2,minWidth:15,textAlign:"center",content:"With Box props"})]}),(0,r.createComponentVNode)(2,i.Box,{mb:1,children:[l.map((function(e){return(0,r.createComponentVNode)(2,i.Button,{color:e,content:e},e)})),(0,r.createVNode)(1,"br"),s.map((function(e){return(0,r.createComponentVNode)(2,i.Button,{color:e,content:e},e)})),(0,r.createVNode)(1,"br"),s.map((function(e){return(0,r.createComponentVNode)(2,i.Box,{inline:!0,mx:"7px",color:e,children:e},e)}))]})]})},p=function(e){return(0,r.createComponentVNode)(2,i.Section,{children:[(0,r.createComponentVNode)(2,i.Box,{bold:!0,children:"bold"}),(0,r.createComponentVNode)(2,i.Box,{italic:!0,children:"italic"}),(0,r.createComponentVNode)(2,i.Box,{opacity:.5,children:"opacity 0.5"}),(0,r.createComponentVNode)(2,i.Box,{opacity:.25,children:"opacity 0.25"}),(0,r.createComponentVNode)(2,i.Box,{m:2,children:"m: 2"}),(0,r.createComponentVNode)(2,i.Box,{textAlign:"left",children:"left"}),(0,r.createComponentVNode)(2,i.Box,{textAlign:"center",children:"center"}),(0,r.createComponentVNode)(2,i.Box,{textAlign:"right",children:"right"})]})},h=function(e,t){var n=(0,o.useLocalState)(t,"fs_grow",1),a=n[0],c=n[1],u=(0,o.useLocalState)(t,"fs_direction","column"),s=u[0],l=u[1],f=(0,o.useLocalState)(t,"fs_fill",!0),d=f[0],p=f[1],h=(0,o.useLocalState)(t,"fs_title",!0),g=h[0],v=h[1];return(0,r.createComponentVNode)(2,i.Flex,{height:"100%",direction:"column",children:[(0,r.createComponentVNode)(2,i.Flex.Item,{mb:1,children:(0,r.createComponentVNode)(2,i.Section,{children:[(0,r.createComponentVNode)(2,i.Button,{fluid:!0,onClick:function(){return l("column"===s?"row":"column")},children:'Flex direction="'+s+'"'}),(0,r.createComponentVNode)(2,i.Button,{fluid:!0,onClick:function(){return c(Number(!a))},children:"Flex.Item grow={"+a+"}"}),(0,r.createComponentVNode)(2,i.Button,{fluid:!0,onClick:function(){return p(!d)},children:"Section fill={"+String(d)+"}"}),(0,r.createComponentVNode)(2,i.Button,{fluid:!0,selected:g,onClick:function(){return v(!g)},children:"Section title"})]})}),(0,r.createComponentVNode)(2,i.Flex.Item,{grow:1,children:(0,r.createComponentVNode)(2,i.Flex,{height:"100%",direction:s,children:[(0,r.createComponentVNode)(2,i.Flex.Item,{mr:"row"===s&&1,mb:"column"===s&&1,grow:a,children:(0,r.createComponentVNode)(2,i.Section,{title:g&&"Section 1",fill:d,children:"Content"})}),(0,r.createComponentVNode)(2,i.Flex.Item,{grow:a,children:(0,r.createComponentVNode)(2,i.Section,{title:g&&"Section 2",fill:d,children:"Content"})})]})})]})},g=function(e,t){var n=(0,o.useLocalState)(t,"progress",.5),a=n[0],c=n[1];return(0,r.createComponentVNode)(2,i.Section,{children:[(0,r.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[.5,Infinity],bad:[-Infinity,.1],average:[0,.5]},minValue:-1,maxValue:1,value:a,children:["Value: ",Number(a).toFixed(1)]}),(0,r.createComponentVNode)(2,i.Box,{mt:1,children:[(0,r.createComponentVNode)(2,i.Button,{content:"-0.1",onClick:function(){return c(a-.1)}}),(0,r.createComponentVNode)(2,i.Button,{content:"+0.1",onClick:function(){return c(a+.1)}})]})]})},v=function(e,t){var n=(0,o.useLocalState)(t,"tabIndex",0),a=n[0],c=n[1],u=(0,o.useLocalState)(t,"tabProps",{}),s=u[0],l=u[1];return(0,r.createFragment)([(0,r.createComponentVNode)(2,i.Section,{children:[(0,r.createComponentVNode)(2,i.Button.Checkbox,{inline:!0,content:"vertical",checked:s.vertical,onClick:function(){return l(Object.assign({},s,{vertical:!s.vertical}))}}),(0,r.createComponentVNode)(2,i.Button.Checkbox,{inline:!0,content:"leftSlot",checked:s.leftSlot,onClick:function(){return l(Object.assign({},s,{leftSlot:!s.leftSlot}))}}),(0,r.createComponentVNode)(2,i.Button.Checkbox,{inline:!0,content:"rightSlot",checked:s.rightSlot,onClick:function(){return l(Object.assign({},s,{rightSlot:!s.rightSlot}))}}),(0,r.createComponentVNode)(2,i.Button.Checkbox,{inline:!0,content:"icon",checked:s.icon,onClick:function(){return l(Object.assign({},s,{icon:!s.icon}))}}),(0,r.createComponentVNode)(2,i.Button.Checkbox,{inline:!0,content:"fluid",checked:s.fluid,onClick:function(){return l(Object.assign({},s,{fluid:!s.fluid}))}}),(0,r.createComponentVNode)(2,i.Button.Checkbox,{inline:!0,content:"left aligned",checked:s.leftAligned,onClick:function(){return l(Object.assign({},s,{leftAligned:!s.leftAligned}))}})]}),(0,r.createComponentVNode)(2,i.Section,{fitted:!0,children:(0,r.createComponentVNode)(2,i.Tabs,{vertical:s.vertical,fluid:s.fluid,textAlign:s.leftAligned&&"left",children:["Tab #1","Tab #2","Tab #3","Tab #4"].map((function(e,t){return(0,r.createComponentVNode)(2,i.Tabs.Tab,{selected:t===a,icon:s.icon&&"info-circle",leftSlot:s.leftSlot&&(0,r.createComponentVNode)(2,i.Button,{circular:!0,compact:!0,color:"transparent",icon:"times"}),rightSlot:s.rightSlot&&(0,r.createComponentVNode)(2,i.Button,{circular:!0,compact:!0,color:"transparent",icon:"times"}),onClick:function(){return c(t)},children:e},t)}))})})],4)},m=function(e){return(0,r.createComponentVNode)(2,i.Section,{children:[(0,r.createComponentVNode)(2,i.Box,{children:[(0,r.createComponentVNode)(2,i.Box,{inline:!0,position:"relative",mr:1,children:["Box (hover me).",(0,r.createComponentVNode)(2,i.Tooltip,{content:"Tooltip text."})]}),(0,r.createComponentVNode)(2,i.Button,{tooltip:"Tooltip text.",content:"Button"})]}),(0,r.createComponentVNode)(2,i.Box,{mt:1,children:["top","left","right","bottom","bottom-left","bottom-right"].map((function(e){return(0,r.createComponentVNode)(2,i.Button,{color:"transparent",tooltip:"Tooltip text.",tooltipPosition:e,content:e},e)}))})]})},y=function(e,t){var n=(0,o.useLocalState)(t,"number",0),a=n[0],c=n[1],u=(0,o.useLocalState)(t,"text","Sample text"),s=u[0],l=u[1];return(0,r.createComponentVNode)(2,i.Section,{children:(0,r.createComponentVNode)(2,i.LabeledList,{children:[(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Input (onChange)",children:(0,r.createComponentVNode)(2,i.Input,{value:s,onChange:function(e,t){return l(t)}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Input (onInput)",children:(0,r.createComponentVNode)(2,i.Input,{value:s,onInput:function(e,t){return l(t)}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"NumberInput (onChange)",children:(0,r.createComponentVNode)(2,i.NumberInput,{animated:!0,width:"40px",step:1,stepPixelSize:5,value:a,minValue:-100,maxValue:100,onChange:function(e,t){return c(t)}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"NumberInput (onDrag)",children:(0,r.createComponentVNode)(2,i.NumberInput,{animated:!0,width:"40px",step:1,stepPixelSize:5,value:a,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Slider (onDrag)",children:(0,r.createComponentVNode)(2,i.Slider,{step:1,stepPixelSize:5,value:a,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Knob (onDrag)",children:[(0,r.createComponentVNode)(2,i.Knob,{inline:!0,size:1,step:1,stepPixelSize:2,value:a,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}}),(0,r.createComponentVNode)(2,i.Knob,{ml:1,inline:!0,bipolar:!0,size:1,step:1,stepPixelSize:2,value:a,minValue:-100,maxValue:100,onDrag:function(e,t){return c(t)}})]}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Rotating Icon",children:(0,r.createComponentVNode)(2,i.Box,{inline:!0,position:"relative",children:(0,r.createComponentVNode)(2,i.DraggableControl,{value:a,minValue:-100,maxValue:100,dragMatrix:[0,-1],step:1,stepPixelSize:5,onDrag:function(e,t){return c(t)},children:function(e){return(0,r.createComponentVNode)(2,i.Box,{onMouseDown:e.handleDragStart,children:[(0,r.createComponentVNode)(2,i.Icon,{size:4,color:"yellow",name:"times",rotation:4*e.displayValue}),e.inputElement]})}})})})]})})},b=function(e){return(0,r.createComponentVNode)(2,i.Section,{children:(0,r.createComponentVNode)(2,i.Collapsible,{title:"Collapsible Demo",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"cog"}),children:(0,r.createComponentVNode)(2,w)})})},w=function(e){return(0,r.normalizeProps)((0,r.createComponentVNode)(2,i.Box,Object.assign({},e,{children:[(0,r.createComponentVNode)(2,i.Box,{italic:!0,children:"Jackdaws love my big sphinx of quartz."}),(0,r.createComponentVNode)(2,i.Box,{mt:1,bold:!0,children:"The wide electrification of the southern provinces will give a powerful impetus to the growth of agriculture."})]})))},x=function(e){return(0,r.createComponentVNode)(2,i.Section,{children:(0,r.createComponentVNode)(2,i.BlockQuote,{children:(0,r.createComponentVNode)(2,w)})})},_=function(t,n){(0,o.useBackend)(n).config;var a=(0,o.useLocalState)(n,"byondUiEvalCode","Byond.winset('"+window.__windowId__+"', {\n 'is-visible': true,\n})"),c=a[0],s=a[1];return(0,r.createFragment)([(0,r.createComponentVNode)(2,i.Section,{title:"Button",children:(0,r.createComponentVNode)(2,i.ByondUi,{params:{type:"button",text:"Button"}})}),(0,r.createComponentVNode)(2,i.Section,{title:"Make BYOND calls",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"chevron-right",onClick:function(){return e((function(){try{var e=new Function("return ("+c+")")();e&&e.then?(u.log("Promise"),e.then(u.log)):u.log(e)}catch(t){u.log(t)}}))},children:"Evaluate"}),children:(0,r.createComponentVNode)(2,i.Box,{as:"textarea",width:"100%",height:"10em",onChange:function(e){return s(e.target.value)},children:c})})],4)},E=function(e,t){var n=(0,o.useLocalState)(t,"kitchenSinkTheme"),a=n[0],c=n[1];return(0,r.createComponentVNode)(2,i.Section,{children:(0,r.createComponentVNode)(2,i.LabeledList,{children:(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Use theme",children:(0,r.createComponentVNode)(2,i.Input,{placeholder:"theme_name",value:a,onInput:function(e,t){return c(t)}})})})})},k=function(e,t){return window.localStorage?(0,r.createComponentVNode)(2,i.Section,{title:"Local Storage",buttons:(0,r.createComponentVNode)(2,i.Button,{icon:"recycle",onClick:function(){localStorage.clear()},children:"Clear"}),children:(0,r.createComponentVNode)(2,i.LabeledList,{children:[(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Keys in use",children:localStorage.length}),(0,r.createComponentVNode)(2,i.LabeledList.Item,{label:"Remaining space",children:(0,a.formatSiUnit)(localStorage.remainingSpace,0,"B")})]})}):(0,r.createComponentVNode)(2,i.NoticeBox,{children:"Local storage is not available."})}}).call(this,n(101).setImmediate)},function(e,t,n){"use strict";t.__esModule=!0,t.BlockQuote=void 0;var r=n(0),o=n(6),i=n(17);t.BlockQuote=function(e){var t=e.className,n=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(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(25),c=n(17);function u(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var s=(0,a.createLogger)("ByondUi"),l=[];window.addEventListener("beforeunload",(function(){for(var e=0;e<l.length;e++){var t=l[e];"string"==typeof t&&(s.log("unmounting '"+t+"' (beforeunload)"),l[e]=null,Byond.winset(t,{parent:""}))}}));var f=function(e){var t,n;function a(t){var n,o;return(o=e.call(this,t)||this).containerRef=(0,r.createRef)(),o.byondUiElement=function(e){var t=l.length;l.push(null);var n=e||"byondui_"+t;return s.log("allocated '"+n+"'"),{render:function(e){s.log("rendering '"+n+"'"),l[t]=n,Byond.winset(n,e)},unmount:function(){s.log("unmounting '"+n+"'"),l[t]=null,Byond.winset(n,{parent:""})}}}(null==(n=t.params)?void 0:n.id),o.handleResize=(0,i.debounce)((function(){o.forceUpdate()}),100),o}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var f=a.prototype;return f.shouldComponentUpdate=function(e){var t=this.props,n=t.params,r=void 0===n?{}:n,i=u(t,["params"]),a=e.params,c=void 0===a?{}:a,s=u(e,["params"]);return(0,o.shallowDiffers)(r,c)||(0,o.shallowDiffers)(i,s)},f.componentDidMount=function(){Byond.IS_LTE_IE10||(window.addEventListener("resize",this.handleResize),this.componentDidUpdate(),this.handleResize())},f.componentDidUpdate=function(){if(!Byond.IS_LTE_IE10){var e,t,n=this.props.params,r=void 0===n?{}:n,o=(e=this.containerRef.current,{pos:[(t=e.getBoundingClientRect()).left,t.top],size:[t.right-t.left,t.bottom-t.top]});s.debug("bounding box",o),this.byondUiElement.render(Object.assign({parent:window.__windowId__},r,{pos:o.pos[0]+","+o.pos[1],size:o.size[0]+"x"+o.size[1]}))}},f.componentWillUnmount=function(){Byond.IS_LTE_IE10||(window.removeEventListener("resize",this.handleResize),this.byondUiElement.unmount())},f.render=function(){var e=this.props,t=(e.params,u(e,["params"])),n=(0,c.computeBoxProps)(t);return(0,r.normalizeProps)((0,r.createVNode)(1,"div",null,(0,r.createVNode)(1,"div",null,null,1,{style:{"min-height":"22px"}}),0,Object.assign({},n),null,this.containerRef))},a}(r.Component);t.ByondUi=f},function(e,t,n){"use strict";t.__esModule=!0,t.sleep=t.debounce=void 0;t.debounce=function(e,t,n){var r;return void 0===n&&(n=!1),function(){for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];var c=function(){r=null,n||e.apply(void 0,i)},u=n&&!r;clearTimeout(r),r=setTimeout(c,t),u&&e.apply(void 0,i)}};t.sleep=function(e){return new Promise((function(t){return setTimeout(t,e)}))}},function(e,t,n){"use strict";t.__esModule=!0,t.Chart=void 0;var r=n(0),o=n(15),i=n(6),a=n(17);var c=function(e){var t,n;function i(t){var n;return(n=e.call(this,t)||this).ref=(0,r.createRef)(),n.state={viewBox:[600,200]},n.handleResize=function(){var e=n.ref.current;n.setState({viewBox:[e.offsetWidth,e.offsetHeight]})},n}n=e,(t=i).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var c=i.prototype;return c.componentDidMount=function(){window.addEventListener("resize",this.handleResize),this.handleResize()},c.componentWillUnmount=function(){window.removeEventListener("resize",this.handleResize)},c.render=function(){var e=this,t=this.props,n=t.data,i=void 0===n?[]:n,c=t.rangeX,u=t.rangeY,s=t.fillColor,l=void 0===s?"none":s,f=t.strokeColor,d=void 0===f?"#ffffff":f,p=t.strokeWidth,h=void 0===p?2:p,g=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=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 w=function(e){for(var t="",n=0;n<e.length;n++){var r=e[n];t+=r[0]+","+r[1]+" "}return t}(m);return(0,r.normalizeProps)((0,r.createComponentVNode)(2,a.Box,Object.assign({position:"relative"},g,{children:function(t){return(0,r.normalizeProps)((0,r.createVNode)(1,"div",null,(0,r.createVNode)(32,"svg",null,(0,r.createVNode)(32,"polyline",null,null,1,{transform:"scale(1, -1) translate(0, -"+v[1]+")",fill:l,stroke:d,"stroke-width":h,points:w}),2,{viewBox:"0 0 "+v[0]+" "+v[1],preserveAspectRatio:"none",style:{position:"absolute",top:0,left:0,right:0,bottom:0,overflow:"hidden"}}),2,Object.assign({},t),null,e.ref))}})))},i}(r.Component);c.defaultHooks=i.pureComponentHooks;var u={Line:Byond.IS_LTE_IE8?function(e){return null}:c};t.Chart=u},function(e,t,n){"use strict";t.__esModule=!0,t.Collapsible=void 0;var r=n(0),o=n(17),i=n(191);var a=function(e){var t,n;function a(t){var n;n=e.call(this,t)||this;var r=t.open;return n.state={open:r||!1},n}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.prototype.render=function(){var e=this,t=this.props,n=this.state.open,a=t.children,c=t.color,u=void 0===c?"default":c,s=t.title,l=t.buttons,f=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(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<i.length;r++)n=i[r],t.indexOf(n)>=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(104);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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(11),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,w=e.fillValue,x=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<i.length;r++)n=i[r],t.indexOf(n)>=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!=w?w:c,l,s),h=(0,o.scale)(c,l,s),g=x||(0,o.keyOfMatchingRange)(null!=w?w: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<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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(11),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<i.length;r++)n=i[r],t.indexOf(n)>=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<i.length;r++)n=i[r],t.indexOf(n)>=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(11),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,w=e.color,x=e.ranges,_=void 0===x?{}:x,E=e.children,k=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=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=w||(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<i.length;r++)n=i[r],t.indexOf(n)>=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(104);function c(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=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(11),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,w=y.PC_batteryicon,x=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)})}),!!x&&w&&(0,r.createComponentVNode)(2,a.Box,{inline:!0,mr:1,children:[w&&(0,r.createVNode)(1,"img","NtosHeader__icon",null,1,{src:(0,o.resolveAsset)(w)}),_&&_]}),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<i.length;r++)n=i[r],t.indexOf(n)>=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.shift&&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.keys,o=Object.freeze,i=Object.seal,a="undefined"!=typeof Reflect&&Reflect,c=a.apply,u=a.construct;c||(c=function(e,t,n){return e.apply(t,n)}),o||(o=function(e){return e}),i||(i=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);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(t))))});var s=E(Array.prototype.forEach),l=E(Array.prototype.indexOf),f=E(Array.prototype.join),d=E(Array.prototype.pop),p=E(Array.prototype.push),h=E(Array.prototype.slice),g=E(String.prototype.toLowerCase),v=E(String.prototype.match),m=E(String.prototype.replace),y=E(String.prototype.indexOf),b=E(String.prototype.trim),w=E(RegExp.prototype.test),x=k(RegExp),_=k(TypeError);function E(e){return function(t){for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return c(e,t,r)}}function k(e){return function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return u(e,n)}}function S(e,r){t&&t(e,null);for(var o=r.length;o--;){var i=r[o];if("string"==typeof i){var a=g(i);a!==i&&(n(r)||(r[o]=a),i=a)}e[i]=!0}return e}function C(t){var n={},r=void 0;for(r in t)c(e,t,[r])&&(n[r]=t[r]);return n}var N=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),A=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","audio","canvas","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","video","view","vkern"]),T=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),O=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),I=o(["#text"]),M=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns"]),L=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),V=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),R=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),P=i(/\{\{[\s\S]*|[\s\S]*\}\}/gm),B=i(/<%[\s\S]*|[\s\S]*%>/gm),D=i(/^data-[\-\w.\u00B7-\uFFFF]/),j=i(/^aria-[\-\w]+$/),F=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),K=i(/^(?:\w+script|data):/i),z=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g),Y="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 U(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var $=function(){return"undefined"==typeof window?null:window},H=function(e,t){if("object"!==(void 0===e?"undefined":Y(e))||"function"!=typeof e.createPolicy)return null;var n=null;t.currentScript&&t.currentScript.hasAttribute("data-tt-policy-suffix")&&(n=t.currentScript.getAttribute("data-tt-policy-suffix"));var r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:function(e){return e}})}catch(o){return null}};return function W(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:$(),t=function(e){return W(e)};if(t.version="2.0.12",t.removed=[],!e||!e.document||9!==e.document.nodeType)return t.isSupported=!1,t;var n=e.document,i=!1,a=e.document,c=e.DocumentFragment,u=e.HTMLTemplateElement,E=e.Node,k=e.NodeFilter,q=e.NamedNodeMap,G=q===undefined?e.NamedNodeMap||e.MozNamedAttrMap:q,X=e.Text,Z=e.Comment,Q=e.DOMParser,J=e.trustedTypes;if("function"==typeof u){var ee=a.createElement("template");ee.content&&ee.content.ownerDocument&&(a=ee.content.ownerDocument)}var te=H(J,n),ne=te&&Ve?te.createHTML(""):"",re=a,oe=re.implementation,ie=re.createNodeIterator,ae=re.getElementsByTagName,ce=re.createDocumentFragment,ue=n.importNode,se={};t.isSupported=oe&&"undefined"!=typeof oe.createHTMLDocument&&9!==a.documentMode;var le=P,fe=B,de=D,pe=j,he=K,ge=z,ve=F,me=null,ye=S({},[].concat(U(N),U(A),U(T),U(O),U(I))),be=null,we=S({},[].concat(U(M),U(L),U(V),U(R))),xe=null,_e=null,Ee=!0,ke=!0,Se=!1,Ce=!1,Ne=!1,Ae=!1,Te=!1,Oe=!1,Ie=!1,Me=!1,Le=!1,Ve=!1,Re=!0,Pe=!0,Be=!1,De={},je=S({},["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"]),Fe=null,Ke=S({},["audio","video","img","source","image","track"]),ze=null,Ye=S({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]),Ue=null,$e=a.createElement("form"),He=function(e){Ue&&Ue===e||(e&&"object"===(void 0===e?"undefined":Y(e))||(e={}),me="ALLOWED_TAGS"in e?S({},e.ALLOWED_TAGS):ye,be="ALLOWED_ATTR"in e?S({},e.ALLOWED_ATTR):we,ze="ADD_URI_SAFE_ATTR"in e?S(C(Ye),e.ADD_URI_SAFE_ATTR):Ye,Fe="ADD_DATA_URI_TAGS"in e?S(C(Ke),e.ADD_DATA_URI_TAGS):Ke,xe="FORBID_TAGS"in e?S({},e.FORBID_TAGS):{},_e="FORBID_ATTR"in e?S({},e.FORBID_ATTR):{},De="USE_PROFILES"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,ke=!1!==e.ALLOW_DATA_ATTR,Se=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=e.SAFE_FOR_JQUERY||!1,Ne=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Ie=e.RETURN_DOM||!1,Me=e.RETURN_DOM_FRAGMENT||!1,Le=e.RETURN_DOM_IMPORT||!1,Ve=e.RETURN_TRUSTED_TYPE||!1,Oe=e.FORCE_BODY||!1,Re=!1!==e.SANITIZE_DOM,Pe=!1!==e.KEEP_CONTENT,Be=e.IN_PLACE||!1,ve=e.ALLOWED_URI_REGEXP||ve,Ne&&(ke=!1),Me&&(Ie=!0),De&&(me=S({},[].concat(U(I))),be=[],!0===De.html&&(S(me,N),S(be,M)),!0===De.svg&&(S(me,A),S(be,L),S(be,R)),!0===De.svgFilters&&(S(me,T),S(be,L),S(be,R)),!0===De.mathMl&&(S(me,O),S(be,V),S(be,R))),e.ADD_TAGS&&(me===ye&&(me=C(me)),S(me,e.ADD_TAGS)),e.ADD_ATTR&&(be===we&&(be=C(be)),S(be,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&S(ze,e.ADD_URI_SAFE_ATTR),Pe&&(me["#text"]=!0),Ae&&S(me,["html","head","body"]),me.table&&(S(me,["tbody"]),delete xe.tbody),o&&o(e),Ue=e)},We=function(e){p(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(n){e.outerHTML=ne}},qe=function(e,n){try{p(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(r){p(t.removed,{attribute:null,from:n})}n.removeAttribute(e)},Ge=function(e){var t=void 0,n=void 0;if(Oe)e="<remove></remove>"+e;else{var r=v(e,/^[\r\n\t ]+/);n=r&&r[0]}var o=te?te.createHTML(e):e;try{t=(new Q).parseFromString(o,"text/html")}catch(u){}if(i&&S(xe,["title"]),!t||!t.documentElement){var c=(t=oe.createHTMLDocument("")).body;c.parentNode.removeChild(c.parentNode.firstElementChild),c.outerHTML=o}return e&&n&&t.body.insertBefore(a.createTextNode(n),t.body.childNodes[0]||null),ae.call(t,Ae?"html":"body")[0]};t.isSupported&&function(){try{var e=Ge("<x/><title></title><img>");w(/<\/title/,e.querySelector("title").innerHTML)&&(i=!0)}catch(t){}}();var Xe=function(e){return ie.call(e.ownerDocument||e,e,k.SHOW_ELEMENT|k.SHOW_COMMENT|k.SHOW_TEXT,(function(){return k.FILTER_ACCEPT}),!1)},Ze=function(e){return!(e instanceof X||e instanceof Z||"string"==typeof e.nodeName&&"string"==typeof e.textContent&&"function"==typeof e.removeChild&&e.attributes instanceof G&&"function"==typeof e.removeAttribute&&"function"==typeof e.setAttribute&&"string"==typeof e.namespaceURI)},Qe=function(e){return"object"===(void 0===E?"undefined":Y(E))?e instanceof E:e&&"object"===(void 0===e?"undefined":Y(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},Je=function(e,n,r){se[e]&&s(se[e],(function(e){e.call(t,n,r,Ue)}))},et=function(e){var n=void 0;if(Je("beforeSanitizeElements",e,null),Ze(e))return We(e),!0;var r=g(e.nodeName);if(Je("uponSanitizeElement",e,{tagName:r,allowedTags:me}),("svg"===r||"math"===r)&&0!==e.querySelectorAll("p, br").length)return We(e),!0;if(!me[r]||xe[r]){if(Pe&&!je[r]&&"function"==typeof e.insertAdjacentHTML)try{var o=e.innerHTML;e.insertAdjacentHTML("AfterEnd",te?te.createHTML(o):o)}catch(i){}return We(e),!0}return"noscript"===r&&w(/<\/noscript/i,e.innerHTML)||"noembed"===r&&w(/<\/noembed/i,e.innerHTML)?(We(e),!0):(!Ce||e.firstElementChild||e.content&&e.content.firstElementChild||!w(/</g,e.textContent)||(p(t.removed,{element:e.cloneNode()}),e.innerHTML?e.innerHTML=m(e.innerHTML,/</g,"<"):e.innerHTML=m(e.textContent,/</g,"<")),Ne&&3===e.nodeType&&(n=e.textContent,n=m(n,le," "),n=m(n,fe," "),e.textContent!==n&&(p(t.removed,{element:e.cloneNode()}),e.textContent=n)),Je("afterSanitizeElements",e,null),!1)},tt=function(e,t,n){if(Re&&("id"===t||"name"===t)&&(n in a||n in $e))return!1;if(ke&&w(de,t));else if(Ee&&w(pe,t));else{if(!be[t]||_e[t])return!1;if(ze[t]);else if(w(ve,m(n,ge,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Fe[e])if(Se&&!w(he,m(n,ge,"")));else if(n)return!1}return!0},nt=function(e){var n=void 0,o=void 0,i=void 0,a=void 0,c=void 0;Je("beforeSanitizeAttributes",e,null);var u=e.attributes;if(u){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:be};for(c=u.length;c--;){var p=n=u[c],v=p.name,y=p.namespaceURI;if(o=b(n.value),i=g(v),s.attrName=i,s.attrValue=o,s.keepAttr=!0,s.forceKeepAttr=undefined,Je("uponSanitizeAttribute",e,s),o=s.attrValue,!s.forceKeepAttr){if("name"===i&&"IMG"===e.nodeName&&u.id)a=u.id,u=h(u,[]),qe("id",e),qe(v,e),l(u,a)>c&&e.setAttribute("id",a.value);else{if("INPUT"===e.nodeName&&"type"===i&&"file"===o&&s.keepAttr&&(be[i]||!_e[i]))continue;"id"===v&&e.setAttribute(v,""),qe(v,e)}if(s.keepAttr)if(Ce&&w(/\/>/i,o))qe(v,e);else if(w(/svg|math/i,e.namespaceURI)&&w(x("</("+f(r(je),"|")+")","i"),o))qe(v,e);else{Ne&&(o=m(o,le," "),o=m(o,fe," "));var _=e.nodeName.toLowerCase();if(tt(_,i,o))try{y?e.setAttributeNS(y,v,o):e.setAttribute(v,o),d(t.removed)}catch(E){}}}}Je("afterSanitizeAttributes",e,null)}},rt=function ot(e){var t=void 0,n=Xe(e);for(Je("beforeSanitizeShadowDOM",e,null);t=n.nextNode();)Je("uponSanitizeShadowNode",t,null),et(t)||(t.content instanceof c&&ot(t.content),nt(t));Je("afterSanitizeShadowDOM",e,null)};return t.sanitize=function(r,o){var i=void 0,a=void 0,u=void 0,s=void 0,l=void 0;if(r||(r="\x3c!--\x3e"),"string"!=typeof r&&!Qe(r)){if("function"!=typeof r.toString)throw _("toString is not a function");if("string"!=typeof(r=r.toString()))throw _("dirty is not a string, aborting")}if(!t.isSupported){if("object"===Y(e.toStaticHTML)||"function"==typeof e.toStaticHTML){if("string"==typeof r)return e.toStaticHTML(r);if(Qe(r))return e.toStaticHTML(r.outerHTML)}return r}if(Te||He(o),t.removed=[],"string"==typeof r&&(Be=!1),Be);else if(r instanceof E)1===(a=(i=Ge("\x3c!--\x3e")).ownerDocument.importNode(r,!0)).nodeType&&"BODY"===a.nodeName||"HTML"===a.nodeName?i=a:i.appendChild(a);else{if(!Ie&&!Ne&&!Ae&&-1===r.indexOf("<"))return te&&Ve?te.createHTML(r):r;if(!(i=Ge(r)))return Ie?null:ne}i&&Oe&&We(i.firstChild);for(var f=Xe(Be?r:i);u=f.nextNode();)3===u.nodeType&&u===s||et(u)||(u.content instanceof c&&rt(u.content),nt(u),s=u);if(s=null,Be)return r;if(Ie){if(Me)for(l=ce.call(i.ownerDocument);i.firstChild;)l.appendChild(i.firstChild);else l=i;return Le&&(l=ue.call(n,l,!0)),l}var d=Ae?i.outerHTML:i.innerHTML;return Ne&&(d=m(d,le," "),d=m(d,fe," ")),te&&Ve?te.createHTML(d):d},t.setConfig=function(e){He(e),Te=!0},t.clearConfig=function(){Ue=null,Te=!1},t.isValidAttribute=function(e,t,n){Ue||He({});var r=g(e),o=g(t);return tt(r,o,n)},t.addHook=function(e,t){"function"==typeof t&&(se[e]=se[e]||[],p(se[e],t))},t.removeHook=function(e){se[e]&&d(se[e])},t.removeHooks=function(e){se[e]&&(se[e]=[])},t.removeAllHooks=function(){se={}},t}()}()},function(e,t,n){"use strict";e.exports=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function n(e,n){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var o=0;return function(){return o>=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]=w(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 w(e,t,n){var r=e.length;if(0===r)return"";for(var o=0;o<r;){var i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var x={escape:function(e,t){if(t){if(o.test(e))return e.replace(i,s)}else if(a.test(e))return e.replace(c,s);return e},unescape:f,edit:function(e,t){e=e.source||e,t=t||"";var n={replace:function(t,r){return r=(r=r.source||r).replace(d,"$1"),e=e.replace(t,r),n},getRegex:function(){return new RegExp(e,t)}};return n},cleanUrl:function(e,t,n){if(e){var r;try{r=decodeURIComponent(f(n)).replace(p,"").toLowerCase()}catch(o){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!h.test(n)&&(n=b(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(o){return null}return n},resolveUrl:b,noopTest:{exec:function(){}},merge:function(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){var n=e.replace(/\|/g,(function(e,t,n){for(var r=!1,o=t;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:w,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,r=0,o=0;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&--r<0)return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&e.silent}},_=r.defaults,E=x.rtrim,k=x.splitCells,S=x.escape,C=x.findClosingBracket;function N(e,t,n){var r=t.href,o=t.title?S(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:S(i)}}var A=function(){function e(e){this.options=e||_}var t=e.prototype;return t.space=function(e){var t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{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<o;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]="right":/^ *:-+: *$/.test(n.align[r])?n.align[r]="center":/^ *:-+ *$/.test(n.align[r])?n.align[r]="left":n.align[r]=null;for(o=n.cells.length,r=0;r<o;r++)n.cells[r]=k(n.cells[r],n.header.length);return n}}},t.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},t.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *> ?/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;m<v;m++)s=n=h[m],r=n.length,~(n=n.replace(/^ *([*+-]|\d+[.)]) */,"")).indexOf("\n ")&&(r-=n.length,n=this.options.pedantic?n.replace(/^ {1,4}/gm,""):n.replace(new RegExp("^ {1,"+r+"}","gm"),"")),m!==v-1&&(o=this.rules.block.bullet.exec(h[m+1])[0],(f?1===o.length||!d&&")"===o[o.length-1]:o.length>1||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<o;r++)/^ *-+: *$/.test(n.align[r])?n.align[r]="right":/^ *:-+: *$/.test(n.align[r])?n.align[r]="center":/^ *:-+ *$/.test(n.align[r])?n.align[r]="left":n.align[r]=null;for(o=n.cells.length,r=0;r<o;r++)n.cells[r]=k(n.cells[r].replace(/^ *\| *| *\| *$/g,""),n.header.length);return n}}},t.lheading=function(e){var t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}},t.paragraph=function(e){var t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}},t.text=function(e,t){var n=this.rules.block.text.exec(e);if(n){var r=t[t.length-1];return r&&"text"===r.type?{raw:n[0],text:n[0]}:{type:"text",raw:n[0],text:n[0]}}},t.escape=function(e){var t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:S(t[1])}},t.tag=function(e,t,n){var r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/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=x.noopTest,O=x.edit,I=x.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]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\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=/<!--(?!-?>)[\s\S]*?-->/,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","</?(?:tag)(?: +|\\n|/?>)|<(?: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","</?(?:tag)(?: +|\\n|/?>)|<(?: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","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",M._tag).getRegex(),M.pedantic=I({},M.normal,{html:O("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\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:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\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:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\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]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/,punctuation:/^([\s*punctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};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]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),L.gfm.url=O(L.gfm.url,"i").replace("email",L.gfm._extended_email).getRegex(),L.breaks=I({},L.gfm,{br:O(L.br).replace("{2,}","*").getRegex(),text:O(L.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var V={block:M,inline:L},R=r.defaults,P=V.block,B=V.inline;function D(e){return e.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201c").replace(/"/g,"\u201d").replace(/\.{3}/g,"\u2026")}function j(e){var t,n,r="",o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var F=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;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(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(e){var c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent)break;throw new Error(c)}return t},i.inline=function(e){var t,n,r,o,i,a,c=e.length;for(t=0;t<c;t++)switch((a=e[t]).type){case"paragraph":case"text":case"heading":a.tokens=[],this.inlineTokens(a.text,a.tokens);break;case"table":for(a.tokens={header:[],cells:[]},o=a.header.length,n=0;n<o;n++)a.tokens.header[n]=[],this.inlineTokens(a.header[n],a.tokens.header[n]);for(o=a.cells.length,n=0;n<o;n++)for(i=a.cells[n],a.tokens.cells[n]=[],r=0;r<i.length;r++)a.tokens.cells[n][r]=[],this.inlineTokens(i[r],a.tokens.cells[n][r]);break;case"blockquote":this.inline(a.tokens);break;case"list":for(o=a.items.length,n=0;n<o;n++)this.inline(a.items[n].tokens)}return e},i.inlineTokens=function(e,t,n,r,o){var i;void 0===t&&(t=[]),void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o="");var a,c=e;if(this.tokens.links){var u=Object.keys(this.tokens.links);if(u.length>0)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,j))e=e.substring(i.raw.length),t.push(i);else if(n||!(i=this.tokenizer.url(e,j))){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=x.cleanUrl,Y=x.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?'<pre><code class="'+this.options.langPrefix+Y(r,!0)+'">'+(n?e:Y(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Y(e,!0))+"</code></pre>\n"},t.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},t.html=function(e){return e},t.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},t.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},t.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},t.listitem=function(e){return"<li>"+e+"</li>\n"},t.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},t.paragraph=function(e){return"<p>"+e+"</p>\n"},t.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},t.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},t.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},t.strong=function(e){return"<strong>"+e+"</strong>"},t.em=function(e){return"<em>"+e+"</em>"},t.codespan=function(e){return"<code>"+e+"</code>"},t.br=function(){return this.options.xhtml?"<br/>":"<br>"},t.del=function(e){return"<del>"+e+"</del>"},t.link=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+Y(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},t.image=function(e,t,n){if(null===(e=z(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},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=x.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,w="",x=e.length;for(n=0;n<x;n++)switch((f=e[n]).type){case"space":continue;case"hr":w+=this.renderer.hr();continue;case"heading":w+=this.renderer.heading(this.parseInline(f.tokens),f.depth,q(this.parseInline(f.tokens,this.textRenderer)),this.slugger);continue;case"code":w+=this.renderer.code(f.text,f.lang,f.escaped);continue;case"table":for(s="",u="",i=f.header.length,r=0;r<i;r++)u+=this.renderer.tablecell(this.parseInline(f.tokens.header[r]),{header:!0,align:f.align[r]});for(s+=this.renderer.tablerow(u),l="",i=f.cells.length,r=0;r<i;r++){for(u="",a=(c=f.tokens.cells[r]).length,o=0;o<a;o++)u+=this.renderer.tablecell(this.parseInline(c[o]),{header:!1,align:f.align[o]});l+=this.renderer.tablerow(u)}w+=this.renderer.table(s,l);continue;case"blockquote":l=this.parse(f.tokens),w+=this.renderer.blockquote(l);continue;case"list":for(d=f.ordered,p=f.start,h=f.loose,i=f.items.length,l="",r=0;r<i;r++)m=(v=f.items[r]).checked,y=v.task,g="",v.task&&(b=this.renderer.checkbox(m),h?v.tokens.length>0&&"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);w+=this.renderer.list(l,d,p);continue;case"html":w+=this.renderer.html(f.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(f.tokens));continue;case"text":for(l=f.tokens?this.parseInline(f.tokens):f.text;n+1<x&&"text"===e[n+1].type;)l+="\n"+((f=e[++n]).tokens?this.parseInline(f.tokens):f.text);w+=t?this.renderer.paragraph(l):l;continue;default:var _='Token with "'+f.type+'" type was not found.';if(this.options.silent)return;throw new Error(_)}return w},t.parseInline=function(e,t){t=t||this.renderer;var n,r,o="",i=e.length;for(n=0;n<i;n++)switch((r=e[n]).type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:var a='Token with "'+r.type+'" type was not found.';if(this.options.silent)return;throw new Error(a)}return o},e}(),X=x.merge,Z=x.checkSanitizeDeprecation,Q=x.escape,J=r.getDefaults,ee=r.changeDefaults,te=r.defaults;function ne(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=X({},ne.defaults,t||{}),Z(t),n){var r,o=t.highlight;try{r=F.lex(e,t)}catch(u){return n(u)}var i=function(e){var i;if(!e)try{i=G.parse(r,t)}catch(u){e=u}return t.highlight=o,e?n(e):n(null,i)};if(!o||o.length<3)return i();if(delete t.highlight,!r.length)return i();var a=0;return ne.walkTokens(r,(function(e){"code"===e.type&&(a++,setTimeout((function(){o(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),0==--a&&i()}))}),0))})),void(0===a&&i())}try{var c=F.lex(e,t);return t.walkTokens&&ne.walkTokens(c,t.walkTokens),G.parse(c,t)}catch(u){if(u.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Q(u.message+"",!0)+"</pre>";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<o;a++)i[a]=arguments[a];var c=e.renderer[t].apply(n,i);return!1===c&&(c=r.apply(n,i)),c}};for(var o in e.renderer)r(o);t.renderer=n}(),e.tokenizer&&function(){var n=ne.defaults.tokenizer||new A,r=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];var c=e.tokenizer[t].apply(n,i);return!1===c&&(c=r.apply(n,i)),c}};for(var o in e.tokenizer)r(o);t.tokenizer=n}(),e.walkTokens){var n=ne.defaults.walkTokens;t.walkTokens=function(t){e.walkTokens(t),n&&n(t)}}ne.setOptions(t)},ne.walkTokens=function(e,t){for(var r,o=n(e);!(r=o()).done;){var i=r.value;switch(t(i),i.type){case"table":for(var a,c=n(i.tokens.header);!(a=c()).done;){var u=a.value;ne.walkTokens(u,t)}for(var s,l=n(i.tokens.cells);!(s=l()).done;)for(var f,d=n(s.value);!(f=d()).done;){var p=f.value;ne.walkTokens(p,t)}break;case"list":ne.walkTokens(i.items,t);break;default:i.tokens&&ne.walkTokens(i.tokens,t)}}},ne.Parser=G,ne.parser=G.parse,ne.Renderer=U,ne.TextRenderer=$,ne.Lexer=F,ne.lexer=F.lex,ne.Tokenizer=A,ne.Slugger=H,ne.parse=ne,ne}()}]]); \ No newline at end of file diff --git a/tgui/public/tgui.html b/tgui/public/tgui.html index 150acb9a7b4..d4516855ee9 100644 --- a/tgui/public/tgui.html +++ b/tgui/public/tgui.html @@ -224,6 +224,9 @@ window.onerror = function (msg, url, line, col, error) { return true; }; +// Catch unhandled rejections +window.onunhandledrejection = window.onerror; + // Helper for augmenting stack traces on fatal errors window.__augmentStack__ = function (stack, error) { return stack + '\nUser Agent: ' + navigator.userAgent; From bac3333724064cb97c6e79c5bbfc13ea34e510ed Mon Sep 17 00:00:00 2001 From: Helianthus00 <64755361+Helianthus00@users.noreply.github.com> Date: Sat, 29 Aug 2020 19:15:48 -0600 Subject: [PATCH 30/40] Adds Layer 1/3 Gas Meter Subtypes (#53287) With the current rework to the air distro and scrubbers system, I completely forgot about gas meters and left a bunch of them around to no longer work. Whoops. This adds two subtypes for gas meters that work on layers 1 and 3. I found and replaced every broken gas meter, as well as moved a couple others. I originally added a subtype to atmos/distro_loop but that just seems unnecessary, so it was removed. Mappers can now place layer 1/3 gas meters, which will hopefully encourage more use of the layers other than 2. --- .../map_files/Deltastation/DeltaStation2.dmm | 4 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 88 ++++++++++++------- _maps/map_files/PubbyStation/PubbyStation.dmm | 21 ++--- .../atmospherics/machinery/other/meter.dm | 6 ++ 4 files changed, 70 insertions(+), 49 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 51775486180..11aed37f3ce 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -51177,12 +51177,12 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTp" = ( -/obj/machinery/meter, /obj/structure/cable, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer3{ dir = 4 }, +/obj/machinery/meter/atmos/layer3, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTq" = ( @@ -78921,10 +78921,10 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 1 }, +/obj/machinery/meter, /turf/open/floor/plasteel, /area/maintenance/department/electrical) "cVq" = ( -/obj/machinery/meter, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index f1e3d830d7c..8c82b10d8b9 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -4741,7 +4741,6 @@ /turf/open/floor/plasteel, /area/security/processing) "akL" = ( -/obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 9 }, @@ -5774,7 +5773,6 @@ /area/crew_quarters/fitness) "anb" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 4 }, @@ -6184,7 +6182,6 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/fore/secondary) "aoa" = ( @@ -6711,6 +6708,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ dir = 4 }, +/obj/machinery/meter/atmos/layer3, /turf/open/floor/plating, /area/maintenance/fore/secondary) "apv" = ( @@ -13662,12 +13660,6 @@ }, /turf/open/floor/plasteel, /area/storage/primary) -"aFV" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/meter, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/fore) "aFW" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel, @@ -20072,17 +20064,6 @@ /obj/item/stack/package_wrap, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) -"aVC" = ( -/obj/machinery/meter, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/port) "aVD" = ( /obj/structure/table, /obj/item/reagent_containers/food/condiment/saltshaker{ @@ -37102,10 +37083,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plating, /area/construction) -"bKB" = ( -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/aft) "bKD" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ @@ -43342,13 +43319,13 @@ /turf/open/floor/plating, /area/maintenance/aft) "ceM" = ( -/obj/machinery/meter, /obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer3{ dir = 8 }, +/obj/machinery/meter/atmos/layer3, /turf/open/floor/plating, /area/maintenance/starboard/aft) "ceO" = ( @@ -50816,6 +50793,14 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3, /turf/open/floor/plasteel, /area/science/misc_lab) +"fXZ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3, +/obj/machinery/meter/atmos/layer3, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "fYd" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -52859,6 +52844,31 @@ /obj/item/kirbyplants/random, /turf/open/floor/plasteel/white, /area/medical/psychology) +"mhJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ + dir = 4 + }, +/obj/machinery/meter/atmos/layer3, +/turf/open/floor/plating, +/area/maintenance/aft) +"miW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{ + dir = 4 + }, +/obj/machinery/meter/atmos/layer3, +/turf/open/floor/plating, +/area/maintenance/port/fore) "mje" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -54563,6 +54573,12 @@ }, /turf/open/floor/wood, /area/hallway/secondary/service) +"rrg" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3, +/obj/machinery/meter/atmos/layer3, +/turf/open/floor/plating, +/area/maintenance/port) "ruy" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -54832,6 +54848,12 @@ /obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/break_room) +"smt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3, +/obj/machinery/meter/atmos/layer3, +/turf/open/floor/plating, +/area/maintenance/fore) "soQ" = ( /obj/machinery/power/apc{ areastring = "/area/vacant_room/commissary"; @@ -73105,7 +73127,7 @@ asU bbV boP alU -asK +miW azF aAS aFP @@ -78006,7 +78028,7 @@ aPG aPG aPG aPG -aVC +aSX gjl baS aZp @@ -78262,7 +78284,7 @@ aPI aRb aRb aRb -aRb +rrg aWx gjl baS @@ -79536,7 +79558,7 @@ ayH ayH ayH ayH -aFV +ayH ayH ayH aKy @@ -81592,7 +81614,7 @@ aBi apV arF arF -arF +smt arF aue arP @@ -89086,8 +89108,8 @@ bDO bFl bDO bHU -hxs -bKB +mhJ +bAw bLK bMM bOd @@ -91599,7 +91621,7 @@ anc anc anc bkV -anc +fXZ anD aoI arj diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 68ebbce0b85..f95097975f2 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -4643,10 +4643,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"alV" = ( -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/department/security/brig) "alW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, @@ -38358,10 +38354,10 @@ }, /area/maintenance/department/engine) "bSt" = ( -/obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer3{ dir = 10 }, +/obj/machinery/meter/atmos/layer3, /turf/open/floor/plating, /area/maintenance/department/engine) "bSu" = ( @@ -38610,8 +38606,7 @@ "bTf" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer3, /obj/machinery/atmospherics/components/binary/pump/on/layer1{ - name = "Virology Waste to Space"; - pixel_x = -1 + name = "Virology Waste to Space" }, /turf/open/floor/plating{ icon_state = "platingdmg1" @@ -38619,8 +38614,7 @@ /area/maintenance/department/engine) "bTg" = ( /obj/machinery/atmospherics/components/binary/pump/on/layer1{ - name = "Virology Waste to Space"; - pixel_x = -1 + name = "Virology Waste to Space" }, /turf/open/floor/plating, /area/maintenance/department/engine) @@ -41230,7 +41224,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/disposal/incinerator) "bZi" = ( -/obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/purple/visible, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -41387,6 +41380,7 @@ /obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 5 }, +/obj/machinery/meter, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "bZS" = ( @@ -44123,8 +44117,7 @@ "clM" = ( /obj/machinery/atmospherics/components/binary/pump/on/layer1{ dir = 1; - name = "Tcomms Sat Waste"; - pixel_x = -1 + name = "Tcomms Sat Waste" }, /turf/open/floor/plating, /area/tcommsat/computer) @@ -55701,13 +55694,13 @@ /turf/open/floor/plating, /area/maintenance/department/cargo) "sUP" = ( -/obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer3{ dir = 6 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ dir = 8 }, +/obj/machinery/meter/atmos/layer1, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -76508,7 +76501,7 @@ afU ajG akw all -alV +ajD aiu vCC apB diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 2a7f3602b47..854fa43d406 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -18,6 +18,12 @@ /obj/machinery/meter/atmos frequency = FREQ_ATMOS_STORAGE +/obj/machinery/meter/atmos/layer1 + target_layer = 1 + +/obj/machinery/meter/atmos/layer3 + target_layer = 3 + /obj/machinery/meter/atmos/atmos_waste_loop name = "waste loop gas flow meter" id_tag = ATMOS_GAS_MONITOR_LOOP_ATMOS_WASTE From e17ea62611ac981e68f083bf424c85e00d42bdde Mon Sep 17 00:00:00 2001 From: tgstation-server <tgstation-server@tgstation13.org> Date: Sat, 29 Aug 2020 18:15:52 -0700 Subject: [PATCH 31/40] Automatic changelog generation for PR #53287 [ci skip] --- html/changelogs/AutoChangeLog-pr-53287.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53287.yml diff --git a/html/changelogs/AutoChangeLog-pr-53287.yml b/html/changelogs/AutoChangeLog-pr-53287.yml new file mode 100644 index 00000000000..13ccdabec67 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53287.yml @@ -0,0 +1,7 @@ +author: "Helianthus00" +delete-after: True +changes: + - rscadd: "Added 2 new subtypes of gas meter so that they work on layers 1 and 3" + - bugfix: "Deltastation: Fixes some broken gas meters to be on the correct layer" + - bugfix: "Icebox station: Fixes some broken gas meters to be on the correct layer, as well as relocating the random ones in maint to actual pipes" + - bugfix: "Pubbystation: Fixes some broken gas meters to be on the correct layer" From ce3d7e2f0d73620e3a92aa92a46a3f4d46f71da8 Mon Sep 17 00:00:00 2001 From: TiviPlus <57223640+TiviPlus@users.noreply.github.com> Date: Sun, 30 Aug 2020 04:33:47 +0200 Subject: [PATCH 32/40] Mecha refactor 2020 (#52902) -Mechs are a vehicle subtype -Mech equipment half-rewritten -Mech actions completely redone -Cooldown macros -New movement macros & replacing all var in GLOB.diagonals with ISDIAGONALDIR(var) -New lazylist macro -Support for lavaland only mechs -Removed the tank because fuck off with that hacky shit -Documentation -Fuckton of fixes --- .../lavaland_surface_random_ripley.dmm | 4 +- .../RandomRuins/SpaceRuins/mechtransport.dmm | 4 +- _maps/RandomZLevels/caves.dmm | 4 +- _maps/RandomZLevels/snowdin.dmm | 5 +- _maps/RandomZLevels/spacebattle.dmm | 14 +- code/__DEFINES/cooldowns.dm | 6 + code/__DEFINES/dcs/signals.dm | 6 +- code/__DEFINES/is_helpers.dm | 2 +- code/__DEFINES/vehicles.dm | 9 + code/__HELPERS/_lists.dm | 1 + code/_onclick/ai.dm | 4 - code/_onclick/click.dm | 4 - code/_onclick/hud/human.dm | 2 +- code/datums/components/armor_plate.dm | 8 +- code/game/atoms.dm | 4 - code/game/atoms_movable.dm | 2 +- code/game/data_huds.dm | 8 +- .../game/gamemodes/clown_ops/clown_weapons.dm | 10 +- code/game/machinery/computer/mechlaunchpad.dm | 2 +- code/game/machinery/doors/door.dm | 14 +- code/game/machinery/doors/windowdoor.dm | 20 +- .../machinery/porta_turret/portable_turret.dm | 10 +- code/game/mecha/combat/five_stars.dm | 22 - code/game/mecha/mecha_actions.dm | 256 ---- code/game/mecha/medical/medical.dm | 7 - code/game/objects/effects/effects.dm | 3 - code/game/objects/items.dm | 3 - code/game/objects/items/devices/camera_bug.dm | 2 +- code/game/objects/obj_defense.dm | 20 - code/game/objects/structures/window.dm | 5 - code/game/turfs/closed/walls.dm | 18 - .../eldritch_cult/eldritch_magic.dm | 2 +- code/modules/cargo/bounties/mech.dm | 14 +- code/modules/fields/timestop.dm | 8 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/brain/MMI.dm | 2 +- code/modules/mob/living/brain/brain.dm | 11 +- code/modules/mob/living/carbon/human/death.dm | 4 - .../mob/living/carbon/human/human_defense.dm | 40 - .../human/species_types/shadowpeople.dm | 12 +- code/modules/mob/living/living_defense.dm | 33 - code/modules/mob/living/silicon/ai/ai.dm | 4 +- code/modules/mob/living/silicon/ai/life.dm | 2 +- .../living/simple_animal/hostile/hostile.dm | 10 +- .../simple_animal/hostile/mecha_pilot.dm | 147 +-- .../simple_animal/hostile/megafauna/drake.dm | 8 +- .../hostile/megafauna/hierophant.dm | 13 +- .../hostile/mining_mobs/elites/elite.dm | 4 +- .../simple_animal/hostile/netherworld.dm | 9 +- .../hostile/retaliate/retaliate.dm | 10 +- .../simple_animal/hostile/space_dragon.dm | 6 +- .../living/simple_animal/hostile/statue.dm | 9 +- .../mob/living/simple_animal/simple_animal.dm | 4 +- code/modules/mob/mob.dm | 2 +- code/modules/ninja/suit/ninjaDrainAct.dm | 4 +- .../projectiles/projectile/special/rocket.dm | 4 +- code/modules/recycling/disposal/bin.dm | 2 +- code/modules/shuttle/supply.dm | 2 +- code/modules/shuttle/white_ship.dm | 2 +- code/modules/uplink/uplink_items.dm | 6 +- code/modules/vehicles/_vehicle.dm | 5 +- .../vehicles/mecha/_mecha.dm} | 1028 ++++++++--------- .../vehicles}/mecha/combat/combat.dm | 7 +- .../vehicles}/mecha/combat/durand.dm | 125 +- .../vehicles}/mecha/combat/gygax.dm | 28 +- .../vehicles}/mecha/combat/honker.dm | 25 +- .../vehicles}/mecha/combat/marauder.dm | 36 +- .../vehicles}/mecha/combat/phazon.dm | 21 +- .../vehicles}/mecha/combat/reticence.dm | 9 +- .../mecha/equipment/mecha_equipment.dm | 105 +- .../mecha/equipment/tools/medical_tools.dm | 145 +-- .../mecha/equipment/tools/mining_tools.dm | 56 +- .../mecha/equipment/tools/other_tools.dm | 102 +- .../mecha/equipment/tools/weapon_bay.dm | 4 +- .../mecha/equipment/tools/work_tools.dm | 122 +- .../mecha/equipment/weapons/mecha_ammo.dm | 0 .../mecha/equipment/weapons/weapons.dm | 139 +-- .../vehicles}/mecha/mech_bay.dm | 4 +- .../vehicles}/mecha/mech_fabricator.dm | 0 .../vehicles/mecha/mech_melee_attack.dm | 117 ++ code/modules/vehicles/mecha/mecha_actions.dm | 238 ++++ .../mecha/mecha_construction_paths.dm | 16 +- .../vehicles}/mecha/mecha_control_console.dm | 30 +- .../vehicles}/mecha/mecha_defense.dm | 101 +- .../vehicles}/mecha/mecha_parts.dm | 4 +- .../vehicles}/mecha/mecha_topic.dm | 108 +- .../vehicles}/mecha/mecha_wreckage.dm | 0 .../vehicles}/mecha/medical/odysseus.dm | 18 +- .../vehicles}/mecha/working/clarke.dm | 26 +- .../vehicles}/mecha/working/ripley.dm | 57 +- .../vehicles}/mecha/working/working.dm | 6 +- code/modules/vehicles/sealed.dm | 4 +- code/modules/vehicles/vehicle_actions.dm | 2 +- tgstation.dme | 61 +- 94 files changed, 1733 insertions(+), 1871 deletions(-) delete mode 100644 code/game/mecha/combat/five_stars.dm delete mode 100644 code/game/mecha/mecha_actions.dm delete mode 100644 code/game/mecha/medical/medical.dm rename code/{game/mecha/mecha.dm => modules/vehicles/mecha/_mecha.dm} (50%) rename code/{game => modules/vehicles}/mecha/combat/combat.dm (75%) rename code/{game => modules/vehicles}/mecha/combat/durand.dm (57%) rename code/{game => modules/vehicles}/mecha/combat/gygax.dm (73%) rename code/{game => modules/vehicles}/mecha/combat/honker.dm (91%) rename code/{game => modules/vehicles}/mecha/combat/marauder.dm (81%) rename code/{game => modules/vehicles}/mecha/combat/phazon.dm (60%) rename code/{game => modules/vehicles}/mecha/combat/reticence.dm (83%) rename code/{game => modules/vehicles}/mecha/equipment/mecha_equipment.dm (64%) rename code/{game => modules/vehicles}/mecha/equipment/tools/medical_tools.dm (77%) rename code/{game => modules/vehicles}/mecha/equipment/tools/mining_tools.dm (78%) rename code/{game => modules/vehicles}/mecha/equipment/tools/other_tools.dm (84%) rename code/{game => modules/vehicles}/mecha/equipment/tools/weapon_bay.dm (87%) rename code/{game => modules/vehicles}/mecha/equipment/tools/work_tools.dm (74%) rename code/{game => modules/vehicles}/mecha/equipment/weapons/mecha_ammo.dm (100%) rename code/{game => modules/vehicles}/mecha/equipment/weapons/weapons.dm (83%) rename code/{game => modules/vehicles}/mecha/mech_bay.dm (97%) rename code/{game => modules/vehicles}/mecha/mech_fabricator.dm (100%) create mode 100644 code/modules/vehicles/mecha/mech_melee_attack.dm create mode 100644 code/modules/vehicles/mecha/mecha_actions.dm rename code/{game => modules/vehicles}/mecha/mecha_construction_paths.dm (99%) rename code/{game => modules/vehicles}/mecha/mecha_control_console.dm (85%) rename code/{game => modules/vehicles}/mecha/mecha_defense.dm (77%) rename code/{game => modules/vehicles}/mecha/mecha_parts.dm (98%) rename code/{game => modules/vehicles}/mecha/mecha_topic.dm (73%) rename code/{game => modules/vehicles}/mecha/mecha_wreckage.dm (100%) rename code/{game => modules/vehicles}/mecha/medical/odysseus.dm (59%) rename code/{game => modules/vehicles}/mecha/working/clarke.dm (79%) rename code/{game => modules/vehicles}/mecha/working/ripley.dm (79%) rename code/{game => modules/vehicles}/mecha/working/working.dm (84%) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm index 546ddcff7e4..a4485e0b8c5 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm @@ -9,9 +9,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "d" = ( -/obj/mecha/working/ripley/mining{ - ruin_mecha = 1 - }, +/obj/vehicle/sealed/mecha/working/ripley/mining, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "e" = ( diff --git a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm index 778809373dc..e715917000a 100644 --- a/_maps/RandomRuins/SpaceRuins/mechtransport.dmm +++ b/_maps/RandomRuins/SpaceRuins/mechtransport.dmm @@ -101,9 +101,7 @@ /turf/open/floor/mineral/titanium/yellow/airless, /area/ruin/space/has_grav/powered/mechtransport) "A" = ( -/obj/mecha/working/ripley{ - ruin_mecha = 1 - }, +/obj/vehicle/sealed/mecha/working/ripley, /turf/open/floor/mineral/titanium/yellow/airless, /area/ruin/space/has_grav/powered/mechtransport) "B" = ( diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 955f16277f2..1a86b6b07e0 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -2018,9 +2018,7 @@ }, /area/awaymission/caves/bmp_asteroid) "gC" = ( -/obj/mecha/working/ripley/mining{ - ruin_mecha = 1 - }, +/obj/vehicle/sealed/mecha/working/ripley/mining, /turf/open/floor/plasteel/recharge_floor, /area/awaymission/caves/bmp_asteroid) "gD" = ( diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 58ee677789f..1ba6334ed50 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -13637,10 +13637,7 @@ /turf/open/floor/plasteel/dark, /area/awaymission/snowdin/post/mining_main/mechbay) "In" = ( -/obj/mecha/working/ripley/mining{ - dir = 1; - ruin_mecha = 1 - }, +/obj/vehicle/sealed/mecha/working/ripley/mining, /obj/effect/turf_decal/bot, /turf/open/floor/mech_bay_recharge_floor, /area/awaymission/snowdin/post/mining_main/mechbay) diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index 17826ee8e9f..8105a180f17 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -815,13 +815,11 @@ /turf/open/floor/plasteel, /area/awaymission/spacebattle/cruiser) "dK" = ( -/obj/mecha/medical/odysseus, +/obj/vehicle/sealed/mecha/medical/odysseus, /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) "dL" = ( -/obj/mecha/working/clarke{ - ruin_mecha = 1 - }, +/obj/vehicle/sealed/mecha/working/clarke, /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) "dM" = ( @@ -2366,7 +2364,7 @@ /turf/open/floor/plasteel/rockvault/alien, /area/awaymission/spacebattle/secret) "jp" = ( -/obj/mecha/combat/gygax, +/obj/vehicle/sealed/mecha/combat/gygax, /turf/open/floor/plating, /area/awaymission/spacebattle/cruiser) "jq" = ( @@ -2444,7 +2442,7 @@ /area/awaymission/spacebattle/cruiser) "jz" = ( /mob/living/simple_animal/hostile/syndicate/mecha_pilot{ - spawn_mecha_type = /obj/mecha/combat/gygax/dark/loaded + spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/gygax/dark/loaded }, /turf/open/floor/plasteel, /area/awaymission/spacebattle/cruiser) @@ -2581,13 +2579,13 @@ /area/awaymission/spacebattle/cruiser) "jV" = ( /mob/living/simple_animal/hostile/syndicate/mecha_pilot{ - spawn_mecha_type = /obj/mecha/combat/gygax/dark/loaded + spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/gygax/dark/loaded }, /turf/open/floor/plating/airless, /area/awaymission/spacebattle/cruiser) "jW" = ( /mob/living/simple_animal/hostile/syndicate/mecha_pilot{ - spawn_mecha_type = /obj/mecha/combat/gygax/dark/loaded + spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/gygax/dark/loaded }, /turf/open/floor/plasteel/airless, /area/awaymission/spacebattle/cruiser) diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index a6bceddbd73..adc4109a2be 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -29,6 +29,12 @@ #define COOLDOWN_BORG_SELF_REPAIR "borg_self_repair" #define COOLDOWN_EXPRESSPOD_CONSOLE "expresspod_console" +//Mecha cooldowns +#define COOLDOWN_MECHA_MESSAGE "mecha_message" +#define COOLDOWN_MECHA_EQUIPMENT "mecha_equipment" +#define COOLDOWN_MECHA_ARMOR "mecha_armor" +#define COOLDOWN_MECHA_MELEE_ATTACK "mecha_melee" +#define COOLDOWN_MECHA_SMOKE "mecha_smoke" //TIMER COOLDOWN MACROS diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index c64fcdefaca..658d1082b8b 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -608,11 +608,11 @@ ///sent to targets during the process_hit proc of projectiles #define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init" - -// /obj/mecha signals +// /obj/vehicle/sealed/mecha signals ///sent from mecha action buttons to the mecha they're linked to -#define COMSIG_MECHA_ACTION_ACTIVATE "mecha_action_activate" +#define COMSIG_MECHA_ACTION_TRIGGER "mecha_action_activate" + // /mob/living/carbon/human signals diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 9ff6c8e84d2..1a0d829993c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define ismachinery(A) (istype(A, /obj/machinery)) -#define ismecha(A) (istype(A, /obj/mecha)) +#define ismecha(A) (istype(A, /obj/vehicle/sealed/mecha)) #define ismopable(A) (A && (A.layer <= HIGH_SIGIL_LAYER)) //If something can be cleaned by floor-cleaning devices such as mops or clean bots diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm index 48383546b9d..4b59e585aa3 100644 --- a/code/__DEFINES/vehicles.dm +++ b/code/__DEFINES/vehicles.dm @@ -4,6 +4,15 @@ #define VEHICLE_CONTROL_DRIVE 2 #define VEHICLE_CONTROL_KIDNAPPED 4 //Can't leave vehicle voluntarily, has to resist. +//Mech flags +#define ADDING_ACCESS_POSSIBLE (1<<0) +#define ADDING_MAINT_ACCESS_POSSIBLE (1<<1) +#define CANSTRAFE (1<<2) +#define LIGHTS_ON (1<<3) +#define SILICON_PILOT (1<<4) +#define IS_ENCLOSED (1<<5) +#define HAS_LIGHTS (1<<6) + //Car trait flags #define CAN_KIDNAP 1 diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index aaf004cc1a9..156432f74dc 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -24,6 +24,7 @@ #define reverseList(L) reverseRange(L.Copy()) #define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += list(V); #define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; } +#define LAZYACCESSASSOC(L, I, K) L ? L[I] ? L[I][K] ? L[I][K] : null : null : null /// Passed into BINARY_INSERT to compare keys #define COMPARE_KEY __BIN_LIST[__BIN_MID] diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index ce5f6b451b0..14733e1881c 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -58,10 +58,6 @@ if(modifiers["shift"] && modifiers["ctrl"]) CtrlShiftClickOn(A) return - if(modifiers["middle"]) - if(controlled_mech) //Are we piloting a mech? Placed here so the modifiers are not overridden. - controlled_mech.click_action(A, src, params) //Override AI normal click behavior. - return if(modifiers["shift"]) ShiftClickOn(A) return diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 1a6820170b9..28841f3d5ba 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -109,10 +109,6 @@ if(!modifiers["catcher"] && A.IsObscured()) return - if(ismecha(loc)) - var/obj/mecha/M = loc - return M.click_action(A,src,params) - if(restrained()) changeNext_move(CLICK_CD_HANDCUFFED) //Doing shit in cuffs shall be vey slow RestrainedClickOn(A) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 5570b64d541..aabe5bf2e3f 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -29,7 +29,7 @@ /obj/screen/human/equip/Click() if(ismecha(usr.loc)) // stops inventory actions in a mech - return 1 + return TRUE var/mob/living/carbon/human/H = usr H.quick_equip() diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 25a886a3c92..41f127c9aab 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -12,7 +12,7 @@ RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/applyplate) RegisterSignal(parent, COMSIG_PARENT_PREQDELETED, .proc/dropplates) - if(istype(parent, /obj/mecha/working/ripley)) + if(istype(parent, /obj/vehicle/sealed/mecha/working/ripley)) RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_mech_overlays) if(_maxamount) @@ -71,7 +71,7 @@ O.armor = O.armor.attachArmor(added_armor) if(ismecha(O)) - var/obj/mecha/R = O + var/obj/vehicle/sealed/mecha/R = O R.update_icon() to_chat(user, "<span class='info'>You strengthen [R], improving its resistance against melee, bullet and laser damage.</span>") else @@ -85,13 +85,13 @@ for(var/i in 1 to amount) new upgrade_item(get_turf(parent)) -/datum/component/armor_plate/proc/apply_mech_overlays(obj/mecha/mech, list/overlays) +/datum/component/armor_plate/proc/apply_mech_overlays(obj/vehicle/sealed/mecha/mech, list/overlays) SIGNAL_HANDLER if(amount) var/overlay_string = "ripley-g" if(amount >= 3) overlay_string += "-full" - if(!mech.occupant) + if(LAZYLEN(mech.occupants)) overlay_string += "-open" overlays += overlay_string diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 354f9b6d098..325901f99c8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -921,10 +921,6 @@ SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) dir = newdir -///Handle melee attack by a mech -/atom/proc/mech_melee_attack(obj/mecha/M) - return - /** * Called when the atom log's in or out * diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 3a93d6c5c20..9704fbb28da 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -998,7 +998,7 @@ if(!anchored && has_gravity()) step(src, movedir) -//Returns an atom's power cell, if it has one. Overload for individual items. +///Returns an atom's power cell, if it has one. Overload for individual items. /atom/movable/proc/get_cell() return diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 8b582dd6478..de24e9e5199 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -379,14 +379,14 @@ /*~~~~~~~~~~~~~~~~~~~~ BIG STOMPY MECHS ~~~~~~~~~~~~~~~~~~~~~*/ -/obj/mecha/proc/diag_hud_set_mechhealth() +/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechhealth() var/image/holder = hud_list[DIAG_MECH_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size holder.icon_state = "huddiag[RoundDiagBar(obj_integrity/max_integrity)]" -/obj/mecha/proc/diag_hud_set_mechcell() +/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechcell() var/image/holder = hud_list[DIAG_BATT_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size @@ -397,7 +397,7 @@ holder.icon_state = "hudnobatt" -/obj/mecha/proc/diag_hud_set_mechstat() +/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechstat() var/image/holder = hud_list[DIAG_STAT_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size @@ -405,7 +405,7 @@ if(internal_damage) holder.icon_state = "hudwarn" -/obj/mecha/proc/diag_hud_set_mechtracking() //Shows tracking beacons on the mech +/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechtracking() //Shows tracking beacons on the mech var/image/holder = hud_list[DIAG_TRACK_HUD] var/icon/I = icon(icon, icon_state, dir) holder.pixel_y = I.Height() - world.icon_size diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index a7798e99e3e..058da3c061a 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -236,7 +236,7 @@ projectiles = 8 projectile_energy_cost = 1000 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana/can_attach(obj/mecha/combat/honker/M) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/bombanana/can_attach(obj/vehicle/sealed/mecha/combat/honker/M) if(..()) if(istype(M)) return TRUE @@ -254,13 +254,13 @@ equip_cooldown = 60 det_time = 20 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache/can_attach(obj/mecha/combat/honker/M) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/tearstache/can_attach(obj/vehicle/sealed/mecha/combat/honker/M) if(..()) if(istype(M)) return TRUE return FALSE -/obj/mecha/combat/honker/dark +/obj/vehicle/sealed/mecha/combat/honker/dark desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. This one has been painted black for maximum fun. HONK!" name = "\improper Dark H.O.N.K" icon_state = "darkhonker" @@ -273,14 +273,14 @@ wreckage = /obj/structure/mecha_wreckage/honker/dark max_equip = 4 -/obj/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C) +/obj/vehicle/sealed/mecha/combat/honker/dark/add_cell(obj/item/stock_parts/cell/C) if(C) C.forceMove(src) cell = C return cell = new /obj/item/stock_parts/cell/hyper(src) -/obj/mecha/combat/honker/dark/loaded/Initialize() +/obj/vehicle/sealed/mecha/combat/honker/dark/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) ME.attach(src) diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm index 26fa79e6524..88d3c765cbf 100644 --- a/code/game/machinery/computer/mechlaunchpad.dm +++ b/code/game/machinery/computer/mechlaunchpad.dm @@ -90,7 +90,7 @@ if(connected_mechpad.panel_open) to_chat(user, "<span class='warning'>[src]'s pad has its' panel open! It won't work!</span>") return - if(!(locate(/obj/mecha) in get_turf(connected_mechpad))) + if(!(locate(/obj/vehicle/sealed/mecha) in get_turf(connected_mechpad))) to_chat(user, "<span class='warning'>[src] detects no mecha on the pad!</span>") return connected_mechpad.launch(where) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index b88aa3438e9..d581ca1de3a 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -116,18 +116,6 @@ return bumpopen(M) return - - if(ismecha(AM)) - var/obj/mecha/mecha = AM - if(density) - if(mecha.occupant) - if(world.time - mecha.occupant.last_bumped <= 10) - return - mecha.occupant.last_bumped = world.time - if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) - open() - else - do_animate("deny") return if(isitem(AM)) @@ -370,7 +358,7 @@ //add_blood doesn't work for borgs/xenos, but add_blood_floor does. L.add_splatter_floor(location) log_combat(src, L, "crushed") - for(var/obj/mecha/M in get_turf(src)) + for(var/obj/vehicle/sealed/mecha/M in get_turf(src)) M.take_damage(DOOR_CRUSH_DAMAGE) log_combat(src, M, "crushed") diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index bc364f13a0c..013b43be237 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -67,17 +67,19 @@ close() /obj/machinery/door/window/Bumped(atom/movable/AM) - if( operating || !density ) + if(operating || !density) return - if (!( ismob(AM) )) + if(!ismob(AM)) if(ismecha(AM)) - var/obj/mecha/mecha = AM - if(mecha.occupant && allowed(mecha.occupant)) - open_and_close() - else - do_animate("deny") + var/obj/vehicle/sealed/mecha/mecha = AM + for(var/O in mecha.occupants) + var/mob/living/occupant = O + if(allowed(occupant)) + open_and_close() + return + do_animate("deny") return - if (!( SSticker )) + if(!SSticker) return var/mob/M = AM if(M.restrained() || ((isdrone(M) || iscyborg(M)) && M.stat)) @@ -85,7 +87,7 @@ bumpopen(M) /obj/machinery/door/window/bumpopen(mob/user) - if( operating || !density ) + if(operating || !density) return add_fingerprint(user) if(!requiresID()) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 30a78ea4410..0c58653a5ce 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -448,10 +448,12 @@ for(var/A in GLOB.mechas_list) if((get_dist(A, base) < scan_range) && can_see(base, A, scan_range)) - var/obj/mecha/Mech = A - if(Mech.occupant && !in_faction(Mech.occupant)) //If there is a user and they're not in our faction - if(assess_perp(Mech.occupant) >= 4) - targets += Mech + var/obj/vehicle/sealed/mecha/mech = A + for(var/O in mech.occupants) + var/mob/living/occupant = O + if(!in_faction(occupant)) //If there is a user and they're not in our faction + if(assess_perp(occupant) >= 4) + targets += mech if((turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS) && GLOB.blobs.len && (mode == TURRET_LETHAL)) for(var/obj/structure/blob/B in view(scan_range, base)) diff --git a/code/game/mecha/combat/five_stars.dm b/code/game/mecha/combat/five_stars.dm deleted file mode 100644 index 82a961e1806..00000000000 --- a/code/game/mecha/combat/five_stars.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/mecha/combat/five_stars - desc = "A state of the art tank deployed by the Spinward Stellar Coalition National Guard." - name = "\improper Tank" - icon = 'icons/mecha/mecha_96x96.dmi' - icon_state = "five_stars" - armor = list(MELEE = 100, BULLET = 50, LASER = 35, ENERGY = 35, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) - exit_delay = 40 - step_in = 4 - dir_in = 1 //Facing North. - max_integrity = 800 - pixel_x = -32 - pixel_y = -32 - -/obj/mecha/combat/five_stars/Initialize() - . = ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/spacecops(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - max_ammo() diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm deleted file mode 100644 index 376b8857083..00000000000 --- a/code/game/mecha/mecha_actions.dm +++ /dev/null @@ -1,256 +0,0 @@ -//////////////////////////////////////// Action Buttons /////////////////////////////////////////////// - -/obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0) - if(human_occupant) - eject_action.Grant(user, src) - if(enclosed) - internals_action.Grant(user, src) - cycle_action.Grant(user, src) - if(haslights) - lights_action.Grant(user, src) - stats_action.Grant(user, src) - if(canstrafe) - strafing_action.Grant(user, src) - - -/obj/mecha/proc/RemoveActions(mob/living/user, human_occupant = 0) - if(human_occupant) - eject_action.Remove(user) - internals_action.Remove(user) - cycle_action.Remove(user) - if(haslights) - lights_action.Remove(user) - stats_action.Remove(user) - if(canstrafe) - strafing_action.Remove(user) - - -/datum/action/innate/mecha - check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS - icon_icon = 'icons/mob/actions/actions_mecha.dmi' - var/obj/mecha/chassis - -/datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M) - if(M) - chassis = M - ..() - -/datum/action/innate/mecha/Destroy() - chassis = null - return ..() - -/datum/action/innate/mecha/mech_eject - name = "Eject From Mech" - button_icon_state = "mech_eject" - -/datum/action/innate/mecha/mech_eject/Activate() - if(!owner) - return - if(!chassis || chassis.occupant != owner) - return - chassis.container_resist_act(chassis.occupant) - -/datum/action/innate/mecha/mech_toggle_internals - name = "Toggle Internal Airtank Usage" - button_icon_state = "mech_internals_off" - -/datum/action/innate/mecha/mech_toggle_internals/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.use_internal_tank = !chassis.use_internal_tank - button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]" - chassis.occupant_message("<span class='notice'>Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].</span>") - chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].", LOG_MECHA) - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_cycle_equip - name = "Cycle Equipment" - button_icon_state = "mech_cycle_equip_off" - -/datum/action/innate/mecha/mech_cycle_equip/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - - var/list/available_equipment = list() - for(var/obj/item/mecha_parts/mecha_equipment/M in chassis.equipment) - if(M.selectable) - available_equipment += M - - if(available_equipment.len == 0) - chassis.occupant_message("<span class='warning'>No equipment available!</span>") - return - if(!chassis.selected) - chassis.selected = available_equipment[1] - chassis.occupant_message("<span class='notice'>You select [chassis.selected].</span>") - send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - button_icon_state = "mech_cycle_equip_on" - UpdateButtonIcon() - return - var/number = 0 - for(var/A in available_equipment) - number++ - if(A == chassis.selected) - if(available_equipment.len == number) - chassis.selected = null - chassis.occupant_message("<span class='notice'>You switch to no equipment.</span>") - button_icon_state = "mech_cycle_equip_off" - else - chassis.selected = available_equipment[number+1] - chassis.occupant_message("<span class='notice'>You switch to [chassis.selected].</span>") - button_icon_state = "mech_cycle_equip_on" - send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - UpdateButtonIcon() - return - - -/datum/action/innate/mecha/mech_toggle_lights - name = "Toggle Lights" - button_icon_state = "mech_lights_off" - -/datum/action/innate/mecha/mech_toggle_lights/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.lights = !chassis.lights - if(chassis.lights) - button_icon_state = "mech_lights_on" - else - button_icon_state = "mech_lights_off" - chassis.set_light_on(chassis.lights) - chassis.occupant_message("<span class='notice'>Toggled lights [chassis.lights?"on":"off"].</span>") - chassis.log_message("Toggled lights [chassis.lights?"on":"off"].", LOG_MECHA) - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_view_stats - name = "View Stats" - button_icon_state = "mech_view_stats" - -/datum/action/innate/mecha/mech_view_stats/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.occupant << browse(chassis.get_stats_html(), "window=exosuit") - - -/datum/action/innate/mecha/strafe - name = "Toggle Strafing. Disabled when Alt is held." - button_icon_state = "strafe" - -/datum/action/innate/mecha/strafe/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - - chassis.toggle_strafe() - -/obj/mecha/AltClick(mob/living/user) - if((user == occupant) && user.canUseTopic(src)) - toggle_strafe() - -/obj/mecha/proc/toggle_strafe() - strafe = !strafe - - occupant_message("<span class='notice'>Toggled strafing mode [strafe?"on":"off"].</span>") - log_message("Toggled strafing mode [strafe?"on":"off"].", LOG_MECHA) - strafing_action.UpdateButtonIcon() - -//////////////////////////////////////// Specific Ability Actions /////////////////////////////////////////////// -//Need to be granted by the mech type, Not default abilities. - -/datum/action/innate/mecha/mech_defense_mode - name = "Toggle an energy shield that blocks all attacks from the faced direction at a heavy power cost." - button_icon_state = "mech_defense_mode_off" - var/image/def_overlay - -/datum/action/innate/mecha/mech_defense_mode/Activate(forced_state = FALSE) - SEND_SIGNAL(chassis, COMSIG_MECHA_ACTION_ACTIVATE, args) ///Signal sent to the mech, to be handed to the shield. See durand.dm for more details - -/datum/action/innate/mecha/mech_overload_mode - name = "Toggle leg actuators overload" - button_icon_state = "mech_overload_off" - -/datum/action/innate/mecha/mech_overload_mode/Activate(forced_state = null) - if(!owner || !chassis || chassis.occupant != owner) - return - if(!isnull(forced_state)) - chassis.leg_overload_mode = forced_state - else - chassis.leg_overload_mode = !chassis.leg_overload_mode - button_icon_state = "mech_overload_[chassis.leg_overload_mode ? "on" : "off"]" - chassis.log_message("Toggled leg actuators overload.", LOG_MECHA) - if(chassis.leg_overload_mode) - chassis.leg_overload_mode = 1 - chassis.step_in = min(1, round(chassis.step_in/2)) - chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff) - chassis.occupant_message("<span class='danger'>You enable leg actuators overload.</span>") - else - chassis.leg_overload_mode = 0 - chassis.step_in = initial(chassis.step_in) - chassis.step_energy_drain = chassis.normal_step_energy_drain - chassis.occupant_message("<span class='notice'>You disable leg actuators overload.</span>") - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_smoke - name = "Smoke" - button_icon_state = "mech_smoke" - -/datum/action/innate/mecha/mech_smoke/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - if(chassis.smoke_ready && chassis.smoke>0) - chassis.smoke_system.start() - chassis.smoke-- - chassis.smoke_ready = FALSE - addtimer(VARSET_CALLBACK(chassis, smoke_ready, TRUE), chassis.smoke_cooldown) - - -/datum/action/innate/mecha/mech_zoom - name = "Zoom" - button_icon_state = "mech_zoom_off" - -/datum/action/innate/mecha/mech_zoom/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - if(owner.client) - chassis.zoom_mode = !chassis.zoom_mode - button_icon_state = "mech_zoom_[chassis.zoom_mode ? "on" : "off"]" - chassis.log_message("Toggled zoom mode.", LOG_MECHA) - chassis.occupant_message("<font color='[chassis.zoom_mode?"blue":"red"]'>Zoom mode [chassis.zoom_mode?"en":"dis"]abled.</font>") - if(chassis.zoom_mode) - owner.client.view_size.setTo(4.5) - SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg',volume=50)) - else - owner.client.view_size.resetToDefault() //Let's not let this stack shall we? - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_switch_damtype - name = "Reconfigure arm microtool arrays" - button_icon_state = "mech_damtype_brute" - -/datum/action/innate/mecha/mech_switch_damtype/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - var/new_damtype - switch(chassis.damtype) - if(TOX) - new_damtype = BRUTE - chassis.occupant_message("<span class='notice'>Your exosuit's hands form into fists.</span>") - if(BRUTE) - new_damtype = BURN - chassis.occupant_message("<span class='notice'>A torch tip extends from your exosuit's hand, glowing red.</span>") - if(BURN) - new_damtype = TOX - chassis.occupant_message("<span class='notice'>A bone-chillingly thick plasteel needle protracts from the exosuit's palm.</span>") - chassis.damtype = new_damtype - button_icon_state = "mech_damtype_[new_damtype]" - playsound(src, 'sound/mecha/mechmove01.ogg', 50, TRUE) - UpdateButtonIcon() - -/datum/action/innate/mecha/mech_toggle_phasing - name = "Toggle Phasing" - button_icon_state = "mech_phasing_off" - -/datum/action/innate/mecha/mech_toggle_phasing/Activate() - if(!owner || !chassis || chassis.occupant != owner) - return - chassis.phasing = !chassis.phasing - button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]" - chassis.occupant_message("<font color=\"[chassis.phasing?"#00f\">En":"#f00\">Dis"]abled phasing.</font>") - UpdateButtonIcon() diff --git a/code/game/mecha/medical/medical.dm b/code/game/mecha/medical/medical.dm deleted file mode 100644 index 1541ff1b7cd..00000000000 --- a/code/game/mecha/medical/medical.dm +++ /dev/null @@ -1,7 +0,0 @@ -/obj/mecha/medical - internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_MEDICAL) - -/obj/mecha/medical/mechturn(direction) - . = ..() - if(!strafe && !occupant.client.keys_held["Alt"]) - mechstep(direction) //agile mechs get to move and turn in the same step diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 23204da7d0b..b6748426de0 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -17,9 +17,6 @@ /obj/effect/acid_act() return -/obj/effect/mech_melee_attack(obj/mecha/M) - return - /obj/effect/blob_act(obj/structure/blob/B) return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5d5d560ee2c..1bfdaf105f8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -758,9 +758,6 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return ..() return 0 -/obj/item/mech_melee_attack(obj/mecha/M) - return 0 - /obj/item/burn() if(!QDELETED(src)) var/turf/T = get_turf(src) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 9302e5cb56b..49d1e5fc838 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -163,7 +163,7 @@ dat += " (Stage [stage])" dat += " <a href='?[REF(src)];track=[REF(S)]'>\[Track\]</a><br>" - for(var/obj/mecha/M in seen) + for(var/obj/vehicle/sealed/mecha/M in seen) if(M.name in names) names[M.name]++ dat += "[M.name] ([names[M.name]])" diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 0b97f241df8..9a57ee62856 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -137,26 +137,6 @@ return attack_generic(user, rand(10, 15), BRUTE, MELEE, 1) -/obj/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - var/play_soundeffect = 0 - var/mech_damtype = M.damtype - if(M.selected) - mech_damtype = M.selected.damtype - play_soundeffect = 1 - else - switch(M.damtype) - if(BRUTE) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) - if(BURN) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) - if(TOX) - playsound(src, 'sound/effects/spray2.ogg', 50, TRUE) - return 0 - else - return 0 - M.visible_message("<span class='danger'>[M.name] hits [src]!</span>", "<span class='danger'>You hit [src]!</span>", null, COMBAT_MESSAGE_RANGE) - return take_damage(M.force*3, mech_damtype, MELEE, play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. /obj/singularity_act() SSexplosions.high_mov_atom += src diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index e7537f526b6..c0d21cb5e3b 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -220,11 +220,6 @@ /obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored) return check_state(checked_state) && check_anchored(checked_anchored) -/obj/structure/window/mech_melee_attack(obj/mecha/M) - if(!can_be_reached()) - return - ..() - /obj/structure/window/proc/can_be_reached(mob/user) if(!fulltile) if(get_dir(user,src) & dir) diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 68142b1f50d..9411630a726 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -100,24 +100,6 @@ else add_dent(WALL_DENT_HIT) -/turf/closed/wall/mech_melee_attack(obj/mecha/M) - M.do_attack_animation(src) - switch(M.damtype) - if(BRUTE) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) - M.visible_message("<span class='danger'>[M.name] hits [src]!</span>", \ - "<span class='danger'>You hit [src]!</span>", null, COMBAT_MESSAGE_RANGE) - if(prob(hardness + M.force) && M.force > 20) - dismantle_wall(1) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) - else - add_dent(WALL_DENT_HIT) - if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) - if(TOX) - playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) - return FALSE - /turf/closed/wall/attack_paw(mob/living/user) user.changeNext_move(CLICK_CD_MELEE) return attack_hand(user) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index ebcd4d8a290..f654cd25aba 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -354,7 +354,7 @@ new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) // deals damage to mechs - for(var/obj/mecha/M in T.contents) + for(var/obj/vehicle/sealed/mecha/M in T.contents) if(M in hit_list) continue hit_list += M diff --git a/code/modules/cargo/bounties/mech.dm b/code/modules/cargo/bounties/mech.dm index 4b73dd51abc..3651be1af4e 100644 --- a/code/modules/cargo/bounties/mech.dm +++ b/code/modules/cargo/bounties/mech.dm @@ -5,8 +5,8 @@ /datum/bounty/item/mech/ship(obj/O) if(!applies_to(O)) return - if(istype(O, /obj/mecha)) - var/obj/mecha/M = O + if(istype(O, /obj/vehicle/sealed/mecha)) + var/obj/vehicle/sealed/mecha/M = O M.wreckage = null // So the mech doesn't explode. ..() @@ -16,24 +16,24 @@ /datum/bounty/item/mech/ripleymkii name = "APLU MK-II \"Ripley\"" reward = 13000 - wanted_types = list(/obj/mecha/working/ripley/mkii) + wanted_types = list(/obj/vehicle/sealed/mecha/working/ripley/mkii) /datum/bounty/item/mech/clarke name = "Clarke" reward = 16000 - wanted_types = list(/obj/mecha/working/clarke) + wanted_types = list(/obj/vehicle/sealed/mecha/working/clarke) /datum/bounty/item/mech/odysseus name = "Odysseus" reward = 11000 - wanted_types = list(/obj/mecha/medical/odysseus) + wanted_types = list(/obj/vehicle/sealed/mecha/medical/odysseus) /datum/bounty/item/mech/gygax name = "Gygax" reward = 28000 - wanted_types = list(/obj/mecha/combat/gygax) + wanted_types = list(/obj/vehicle/sealed/mecha/combat/gygax) /datum/bounty/item/mech/durand name = "Durand" reward = 20000 - wanted_types = list(/obj/mecha/combat/durand) + wanted_types = list(/obj/vehicle/sealed/mecha/combat/durand) diff --git a/code/modules/fields/timestop.dm b/code/modules/fields/timestop.dm index f6d2133bfaa..9908316020e 100644 --- a/code/modules/fields/timestop.dm +++ b/code/modules/fields/timestop.dm @@ -84,7 +84,7 @@ freeze_mob(A) else if(istype(A, /obj/projectile)) freeze_projectile(A) - else if(istype(A, /obj/mecha)) + else if(istype(A, /obj/vehicle/sealed/mecha)) freeze_mecha(A) else if((ismachinery(A) && !istype(A, /obj/machinery/light)) || isstructure(A)) //Special exception for light fixtures since recoloring causes them to change light freeze_structure(A) @@ -120,7 +120,7 @@ unfreeze_mob(A) else if(istype(A, /obj/projectile)) unfreeze_projectile(A) - else if(istype(A, /obj/mecha)) + else if(istype(A, /obj/vehicle/sealed/mecha)) unfreeze_mecha(A) UnregisterSignal(A, COMSIG_MOVABLE_PRE_MOVE) @@ -131,10 +131,10 @@ global_frozen_atoms -= A -/datum/proximity_monitor/advanced/timestop/proc/freeze_mecha(obj/mecha/M) +/datum/proximity_monitor/advanced/timestop/proc/freeze_mecha(obj/vehicle/sealed/mecha/M) M.completely_disabled = TRUE -/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mecha(obj/mecha/M) +/datum/proximity_monitor/advanced/timestop/proc/unfreeze_mecha(obj/vehicle/sealed/mecha/M) M.completely_disabled = FALSE diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 3cad0475c18..4e75220ebcc 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -25,7 +25,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/datum/hud/living/carbon/hud = null // hud var/bootime = 0 var/started_as_observer //This variable is set to 1 when you enter the game as an observer. - //If you died in the game and are a ghsot - this will remain as null. + //If you died in the game and are a ghost - this will remain as null. //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. var/atom/movable/following = null var/fun_verbs = 0 diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 9b3d62f61cd..2f0ea04750b 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -8,7 +8,7 @@ var/obj/item/radio/radio = null //Let's give it a radio. var/mob/living/brain/brainmob = null //The current occupant. var/mob/living/silicon/robot = null //Appears unused. - var/obj/mecha = null //This does not appear to be used outside of reference in mecha.dm. + var/obj/vehicle/sealed/mecha = null //This does not appear to be used outside of reference in mecha.dm. var/obj/item/organ/brain/brain = null //The actual brain var/datum/ai_laws/laws = new() var/force_replace_ai_name = FALSE diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 2faa23b800d..587d28c2513 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -35,7 +35,7 @@ return ..() /mob/living/brain/update_mobility() - if(in_contents_of(/obj/mecha)) + if(in_contents_of(/obj/vehicle/sealed/mecha)) mobility_flags = MOBILITY_FLAGS_DEFAULT else mobility_flags = NONE @@ -65,13 +65,6 @@ if(stored_dna) stored_dna.real_name = real_name -/mob/living/brain/ClickOn(atom/A, params) - ..() - if(container) - var/obj/mecha/M = container.mecha - if(istype(M)) - return M.click_action(A,src,params) - /mob/living/brain/forceMove(atom/destination) if(container) return container.forceMove(destination) @@ -92,7 +85,7 @@ if(!container) return if (container.mecha) - var/obj/mecha/M = container.mecha + var/obj/vehicle/sealed/mecha/M = container.mecha if(M.mouse_pointer) client.mouse_pointer_icon = M.mouse_pointer if (client && ranged_ability && ranged_ability.ranged_mousepointer) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index f4a693d5ade..15423512d89 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -32,10 +32,6 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) if(client && !suiciding && !(client in GLOB.dead_players_during_shift)) GLOB.dead_players_during_shift += client GLOB.deaths_during_shift++ - if(ismecha(loc)) - var/obj/mecha/M = loc - if(M.occupant == src) - M.go_out() if(!QDELETED(dna)) //The gibbed param is bit redundant here since dna won't exist at this point if they got deleted. dna.species.spec_death(gibbed, src) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index acd8cffddd2..86ac018a071 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -353,46 +353,6 @@ var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod) -/mob/living/carbon/human/mech_melee_attack(obj/mecha/M) - - if(M.occupant.a_intent == INTENT_HARM) - if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM)) - to_chat(M.occupant, "<span class='warning'>You don't want to harm other living beings!</span>") - return - M.do_attack_animation(src) - if(M.damtype == BRUTE) - step_away(src,M,15) - var/obj/item/bodypart/temp = get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_HEAD)) - if(temp) - var/update = 0 - var/dmg = rand(M.force/2, M.force) - switch(M.damtype) - if(BRUTE) - if(M.force > 35) // durand and other heavy mechas - Unconscious(20) - else if(M.force > 20 && !IsKnockdown()) // lightweight mechas like gygax - Knockdown(40) - update |= temp.receive_damage(dmg, 0) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) - if(BURN) - update |= temp.receive_damage(0, dmg) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) - if(TOX) - M.mech_toxin_damage(src) - else - return - if(update) - update_damage_overlays() - updatehealth() - - visible_message("<span class='danger'>[M.name] hits [src]!</span>", \ - "<span class='userdanger'>[M.name] hits you!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, M) - to_chat(M, "<span class='danger'>You hit [src]!</span>") - log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - - else - ..() - /mob/living/carbon/human/ex_act(severity, target, origin) if(TRAIT_BOMBIMMUNE in dna.species.species_traits) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index e4aacf35790..32eed98edad 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -216,13 +216,13 @@ disintegrate(I, I) else if(ismecha(AM)) - var/obj/mecha/M = AM - if(M.haslights) + var/obj/vehicle/sealed/mecha/M = AM + if(M.mecha_flags & HAS_LIGHTS) M.visible_message("<span class='danger'>[M]'s lights burn out!</span>") - M.haslights = FALSE - M.set_light(-M.lights_power) - if(M.occupant) - M.lights_action.Remove(M.occupant) + M.mecha_flags &= ~HAS_LIGHTS + M.set_light_on(FALSE) + for(var/occupant in M.occupants) + M.remove_action_type_from_mob(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, occupant) for(var/obj/item/O in AM.GetAllContents()) if(O.light_range && O.light_power) disintegrate(O, M) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index f18eba989b7..528ae40753e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -98,39 +98,6 @@ playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself return ..() - -/mob/living/mech_melee_attack(obj/mecha/M) - if(M.occupant.a_intent == INTENT_HARM) - if(HAS_TRAIT(M.occupant, TRAIT_PACIFISM)) - to_chat(M.occupant, "<span class='warning'>You don't want to harm other living beings!</span>") - return - M.do_attack_animation(src) - if(M.damtype == BRUTE) - step_away(src,M,15) - switch(M.damtype) - if(BRUTE) - Unconscious(20) - take_overall_damage(rand(M.force/2, M.force)) - playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) - if(BURN) - take_overall_damage(0, rand(M.force/2, M.force)) - playsound(src, 'sound/items/welder.ogg', 50, TRUE) - if(TOX) - M.mech_toxin_damage(src) - else - return - updatehealth() - visible_message("<span class='danger'>[M.name] hits [src]!</span>", \ - "<span class='userdanger'>[M.name] hits you!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, M) - to_chat(M, "<span class='danger'>You hit [src]!</span>") - log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - else - step_away(src,M) - log_combat(M.occupant, src, "pushed", M) - visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>", \ - "<span class='warning'>[M] pushes you out of the way.</span>", "<span class='hear'>You hear aggressive shuffling!</span>", 5, M) - to_chat(M, "<span class='danger'>You push [src] out of the way.</span>") - /mob/living/fire_act() adjust_fire_stacks(3) IgniteMob() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3f436e36708..28cdee0c2fa 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -40,7 +40,7 @@ var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list(), "Camera"=list(), "Burglar"=list()) var/viewalerts = 0 var/icon/holo_icon//Default is assigned when AI is created. - var/obj/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye. + var/obj/vehicle/sealed/mecha/controlled_mech //For controlled_mech a mech, to determine whether to relaymove or use the AI eye. var/radio_enabled = TRUE //Determins if a carded AI can speak with its built in radio or not. radiomod = ";" //AIs will, by default, state their laws on the internal radio. var/obj/item/multitool/aiMulti @@ -422,7 +422,7 @@ to_chat(src, "Target is not on or near any active cameras on the station.") return if (href_list["ai_take_control"]) //Mech domination - var/obj/mecha/M = locate(href_list["ai_take_control"]) in GLOB.mechas_list + var/obj/vehicle/sealed/mecha/M = locate(href_list["ai_take_control"]) in GLOB.mechas_list if (!M) return diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index cf847de7146..c40dfd67fd5 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -57,7 +57,7 @@ if(NONE) return FALSE if(POWER_REQ_ALL) - return !T || !A || ((!A.power_equip || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/mecha))) + return !T || !A || ((!A.power_equip || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/vehicle/sealed/mecha))) /mob/living/silicon/ai/updatehealth() if(status_flags & GODMODE) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 06a19789451..5ccaa30e8c8 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -131,7 +131,7 @@ if(!search_objects) . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha)) for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines)) if(can_see(targets_from, HM, vision_range)) @@ -215,9 +215,9 @@ return TRUE if(ismecha(the_target)) - var/obj/mecha/M = the_target - if(M.occupant)//Just so we don't attack empty mechs - if(CanAttack(M.occupant)) + var/obj/vehicle/sealed/mecha/M = the_target + for(var/occupant in M.occupants) + if(CanAttack(occupant)) return TRUE if(istype(the_target, /obj/machinery/porta_turret)) @@ -561,7 +561,7 @@ toggle_ai(AI_ON) /mob/living/simple_animal/hostile/proc/ListTargetsLazy(_Z)//Step 1, find out what we can see - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha)) . = list() for (var/I in SSmobs.clients_by_zlevel[_Z]) var/mob/M = I diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index b842bddf20c..f737c7eed4a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -25,8 +25,8 @@ search_objects = 0 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - var/spawn_mecha_type = /obj/mecha/combat/marauder/mauler/loaded - var/obj/mecha/mecha //Ref to pilot's mecha instance + var/spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded + var/obj/vehicle/sealed/mecha/mecha //Ref to pilot's mecha instance var/required_mecha_charge = 7500 //If the pilot doesn't have a mecha, what charge does a potential Grand Theft Mecha need? (Defaults to half a battery) var/mecha_charge_evacuate = 50 //Amount of charge at which the pilot tries to abandon the mecha @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize() . = ..() - wanted_objects = typecacheof(/obj/mecha/combat, TRUE) + wanted_objects = typecacheof(/obj/vehicle/sealed/mecha/combat, TRUE) /mob/living/simple_animal/hostile/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path. name = "\improper Nanotrasen Mecha Pilot" @@ -50,7 +50,7 @@ icon_living = "nanotrasen" icon_state = "nanotrasen" faction = list("nanotrasen") - spawn_mecha_type = /obj/mecha/combat/marauder/loaded + spawn_mecha_type = /obj/vehicle/sealed/mecha/combat/marauder/loaded /mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/nanotrasen name = "\improper Nanotrasen Mecha Pilot" @@ -63,12 +63,12 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/Initialize() . = ..() if(spawn_mecha_type) - var/obj/mecha/M = new spawn_mecha_type (get_turf(src)) + var/obj/vehicle/sealed/mecha/M = new spawn_mecha_type (get_turf(src)) if(istype(M)) enter_mecha(M) -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/enter_mecha(obj/mecha/M) +/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/enter_mecha(obj/vehicle/sealed/mecha/M) if(!M) return 0 target = null //Target was our mecha, so null it out @@ -89,11 +89,11 @@ ranged = 0 wanted_objects = list() search_objects = 0 - if(mecha && mecha.lights_action) //an AI mecha is an EVIL EVIL thing, so let's not hide them in the dark - mecha.lights_action.Activate() + if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_defense_mode) && !mecha.defense_mode) + var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_defense_mode] + action.Trigger(TRUE) - -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/exit_mecha(obj/mecha/M) +/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/exit_mecha(obj/vehicle/sealed/mecha/M) if(!M) return 0 @@ -102,9 +102,9 @@ targets_from = src //Find a new mecha - wanted_objects = typecacheof(/obj/mecha/combat, TRUE) + wanted_objects = typecacheof(/obj/vehicle/sealed/mecha/combat, TRUE) var/search_aggressiveness = 2 - for(var/obj/mecha/combat/C in range(vision_range,src)) + for(var/obj/vehicle/sealed/mecha/combat/C in range(vision_range,src)) if(is_valid_mecha(C)) target = C search_aggressiveness = 3 //We can see a mech? RUN FOR IT, IGNORE MOBS! @@ -116,23 +116,23 @@ walk(M,0)//end any lingering movement loops, to prevent the haunted mecha bug //Checks if a mecha is valid for theft -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/is_valid_mecha(obj/mecha/M) +/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/is_valid_mecha(obj/vehicle/sealed/mecha/M) if(!M) - return 0 - if(M.occupant) - return 0 + return FALSE + if(LAZYLEN(M.occupants)) + return FALSE if(!M.has_charge(required_mecha_charge)) - return 0 + return FALSE if(M.obj_integrity < M.max_integrity*0.5) - return 0 - return 1 + return FALSE + return TRUE /mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/mecha_face_target(atom/A) if(mecha) var/dirto = get_dir(mecha,A) if(mecha.dir != dirto) //checking, because otherwise the mecha makes too many turn noises - mecha.mechturn(dirto) + mecha.vehicle_move(dirto, TRUE) @@ -163,8 +163,7 @@ var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_RANGED) if(possible_weapons.len) var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) //so we don't favor mecha.equipment[1] forever - if(ME.action(A)) - ME.start_cooldown() + if(ME.action(src,A)) return else @@ -177,16 +176,15 @@ if(possible_weapons.len) var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) mecha_face_target(target) - if(ME.action(target)) - ME.start_cooldown() + if(ME.action(src,target)) return - if(mecha.melee_can_hit) + if(!TIMER_COOLDOWN_CHECK(mecha, COOLDOWN_MECHA_MELEE_ATTACK)) mecha_face_target(target) - target.mech_melee_attack(mecha) + target.mech_melee_attack(mecha, src) else if(ismecha(target)) - var/obj/mecha/M = target + var/obj/vehicle/sealed/mecha/M = target if(is_valid_mecha(M)) enter_mecha(M) return @@ -199,49 +197,54 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/handle_automated_action() - if(..()) - if(!mecha) - for(var/obj/mecha/combat/C in range(src,vision_range)) - if(is_valid_mecha(C)) - target = C //Let's nab it! - minimum_distance = 1 - ranged = 0 - break - if(mecha) - var/list/L = PossibleThreats() - var/threat_count = L.len + . = ..() + if(!.) + return + if(!mecha) + for(var/obj/vehicle/sealed/mecha/combat/mecha_in_range in range(src,vision_range)) + if(is_valid_mecha(mecha_in_range)) + target = mecha_in_range //Let's nab it! + minimum_distance = 1 + ranged = 0 + break + if(mecha) + var/list/L = PossibleThreats() + var/threat_count = L.len - //Low Charge - Eject - if(!mecha.has_charge(mecha_charge_evacuate)) - exit_mecha(mecha) - return + //Low Charge - Eject + if(!mecha.has_charge(mecha_charge_evacuate)) + exit_mecha(mecha) + return //Too Much Damage - Eject - if(mecha.obj_integrity < mecha.max_integrity*0.1) - exit_mecha(mecha) - return + if(mecha.obj_integrity < mecha.max_integrity*0.1) + exit_mecha(mecha) + return - //Smoke if there's too many targets - Smoke Power - if(threat_count >= threat_use_mecha_smoke && prob(smoke_chance)) - if(mecha.smoke_action && mecha.smoke_action.owner && mecha.smoke) - mecha.smoke_action.Activate() + //Smoke if there's too many targets - Smoke Power + if(threat_count >= threat_use_mecha_smoke && prob(smoke_chance)) + if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_smoke) && !mecha.smoke_charges) + var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_smoke] + action.Trigger() - //Heavy damage - Defense Power or Retreat - if(mecha.obj_integrity < mecha.max_integrity*0.25) - if(prob(defense_mode_chance)) - if(mecha.defense_action && mecha.defense_action.owner && !mecha.defense_mode) - mecha.leg_overload_mode = 0 - mecha.defense_action.Activate(TRUE) - addtimer(CALLBACK(mecha.defense_action, /datum/action/innate/mecha/mech_defense_mode.proc/Activate, FALSE), 100) //10 seconds of defense, then toggle off + //Heavy damage - Defense Power or Retreat + if(mecha.obj_integrity < mecha.max_integrity*0.25) + if(prob(defense_mode_chance)) + if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_defense_mode) && !mecha.defense_mode) + var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_defense_mode] + action.Trigger(TRUE) + addtimer(CALLBACK(action, /datum/action/vehicle/sealed/mecha/mech_defense_mode.proc/Trigger, FALSE), 100) //10 seconds of defense, then toggle off - else if(prob(retreat_chance)) - //Speed boost if possible - if(mecha.overload_action && mecha.overload_action.owner && !mecha.leg_overload_mode) - mecha.overload_action.Activate(TRUE) - addtimer(CALLBACK(mecha.overload_action, /datum/action/innate/mecha/mech_defense_mode.proc/Activate, FALSE), 100) //10 seconds of speeeeed, then toggle off + else if(prob(retreat_chance)) + //Speed boost if possible + if(LAZYACCESSASSOC(mecha.occupant_actions, src, /datum/action/vehicle/sealed/mecha/mech_overload_mode) && !mecha.leg_overload_mode) + var/datum/action/action = mecha.occupant_actions[src][/datum/action/vehicle/sealed/mecha/mech_overload_mode] + mecha.leg_overload_mode = FALSE + action.Trigger(TRUE) + addtimer(CALLBACK(action, /datum/action/vehicle/sealed/mecha/mech_overload_mode.proc/Trigger, FALSE), 100) //10 seconds of speeeeed, then toggle off - retreat_distance = 50 - addtimer(VARSET_CALLBACK(src, retreat_distance, 0), 10 SECONDS) + retreat_distance = 50 + addtimer(VARSET_CALLBACK(src, retreat_distance, 0), 10 SECONDS) @@ -260,17 +263,17 @@ //~simple animals~ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/CanAttack(atom/the_target) if(ismecha(the_target)) - var/obj/mecha/M = the_target + var/obj/vehicle/sealed/mecha/M = the_target if(mecha) - if(M == mecha || !CanAttack(M.occupant)) - return 0 + if(M == mecha) //Dont kill yourself + return FALSE else //we're not in a mecha, so we check if we can steal it instead. if(is_valid_mecha(M)) - return 1 - else if (M.occupant && CanAttack(M.occupant)) - return 1 - else - return 0 + return TRUE + for(var/occupant in M.occupants) + if(CanAttack(occupant)) + return TRUE + return FALSE . = ..() @@ -289,6 +292,6 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/Goto(target, delay, minimum_distance) if(mecha) - walk_to(mecha, target, minimum_distance, mecha.step_in) + walk_to(mecha, target, minimum_distance, mecha.movedelay) else ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 33f77868602..32d4db1ed3c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -215,7 +215,7 @@ Difficulty: Medium if(L.client) empty += pick(((RANGE_TURFS(2, L) - RANGE_TURFS(1, L)) & turfs) - empty) // picks a turf within 2 of the creature not outside or in the shield any_attack = 1 - for(var/obj/mecha/M in T.contents) + for(var/obj/vehicle/sealed/mecha/M in T.contents) empty += pick(((RANGE_TURFS(2, M) - RANGE_TURFS(1, M)) & turfs) - empty) any_attack = 1 if(!any_attack) @@ -285,7 +285,7 @@ Difficulty: Medium to_chat(L, "<span class='userdanger'>You're hit by [source]'s fire breath!</span>") // deals damage to mechs - for(var/obj/mecha/M in T.contents) + for(var/obj/vehicle/sealed/mecha/M in T.contents) if(M in hit_list) continue hit_list += M @@ -372,7 +372,7 @@ Difficulty: Medium var/throwtarget = get_edge_target_turf(src, throw_dir) L.throw_at(throwtarget, 3) visible_message("<span class='warning'>[L] is thrown clear of [src]!</span>") - for(var/obj/mecha/M in orange(1, src)) + for(var/obj/vehicle/sealed/mecha/M in orange(1, src)) M.take_damage(75, BRUTE, MELEE, 1) for(var/mob/M in range(7, src)) @@ -444,7 +444,7 @@ Difficulty: Medium to_chat(L, "<span class='userdanger'>You fall directly into the pool of lava!</span>") // deals damage to mechs - for(var/obj/mecha/M in T.contents) + for(var/obj/vehicle/sealed/mecha/M in T.contents) M.take_damage(45, BRUTE, MELEE, 1) // changes turf to lava temporarily diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 2dcf01d4ca3..959c6de311a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -694,14 +694,15 @@ Difficulty: Hard L.adjustBruteLoss(damage) if(caster) log_combat(caster, L, "struck with a [name]") - for(var/obj/mecha/M in T.contents - hit_things) //also damage mechs. + for(var/obj/vehicle/sealed/mecha/M in T.contents - hit_things) //also damage mechs. hit_things += M - if(M.occupant) - if(friendly_fire_check && caster && caster.faction_check_mob(M.occupant)) + for(var/O in M.occupants) + var/mob/living/occupant = O + if(friendly_fire_check && caster && caster.faction_check_mob(occupant)) continue - to_chat(M.occupant, "<span class='userdanger'>Your [M.name] is struck by a [name]!</span>") - playsound(M,'sound/weapons/sear.ogg', 50, TRUE, -4) - M.take_damage(damage, BURN, 0, 0) + to_chat(occupant, "<span class='userdanger'>Your [M.name] is struck by a [name]!</span>") + playsound(M,'sound/weapons/sear.ogg', 50, TRUE, -4) + M.take_damage(damage, BURN, 0, 0) /obj/effect/temp_visual/hierophant/blast/visual icon_state = "hierophant_blast" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index dce179b1b4a..f82217c109c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -52,8 +52,8 @@ if(ismineralturf(target)) var/turf/closed/mineral/M = target M.gets_drilled() - if(istype(target, /obj/mecha)) - var/obj/mecha/M = target + if(istype(target, /obj/vehicle/sealed/mecha)) + var/obj/vehicle/sealed/mecha/M = target M.take_damage(50, BRUTE, MELEE, 1) //Elites can't talk (normally)! diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index 6605bf613ff..209eebe5bc4 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -98,10 +98,11 @@ if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege) if(!M.is_blind()) return M - for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you - if(M.occupant && M.occupant.client) - if(!M.occupant.is_blind()) - return M.occupant + for(var/obj/vehicle/sealed/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you + for(var/O in M.occupants) + var/mob/mechamob = O + if(mechamob.client && !mechamob.is_blind()) + return mechamob return null /mob/living/simple_animal/hostile/netherworld/migo diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 3a80e32d450..9d24b03bdeb 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -9,8 +9,8 @@ else enemies -= L else if(ismecha(A)) - var/obj/mecha/M = A - if(M.occupant) + var/obj/vehicle/sealed/mecha/M = A + if(LAZYLEN(M.occupants)) return A /mob/living/simple_animal/hostile/retaliate/ListTargets() @@ -31,10 +31,10 @@ if(faction_check_mob(M) && attack_same || !faction_check_mob(M)) enemies |= M else if(ismecha(A)) - var/obj/mecha/M = A - if(M.occupant) + var/obj/vehicle/sealed/mecha/M = A + if(LAZYLEN(M.occupants)) enemies |= M - enemies |= M.occupant + enemies |= M.occupants for(var/mob/living/simple_animal/hostile/retaliate/H in around) if(faction_check_mob(H) && !attack_same && !H.attack_same) diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm index c963ed0d717..61fed648467 100644 --- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm @@ -128,8 +128,8 @@ adjustHealth(-L.maxHealth * 0.5) return . = ..() - if(istype(target, /obj/mecha)) - var/obj/mecha/M = target + if(istype(target, /obj/vehicle/sealed/mecha)) + var/obj/vehicle/sealed/mecha/M = target M.take_damage(50, BRUTE, MELEE, 1) /mob/living/simple_animal/hostile/space_dragon/Move() @@ -221,7 +221,7 @@ L.adjustFireLoss(30) to_chat(L, "<span class='userdanger'>You're hit by [src]'s fire breath!</span>") // deals damage to mechs - for(var/obj/mecha/M in T.contents) + for(var/obj/vehicle/sealed/mecha/M in T.contents) if(M in hit_list) continue hit_list += M diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index cc3f9949402..722ebf0e5ff 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -134,10 +134,11 @@ if(M.client && CanAttack(M) && !M.has_unlimited_silicon_privilege) if(!M.is_blind()) return M - for(var/obj/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you - if(M.occupant && M.occupant.client) - if(!M.occupant.is_blind()) - return M.occupant + for(var/obj/vehicle/sealed/mecha/M in view(world.view + 1, check)) //assuming if you can see them they can see you + for(var/O in M.occupants) + var/mob/mechamob = O + if(mechamob.client && !mechamob.is_blind()) + return mechamob return null // Cannot talk diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 84fa8932571..9bc311d65fd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -450,8 +450,8 @@ if(L.stat != CONSCIOUS) return FALSE if (ismecha(the_target)) - var/obj/mecha/M = the_target - if (M.occupant) + var/obj/vehicle/sealed/mecha/M = the_target + if(LAZYLEN(M.occupants)) return FALSE return TRUE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 545f2c10701..503c9693c50 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1152,7 +1152,7 @@ return client.mouse_pointer_icon = initial(client.mouse_pointer_icon) if (ismecha(loc)) - var/obj/mecha/M = loc + var/obj/vehicle/sealed/mecha/M = loc if(M.mouse_pointer) client.mouse_pointer_icon = M.mouse_pointer else if (istype(loc, /obj/vehicle/sealed)) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index 376e07aecfc..189f70a71c9 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -190,7 +190,7 @@ They *could* go in their appropriate files, but this is supposed to be modular S.spark_system.start() //MECH// -/obj/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) +/obj/vehicle/sealed/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) if(!S || !H || !G) return INVALID_DRAIN @@ -198,7 +198,7 @@ They *could* go in their appropriate files, but this is supposed to be modular var/drain = 0 //Drain amount . = 0 - occupant_message("<span class='danger'>Warning: Unauthorized access through sub-route 4, block H, detected.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='danger'>Warning: Unauthorized access through sub-route 4, block H, detected.</span>") if(get_charge()) while(G.candrain && cell.charge > 0 && !maxcapacity) drain = rand(G.mindrain,G.maxdrain) diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index 577a87fc8f0..defd84f1b40 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -24,7 +24,7 @@ explosion(target, -1, 1, 3, 1, 0, flame_range = 4) if(ismecha(target)) - var/obj/mecha/M = target + var/obj/vehicle/sealed/mecha/M = target M.take_damage(anti_armour_damage) if(issilicon(target)) var/mob/living/silicon/S = target @@ -56,7 +56,7 @@ embedding = null var/sturdy = list( /turf/closed, - /obj/mecha, + /obj/vehicle/sealed/mecha, /obj/machinery/door/, /obj/machinery/door/poddoor/shutters ) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index f3b97ea39db..9a034485da7 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -491,7 +491,7 @@ /obj/effect/CanEnterDisposals() return -/obj/mecha/CanEnterDisposals() +/obj/vehicle/sealed/mecha/CanEnterDisposals() return /obj/machinery/disposal/bin/newHolderDestination(obj/structure/disposalholder/H) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index bd22f7ec20b..f1773c166ae 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -206,7 +206,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( continue if(bounty_ship_item_and_contents(AM, dry_run = FALSE)) matched_bounty = TRUE - if(!AM.anchored || istype(AM, /obj/mecha)) + if(!AM.anchored || istype(AM, /obj/vehicle/sealed/mecha)) export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex) if(ex.exported_atoms) diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm index 66146edea1e..4477489aaad 100644 --- a/code/modules/shuttle/white_ship.dm +++ b/code/modules/shuttle/white_ship.dm @@ -51,6 +51,6 @@ /obj/effect/spawner/lootdrop/whiteship_cere_ripley name = "25% mech 75% wreckage ripley spawner" - loot = list(/obj/mecha/working/ripley/mining = 1, + loot = list(/obj/vehicle/sealed/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5) lootdoubles = FALSE diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index b9dbc374ce4..4d15bcf0d32 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1148,13 +1148,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Dark Gygax Exosuit" desc = "A lightweight exosuit, painted in a dark scheme. Its speed and equipment selection make it excellent \ for hit-and-run style attacks. Features an incendiary carbine, flash bang launcher, teleporter, ion thrusters and a Tesla energy array." - item = /obj/mecha/combat/gygax/dark/loaded + item = /obj/vehicle/sealed/mecha/combat/gygax/dark/loaded cost = 80 /datum/uplink_item/support/honker name = "Dark H.O.N.K." desc = "A clown combat mech equipped with bombanana peel and tearstache grenade launchers, as well as the ubiquitous HoNkER BlAsT 5000." - item = /obj/mecha/combat/honker/dark/loaded + item = /obj/vehicle/sealed/mecha/combat/honker/dark/loaded cost = 80 include_modes = list(/datum/game_mode/nuclear/clown_ops) @@ -1162,7 +1162,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Mauler Exosuit" desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." - item = /obj/mecha/combat/marauder/mauler/loaded + item = /obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded cost = 140 // Stealth Items diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 2c54bf605cc..293a9567540 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -7,6 +7,7 @@ armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) density = TRUE anchored = FALSE + COOLDOWN_DECLARE(cooldown_vehicle_move) var/list/mob/occupants //mob = bitflags of their control level. var/max_occupants = 1 var/max_drivers = 1 @@ -124,9 +125,9 @@ return TRUE /obj/vehicle/proc/vehicle_move(direction) - if(lastmove + movedelay > world.time) + if(!COOLDOWN_FINISHED(src, cooldown_vehicle_move)) return FALSE - lastmove = world.time + COOLDOWN_START(src, cooldown_vehicle_move, movedelay) if(trailer) var/dir_to_move = get_dir(trailer.loc, loc) var/did_move = step(src, direction) diff --git a/code/game/mecha/mecha.dm b/code/modules/vehicles/mecha/_mecha.dm similarity index 50% rename from code/game/mecha/mecha.dm rename to code/modules/vehicles/mecha/_mecha.dm index 1eda8681fe7..34bebd2bb27 100644 --- a/code/game/mecha/mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -1,137 +1,183 @@ -/obj/mecha +//////////////////WELCOME TO MECHA.DM, ENJOY YOUR STAY\\\\\\\\\\\\\\\\\ + +/** + * Mechs are now (finally) vehicles, this means you can make them multicrew + * They can also grant select ability buttons based on occupant bitflags + * + * Movement is handled through vehicle_move() which is called by relaymove + * Clicking is done by way of signals registering to the entering mob + * NOTE: MMIS are NOT mobs but instead contain a brain that is, so you need special checks + * AI also has special checks becaus it gets in and out of the mech differently + * Always call remove_occupant(mob) when leaving the mech so the mob is removed properly + * + * For multi-crew, you need to set how the occupants recieve ability bitflags corresponding to their status on the vehicle(i.e: driver, gunner etc) + * Abilities can then be set to only apply for certain bitflags and are assigned as such automatically + * + * Clicks are wither translated into mech_melee_attack (see mech_melee_attack.dm) + * Or are used to call action() on equipped gear + * Cooldown for gear is on the mech because exploits + */ +/obj/vehicle/sealed/mecha name = "mecha" desc = "Exosuit" icon = 'icons/mecha/mecha.dmi' - density = TRUE //Dense. To raise the heat. - move_force = MOVE_FORCE_VERY_STRONG - move_resist = MOVE_FORCE_EXTREMELY_STRONG resistance_flags = FIRE_PROOF | ACID_PROOF - layer = BELOW_MOB_LAYER//icon draw layer - infra_luminosity = 15 //byond implementation is bugged. - force = 5 flags_1 = HEAR_1 + max_integrity = 300 + armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) + movedelay = 1 SECONDS + anchored = TRUE + emulate_door_bumps = TRUE + COOLDOWN_DECLARE(mecha_bump_smash) light_system = MOVABLE_LIGHT light_on = FALSE - var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming. - var/can_move = 0 //time of next allowed movement - var/mob/living/carbon/occupant = null - var/step_in = 10 //make a step in step_in/10 sec. - var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. - var/normal_step_energy_drain = 10 //How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain. + ///What direction will the mech face when entered/powered on? Defaults to South. + var/dir_in = SOUTH + ///How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain. + var/normal_step_energy_drain = 10 + ///How much energy the mech will consume each time it moves. this is the current active energy consumed var/step_energy_drain = 10 + ///How much energy we drain each time we mechpunch someone var/melee_energy_drain = 15 + ///The minimum amount of energy charge consumed by leg overload var/overload_step_energy_drain_min = 100 - max_integrity = 300 //max_integrity is base health - var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. - armor = list(MELEE = 20, BULLET = 10, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) + ///chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. + var/deflect_chance = 10 + ///Modifiers for directional armor var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5) - var/equipment_disabled = 0 //disabled due to EMP + ///if we cant use our equipment(such as due to EMP) + var/equipment_disabled = FALSE /// Keeps track of the mech's cell var/obj/item/stock_parts/cell/cell /// Keeps track of the mech's scanning module var/obj/item/stock_parts/scanning_module/scanmod /// Keeps track of the mech's capacitor var/obj/item/stock_parts/capacitor/capacitor + ///Whether the mechs maintenance protocols are on or off var/construction_state = MECHA_LOCKED - var/last_message = 0 - var/add_req_access = 1 - var/maint_access = 0 - var/dna_lock //dna-locking the mech - var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference + ///Contains flags for the mecha + var/mecha_flags = ADDING_ACCESS_POSSIBLE | CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS + ///Stores the DNA enzymes of a carbon so tht only they can access the mech + var/dna_lock + ///Spark effects are handled by this datum var/datum/effect_system/spark_spread/spark_system = new - var/lights = FALSE + ///How powerful our lights are var/lights_power = 6 - var/last_user_hud = 1 // used to show/hide the mecha hud while preserving previous preference - var/completely_disabled = FALSE //stops the mech from doing anything + ///Just stop the mech from doing anything + var/completely_disabled = FALSE + ///Whether this mech is allowed to move diagonally + var/allow_diagonal_movement = FALSE + ///Whether or not the mech destroys walls by running into it. + var/bumpsmash = FALSE - var/bumpsmash = 0 //Whether or not the mech destroys walls by running into it. - //inner atmos - var/use_internal_tank = 0 + ///////////ATMOS + ///Whether we are currrently drawing from the internal tank + var/use_internal_tank = FALSE + ///The setting of the valve on the internal tank var/internal_tank_valve = ONE_ATMOSPHERE + ///The internal air tank obj of the mech var/obj/machinery/portable_atmospherics/canister/internal_tank + ///Internal air mix datum var/datum/gas_mixture/cabin_air - var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port = null + ///The connected air port, if we have one + var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port + ///Special version of the radio, which is unsellable var/obj/item/radio/mech/radio var/list/trackers = list() var/max_temperature = 25000 - var/internal_damage_threshold = 50 //health percentage below which internal damage is possible - var/internal_damage = 0 //contains bitflags + ///health percentage below which internal damage is possible + var/internal_damage_threshold = 50 + ///Bitflags for internal damage + var/internal_damage = NONE - var/list/operation_req_access = list()//required access level for mecha operation - var/list/internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT + ///required access level for mecha operation + var/list/operation_req_access = list() + ///required access to change internal components + var/list/internals_req_access = list(ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE) + ///Typepath for the wreckage it spawns when destroyed var/wreckage var/list/equipment = new + ///Current active equipment var/obj/item/mecha_parts/mecha_equipment/selected + ///Maximum amount of equipment we can have var/max_equip = 3 - var/step_silent = FALSE //Used for disabling mech step sounds while using thrusters or pushing off lockers + ///Whether our steps are silent, for example in zero-G + var/step_silent = FALSE + ///Sound played when the mech moves var/stepsound = 'sound/mecha/mechstep.ogg' + ///Sound played when the mech walks var/turnsound = 'sound/mecha/mechturn.ogg' + ///Cooldown duration between melee punches var/melee_cooldown = 10 - var/melee_can_hit = 1 - var/silicon_pilot = FALSE //set to true if an AI or MMI is piloting. + ///TIme taken to leave the mech + var/exit_delay = 2 SECONDS + ///Time you get slept for if you get forcible ejected by the mech exploding + var/destruction_sleep_duration = 2 SECONDS + ///Whether outside viewers can see the pilot inside + var/enclosed = TRUE + ///In case theres a different iconstate for AI/MMI pilot(currently only used for ripley) + var/silicon_icon_state = null + ///Currently ejecting, and unable to do things + var/is_currently_ejecting = FALSE - var/enter_delay = 40 //Time taken to enter the mech - var/exit_delay = 20 //Time to exit mech - var/destruction_sleep_duration = 20 //Time that mech pilot is put to sleep for if mech is destroyed - var/enclosed = TRUE //Set to false for open-cockpit mechs - var/silicon_icon_state = null //if the mech has a different icon when piloted by an AI or MMI - var/is_currently_ejecting = FALSE //Mech cannot use equiptment when true, set to true if pilot is trying to exit mech + var/datum/effect_system/smoke_spread/smoke_system = new - //Action datums - var/datum/action/innate/mecha/mech_eject/eject_action = new - var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new - var/datum/action/innate/mecha/mech_cycle_equip/cycle_action = new - var/datum/action/innate/mecha/mech_toggle_lights/lights_action = new - var/datum/action/innate/mecha/mech_view_stats/stats_action = new - var/datum/action/innate/mecha/mech_defense_mode/defense_action = new - var/datum/action/innate/mecha/mech_overload_mode/overload_action = new - var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one - var/datum/action/innate/mecha/mech_smoke/smoke_action = new - var/datum/action/innate/mecha/mech_zoom/zoom_action = new - var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new - var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new - var/datum/action/innate/mecha/strafe/strafing_action = new - - //Action vars + ////Action vars + ///Ref to any active thrusters we might have var/obj/item/mecha_parts/mecha_equipment/thrusters/active_thrusters + + ///Bool for energy shield on/off var/defense_mode = FALSE + + ///Bool for leg overload on/off var/leg_overload_mode = FALSE + ///Energy use modifier for leg overload var/leg_overload_coeff = 100 + + //Bool for zoom on/off var/zoom_mode = FALSE - var/smoke = 5 - var/smoke_ready = 1 - var/smoke_cooldown = 100 + + ///Remaining smoke charges + var/smoke_charges = 5 + ///Cooldown between using smoke + var/smoke_cooldown = 10 SECONDS + + ///Bool for if the mech is currently phasing var/phasing = FALSE + ///Power we use every time we phaze through something var/phasing_energy_drain = 200 - var/phase_state = "" //icon_state when phasing - var/strafe = FALSE //If we are strafing - var/canstrafe = TRUE //if we can turn on strafing - var/haslights = TRUE //if we can turn on lights + ///icon_state for flick() when phazing + var/phase_state = "" - var/nextsmash = 0 - var/smashcooldown = 3 //deciseconds + ///Wether we are strafing + var/strafe = FALSE + + ///Cooldown length between bumpsmashes + var/smashcooldown = 3 + + ///Bool for whether this mech can only be used on lavaland + var/lavaland_only = FALSE - var/occupant_sight_flags = 0 //sight flags to give to the occupant (e.g. mech mining scanner gives meson-like vision) - var/mouse_pointer hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD) /obj/item/radio/mech //this has to go somewhere -/obj/mecha/Initialize() +/obj/vehicle/sealed/mecha/Initialize() . = ..() - icon_state += "-open" add_radio() add_cabin() - if (enclosed) + if(enclosed) add_airtank() + RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE , .proc/disconnect_air) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/play_stepsound) spark_system.set_up(2, 0, src) spark_system.attach(src) smoke_system.set_up(3, src) @@ -149,77 +195,75 @@ diag_hud_set_mechhealth() diag_hud_set_mechcell() diag_hud_set_mechstat() + update_icon() -/obj/mecha/update_icon_state() - if(silicon_pilot && silicon_icon_state) - icon_state = silicon_icon_state - -/obj/mecha/get_cell() - return cell - -/obj/mecha/rust_heretic_act() - take_damage(500, BRUTE) - -/obj/mecha/Destroy() - if(occupant) - occupant.SetSleeping(destruction_sleep_duration) - go_out() - var/mob/living/silicon/ai/AI - for(var/mob/M in src) //Let's just be ultra sure - if(isAI(M)) - occupant = null - AI = M //AIs are loaded into the mech computer itself. When the mech dies, so does the AI. They can be recovered with an AI card from the wreck. +/obj/vehicle/sealed/mecha/Destroy() + for(var/M in occupants) + var/mob/living/occupant = M + if(isAI(occupant)) + occupant.gib() //No wreck, no AI to recover else - M.forceMove(loc) - for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) - E.detach(loc) - qdel(E) + occupant.forceMove(loc) + occupant.SetSleeping(destruction_sleep_duration) + if(LAZYLEN(equipment)) + for(var/E in equipment) + var/obj/item/mecha_parts/mecha_equipment/equip = E + equip.detach(loc) + qdel(equip) if(cell) - qdel(cell) + QDEL_NULL(cell) if(scanmod) - qdel(scanmod) + QDEL_NULL(scanmod) if(capacitor) - qdel(capacitor) + QDEL_NULL(capacitor) if(internal_tank) - qdel(internal_tank) - if(AI) - AI.gib() //No wreck, no AI to recover + QDEL_NULL(internal_tank) STOP_PROCESSING(SSobj, src) GLOB.poi_list.Remove(src) - equipment.Cut() - cell = null - scanmod = null - capacitor = null - internal_tank = null + LAZYCLEARLIST(equipment) if(loc) loc.assume_air(cabin_air) air_update_turf() else qdel(cabin_air) cabin_air = null - qdel(spark_system) - spark_system = null - qdel(smoke_system) - smoke_system = null + QDEL_NULL(spark_system) + QDEL_NULL(smoke_system) GLOB.mechas_list -= src //global mech list return ..() -/obj/mecha/proc/restore_equipment() - equipment_disabled = 0 - if(occupant) - SEND_SOUND(occupant, sound('sound/items/timer.ogg', volume=50)) - to_chat(occupant, "<span=notice>Equipment control unit has been rebooted successfully.</span>") - occupant.update_mouse_pointer() +/obj/vehicle/sealed/mecha/update_icon_state() + if((mecha_flags & SILICON_PILOT) && silicon_icon_state) + icon_state = silicon_icon_state + else if(LAZYLEN(occupants)) + icon_state = initial(icon_state) + else + icon_state = initial(icon_state)+ "-open" -/obj/mecha/CheckParts(list/parts_list) + +/obj/vehicle/sealed/mecha/get_cell() + return cell + +/obj/vehicle/sealed/mecha/rust_heretic_act() + take_damage(500, BRUTE) + +/obj/vehicle/sealed/mecha/proc/restore_equipment() + equipment_disabled = FALSE + for(var/occupant in occupants) + var/mob/mob_occupant + SEND_SOUND(mob_occupant, sound('sound/items/timer.ogg', volume=50)) + to_chat(mob_occupant, "<span=notice>Equipment control unit has been rebooted successfully.</span>") + mob_occupant.update_mouse_pointer() + +/obj/vehicle/sealed/mecha/CheckParts(list/parts_list) ..() cell = locate(/obj/item/stock_parts/cell) in contents scanmod = locate(/obj/item/stock_parts/scanning_module) in contents capacitor = locate(/obj/item/stock_parts/capacitor) in contents update_part_values() -/obj/mecha/proc/update_part_values() ///Updates the values given by scanning module and capacitor tier, called when a part is removed or inserted. +/obj/vehicle/sealed/mecha/proc/update_part_values() ///Updates the values given by scanning module and capacitor tier, called when a part is removed or inserted. if(scanmod) normal_step_energy_drain = 20 - (5 * scanmod.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best step_energy_drain = normal_step_energy_drain @@ -236,12 +280,12 @@ ////// Helpers ///////// //////////////////////// -/obj/mecha/proc/add_airtank() +/obj/vehicle/sealed/mecha/proc/add_airtank() internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) return internal_tank ///Adds a cell, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this. -/obj/mecha/proc/add_cell(obj/item/stock_parts/cell/C=null) +/obj/vehicle/sealed/mecha/proc/add_cell(obj/item/stock_parts/cell/C=null) QDEL_NULL(cell) if(C) C.forceMove(src) @@ -250,7 +294,7 @@ cell = new /obj/item/stock_parts/cell/high/plus(src) ///Adds a scanning module, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this. -/obj/mecha/proc/add_scanmod(obj/item/stock_parts/scanning_module/sm=null) +/obj/vehicle/sealed/mecha/proc/add_scanmod(obj/item/stock_parts/scanning_module/sm=null) QDEL_NULL(scanmod) if(sm) sm.forceMove(src) @@ -259,7 +303,7 @@ scanmod = new /obj/item/stock_parts/scanning_module(src) ///Adds a capacitor, for use in Map-spawned mechs, Nuke Ops mechs, and admin-spawned mechs. Mechs built by hand will replace this. -/obj/mecha/proc/add_capacitor(obj/item/stock_parts/capacitor/cap=null) +/obj/vehicle/sealed/mecha/proc/add_capacitor(obj/item/stock_parts/capacitor/cap=null) QDEL_NULL(capacitor) if(cap) cap.forceMove(src) @@ -267,7 +311,7 @@ else capacitor = new /obj/item/stock_parts/capacitor(src) -/obj/mecha/proc/add_cabin() +/obj/vehicle/sealed/mecha/proc/add_cabin() cabin_air = new cabin_air.temperature = T20C cabin_air.volume = 200 @@ -276,24 +320,22 @@ cabin_air.gases[/datum/gas/nitrogen][MOLES] = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) return cabin_air -/obj/mecha/proc/add_radio() +/obj/vehicle/sealed/mecha/proc/add_radio() radio = new(src) radio.name = "[src] radio" radio.icon = icon radio.icon_state = icon_state radio.subspace_transmission = TRUE -/obj/mecha/proc/can_use(mob/user) - if(user != occupant) - return 0 - if(user && ismob(user)) +/obj/vehicle/sealed/mecha/proc/can_use(mob/user) + if(istype(user) && is_occupant(user)) if(!user.incapacitated()) - return 1 - return 0 + return TRUE + return FALSE //////////////////////////////////////////////////////////////////////////////// -/obj/mecha/examine(mob/user) +/obj/vehicle/sealed/mecha/examine(mob/user) . = ..() var/integrity = obj_integrity*100/max_integrity switch(integrity) @@ -315,10 +357,11 @@ for(var/obj/item/mecha_parts/mecha_equipment/ME in visible_equipment) . += "[icon2html(ME, user)] \A [ME]." if(!enclosed) - if(silicon_pilot) + if(mecha_flags & SILICON_PILOT) . += "[src] appears to be piloting itself..." - else if(occupant && occupant != user) //!silicon_pilot implied - . += "You can see [occupant] inside." + else + for(var/occupante in occupants) + . += "You can see [occupante] inside." if(ishuman(user)) var/mob/living/carbon/human/H = user for(var/O in H.held_items) @@ -327,7 +370,7 @@ break //in case user is holding two guns //processing internal damage, temperature, air regulation, alert updates, lights power use. -/obj/mecha/process() +/obj/vehicle/sealed/mecha/process() var/internal_temp_regulation = 1 if(internal_damage) @@ -394,103 +437,101 @@ else //just delete the cabin gas, we're in space or some shit qdel(removed) - if(occupant) - if(cell) - var/cellcharge = cell.charge/cell.maxcharge - switch(cellcharge) - if(0.75 to INFINITY) - occupant.clear_alert("charge") - if(0.5 to 0.75) - occupant.throw_alert("charge", /obj/screen/alert/lowcell, 1) - if(0.25 to 0.5) - occupant.throw_alert("charge", /obj/screen/alert/lowcell, 2) - if(0.01 to 0.25) - occupant.throw_alert("charge", /obj/screen/alert/lowcell, 3) + if(occupants) + for(var/i in occupants) + var/mob/living/occupant = i + if(cell) + var/cellcharge = cell.charge/cell.maxcharge + switch(cellcharge) + if(0.75 to INFINITY) + occupant.clear_alert("charge") + if(0.5 to 0.75) + occupant.throw_alert("charge", /obj/screen/alert/lowcell, 1) + if(0.25 to 0.5) + occupant.throw_alert("charge", /obj/screen/alert/lowcell, 2) + if(0.01 to 0.25) + occupant.throw_alert("charge", /obj/screen/alert/lowcell, 3) + else + occupant.throw_alert("charge", /obj/screen/alert/emptycell) + + var/integrity = obj_integrity/max_integrity*100 + switch(integrity) + if(30 to 45) + occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 1) + if(15 to 35) + occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 2) + if(-INFINITY to 15) + occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 3) else - occupant.throw_alert("charge", /obj/screen/alert/emptycell) + occupant.clear_alert("mech damage") + var/atom/checking = occupant.loc + // recursive check to handle all cases regarding very nested occupants, + // such as brainmob inside brainitem inside MMI inside mecha + while(!isnull(checking)) + if(isturf(checking)) + // hit a turf before hitting the mecha, seems like they have been moved out + occupant.clear_alert("charge") + occupant.clear_alert("mech damage") + occupant = null + break + else if (checking == src) + break // all good + checking = checking.loc - var/integrity = obj_integrity/max_integrity*100 - switch(integrity) - if(30 to 45) - occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 1) - if(15 to 35) - occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 2) - if(-INFINITY to 15) - occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 3) - else - occupant.clear_alert("mech damage") - var/atom/checking = occupant.loc - // recursive check to handle all cases regarding very nested occupants, - // such as brainmob inside brainitem inside MMI inside mecha - while (!isnull(checking)) - if (isturf(checking)) - // hit a turf before hitting the mecha, seems like they have - // been moved out - occupant.clear_alert("charge") - occupant.clear_alert("mech damage") - RemoveActions(occupant, human_occupant=1) - occupant = null - break - else if (checking == src) - break // all good - checking = checking.loc - - if(lights) + if(mecha_flags & LIGHTS_ON) var/lights_energy_drain = 2 use_power(lights_energy_drain) - if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated. - visible_message("<span class='warning'>[occupant] tumbles out of the cockpit!</span>") - go_out() //Maybe we should install seat belts? + for(var/b in occupants) + var/mob/living/occupant = b + if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated. + visible_message("<span class='warning'>[occupant] tumbles out of the cockpit!</span>") + mob_exit(occupant) //bye bye //Diagnostic HUD updates diag_hud_set_mechhealth() diag_hud_set_mechcell() diag_hud_set_mechstat() -/obj/mecha/fire_act() //Check if we should ignite the pilot of an open-canopy mech +/obj/vehicle/sealed/mecha/fire_act() //Check if we should ignite the pilot of an open-canopy mech . = ..() - if (occupant && !enclosed && !silicon_pilot) - if (occupant.fire_stacks < 5) - occupant.fire_stacks += 1 - occupant.IgniteMob() + if(LAZYLEN(occupants) && !enclosed && !(mecha_flags & SILICON_PILOT)) + for(var/M in occupants) + var/mob/living/cookedalive = M + if(cookedalive.fire_stacks < 5) + cookedalive.fire_stacks += 1 + cookedalive.IgniteMob() -/obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. - return - -/obj/mecha/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, list/message_mods = list()) - . = ..() - if(speaker == occupant) - if(radio?.broadcasting) - radio.talk_into(speaker, text, , spans, message_language, message_mods) - //flick speech bubble - var/list/speech_bubble_recipients = list() - for(var/mob/M in get_hearers_in_view(7,src)) - if(M.client) - speech_bubble_recipients.Add(M.client) - INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) +/obj/vehicle/sealed/mecha/proc/display_speech_bubble(datum/source, list/speech_args) + SIGNAL_HANDLER + var/list/speech_bubble_recipients = get_hearers_in_view(7,src) + for(var/mob/M in speech_bubble_recipients) + if(M.client) + speech_bubble_recipients.Add(M.client) + INVOKE_ASYNC(GLOBAL_PROC, /proc/flick_overlay, image('icons/mob/talk.dmi', src, "machine[say_test(speech_args[SPEECH_MESSAGE])]",MOB_LAYER+1), speech_bubble_recipients, 30) //////////////////////////// ///// Action processing //// //////////////////////////// - -/obj/mecha/proc/click_action(atom/target,mob/user,params) - if(!occupant || occupant != user ) - return +/obj/vehicle/sealed/mecha/proc/on_mouseclick(mob/user, atom/target, params) + SIGNAL_HANDLER if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled return if(completely_disabled) return if(is_currently_ejecting) return + var/list/mouse_control = params2list(params) + if(isAI(user) && !mouse_control["middle"])//AIs use MMB + return if(phasing) - occupant_message("<span class='warning'>Unable to interact with objects while phasing.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Unable to interact with objects while phasing.</span>") return if(user.incapacitated()) return if(construction_state) - occupant_message("<span class='warning'>Maintenance protocols in effect.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Maintenance protocols in effect.</span>") return if(!get_charge()) return @@ -500,39 +541,32 @@ if(dir_to_target && !(dir_to_target & dir))//wrong direction return if(internal_damage & MECHA_INT_CONTROL_LOST) - if (!target) - return target = pick(view(3,target)) - + if(!target) + return var/mob/living/L = user - if(!Adjacent(target)) - if(selected && selected.is_ranged()) + if(selected) + if(!Adjacent(target) && (selected.range & MECHA_RANGED)) if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful) - to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>") + to_chat(L, "<span class='warning'>You don't want to harm other living beings!</span>") return - if(selected.action(target,params)) - selected.start_cooldown() - else if(selected && selected.is_melee()) - if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) - to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>") + selected.action(user, target, params) return - if(selected.action(target,params)) - selected.start_cooldown() - else - if(internal_damage & MECHA_INT_CONTROL_LOST) - var/list/possible_targets = oview(1,src) - if (!length(possible_targets)) + if((selected.range & MECHA_MELEE) && Adjacent(target)) + if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) + to_chat(L, "<span class='warning'>You don't want to harm other living beings!</span>") return - target = pick(possible_targets) - if(!melee_can_hit || !istype(target, /atom)) + selected.action(user, target, params) return - target.mech_melee_attack(src) - melee_can_hit = FALSE - addtimer(VARSET_CALLBACK(src, melee_can_hit, TRUE), melee_cooldown) - - -/obj/mecha/proc/range_action(atom/target) - return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MELEE_ATTACK) || !istype(target, /atom) || !Adjacent(target)) + return + if(internal_damage & MECHA_INT_CONTROL_LOST) + var/list/possible_targets = oview(1,src) + if(!length(possible_targets)) + return + target = pick(possible_targets) + target.mech_melee_attack(src, user) + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MELEE_ATTACK, melee_cooldown) ////////////////////////////////// @@ -540,17 +574,18 @@ ////////////////////////////////// ///Plays the mech step sound effect. Split from movement procs so that other mechs (HONK) can override this one specific part. -/obj/mecha/proc/play_stepsound() +/obj/vehicle/sealed/mecha/proc/play_stepsound() + SIGNAL_HANDLER if(stepsound) playsound(src,stepsound,40,1) -/obj/mecha/Move(atom/newloc, direct) - . = ..() - if (internal_tank?.disconnect()) // Something moved us and broke connection - occupant_message("<span class='warning'>Air port connection has been severed!</span>") +/obj/vehicle/sealed/mecha/proc/disconnect_air() + SIGNAL_HANDLER + if(internal_tank.disconnect()) // Something moved us and broke connection + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Air port connection has been severed!</span>") log_message("Lost connection to gas port.", LOG_MECHA) -/obj/mecha/Process_Spacemove(movement_dir = 0) +/obj/vehicle/sealed/mecha/Process_Spacemove(movement_dir = 0) . = ..() if(.) return TRUE @@ -560,124 +595,105 @@ if(istype(backup) && movement_dir && !backup.anchored) if(backup.newtonian_move(turn(movement_dir, 180))) step_silent = TRUE - if(occupant) - to_chat(occupant, "<span class='info'>You push off [backup] to propel yourself.</span>") + if(return_drivers()) + to_chat(occupants, "[icon2html(src, occupants)]<span class='info'>The [src] push off [backup] to propel yourself.</span>") return TRUE - if(can_move <= world.time && active_thrusters && movement_dir && active_thrusters.thrust(movement_dir)) + if(movedelay <= world.time && active_thrusters && movement_dir && active_thrusters.thrust(movement_dir)) step_silent = TRUE return TRUE return FALSE -/obj/mecha/relaymove(mob/living/user, direction) +/obj/vehicle/sealed/mecha/vehicle_move(direction, forcerotate = FALSE) + if(!COOLDOWN_FINISHED(src, cooldown_vehicle_move)) + return FALSE + COOLDOWN_START(src, cooldown_vehicle_move, movedelay) if(completely_disabled) - return + return FALSE if(!direction) - return - if(user != occupant) //While not "realistic", this piece is player friendly. - user.forceMove(get_turf(src)) - to_chat(user, "<span class='notice'>You climb out from [src].</span>") - return 0 + return FALSE if(internal_tank?.connected_port) - if(world.time - last_message > 20) - occupant_message("<span class='warning'>Unable to move while connected to the air system port!</span>") - last_message = world.time - return 0 + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Unable to move while connected to the air system port!</span>") + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) + return FALSE if(construction_state) - if(world.time - last_message > 20) - occupant_message("<span class='danger'>Maintenance protocols in effect.</span>") - last_message = world.time - return - return domove(direction) + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_MESSAGE)) + to_chat(occupants, "[icon2html(src, occupants)]<span class='danger'>Maintenance protocols in effect.</span>") + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_MESSAGE, 2 SECONDS) + return FALSE -/obj/mecha/proc/domove(direction) - if(can_move >= world.time) - return 0 if(!Process_Spacemove(direction)) - return 0 + return FALSE if(!has_charge(step_energy_drain)) - return 0 + return FALSE if(zoom_mode) - if(world.time - last_message > 20) - occupant_message("<span class='warning'>Unable to move while in zoom mode!</span>") - last_message = world.time - return 0 + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Unable to move while in zoom mode!</span>") + return FALSE if(!cell) - if(world.time - last_message > 20) - occupant_message("<span class='warning'>Missing power cell.</span>") - last_message = world.time - return 0 + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Missing power cell.</span>") + return FALSE if(!scanmod || !capacitor) - if(world.time - last_message > 20) - occupant_message("<span class='warning'>Missing [scanmod? "capacitor" : "scanning module"].</span>") - last_message = world.time - return 0 + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Missing [scanmod? "capacitor" : "scanning module"].</span>") + return FALSE + if(lavaland_only && is_mining_level(z)) + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Invalid Environment.</span>") + return FALSE + + var/olddir = dir - var/move_result = 0 - var/oldloc = loc if(internal_damage & MECHA_INT_CONTROL_LOST) - set_glide_size(DELAY_TO_GLIDE_SIZE(step_in)) - move_result = mechsteprand() - else if(dir != direction && (!strafe || occupant.client.keys_held["Alt"])) - move_result = mechturn(direction) - else - set_glide_size(DELAY_TO_GLIDE_SIZE(step_in)) - move_result = mechstep(direction) - if(move_result || loc != oldloc)// halfway done diagonal move still returns false - use_power(step_energy_drain) - can_move = world.time + step_in - return 1 - return 0 + direction = pick(GLOB.alldirs) -/obj/mecha/proc/mechturn(direction) - setDir(direction) - if(turnsound) - playsound(src,turnsound,40,TRUE) - return 1 + //only mechs with diagonal movement may move diagonally + if(!allow_diagonal_movement && ISDIAGONALDIR(direction)) + return TRUE + + //if we're not facing the way we're going rotate us + if(dir != direction && !strafe || forcerotate) + setDir(direction) + if(turnsound) + playsound(src,turnsound,40,TRUE) + return TRUE + + set_glide_size(DELAY_TO_GLIDE_SIZE(movedelay)) + //Otherwise just walk normally + . = step(src,direction, dir) -/obj/mecha/proc/mechstep(direction) - var/current_dir = dir - . = step(src,direction) if(strafe) - setDir(current_dir) - if(. && !step_silent) - play_stepsound() - step_silent = FALSE + for(var/D in return_drivers()) + var/mob/driver = D + if(driver.client?.keys_held["Alt"]) + return + setDir(olddir) -/obj/mecha/proc/mechsteprand() - . = step_rand(src) - if(. && !step_silent) - play_stepsound() - step_silent = FALSE -/obj/mecha/Bump(atom/obstacle) +/obj/vehicle/sealed/mecha/Bump(atom/obstacle) if(phasing && get_charge() >= phasing_energy_drain && !throwing) - if(!can_move) - return - can_move = 0 if(phase_state) flick(phase_state, src) - forceMove(get_step(src,dir)) + forceMove(get_step(src,dir))//This is jank I hate it thanks, this should be done thrugh move not this dumb shit use_power(phasing_energy_drain) - addtimer(VARSET_CALLBACK(src, can_move, TRUE), step_in*3) - else - if(..()) //mech was thrown - return - if(bumpsmash && occupant) //Need a pilot to push the PUNCH button. - if(nextsmash < world.time) - obstacle.mech_melee_attack(src) - nextsmash = world.time + smashcooldown - if(!obstacle || obstacle.CanPass(src,get_step(src,dir))) - step(src,dir) - if(isobj(obstacle)) - var/obj/O = obstacle - if(!O.anchored && O.move_resist <= move_force) - step(obstacle, dir) - else if(ismob(obstacle)) - var/mob/M = obstacle - if(M.move_resist <= move_force) - step(obstacle, dir) + addtimer(VARSET_CALLBACK(src, movedelay, TRUE), movedelay*3) + return + . = ..() + if(.) //mech was thrown/door/whatever + return + if(bumpsmash) //Need a pilot to push the PUNCH button. + if(COOLDOWN_FINISHED(src, mecha_bump_smash)) + obstacle.mech_melee_attack(src) + COOLDOWN_START(src, mecha_bump_smash, smashcooldown) + if(!obstacle || obstacle.CanPass(src,get_step(src,dir))) + step(src,dir) + if(isobj(obstacle)) + var/obj/obj_obstacle = obstacle + if(!obj_obstacle.anchored && obj_obstacle.move_resist <= move_force) + step(obstacle, dir) + else if(ismob(obstacle)) + var/mob/mob_obstacle = obstacle + if(mob_obstacle.move_resist <= move_force) + step(obstacle, dir) @@ -687,7 +703,7 @@ //////// Internal damage //////// /////////////////////////////////// -/obj/mecha/proc/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null) +/obj/vehicle/sealed/mecha/proc/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null) if(!islist(possible_int_damage) || !length(possible_int_damage)) return if(prob(20)) @@ -701,25 +717,25 @@ setInternalDamage(int_dam_flag) if(prob(5)) if(ignore_threshold || obj_integrity*100/max_integrity < internal_damage_threshold) - if (length(equipment)) + if(LAZYLEN(equipment)) var/obj/item/mecha_parts/mecha_equipment/ME = pick(equipment) qdel(ME) -/obj/mecha/proc/setInternalDamage(int_dam_flag) +/obj/vehicle/sealed/mecha/proc/setInternalDamage(int_dam_flag) internal_damage |= int_dam_flag log_message("Internal damage of type [int_dam_flag].", LOG_MECHA) - SEND_SOUND(occupant, sound('sound/machines/warning-buzzer.ogg',wait=0)) + SEND_SOUND(occupants, sound('sound/machines/warning-buzzer.ogg',wait=0)) diag_hud_set_mechstat() -/obj/mecha/proc/clearInternalDamage(int_dam_flag) +/obj/vehicle/sealed/mecha/proc/clearInternalDamage(int_dam_flag) if(internal_damage & int_dam_flag) switch(int_dam_flag) if(MECHA_INT_TEMP_CONTROL) - occupant_message("<span class='boldnotice'>Life support system reactivated.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='boldnotice'>Life support system reactivated.</span>") if(MECHA_INT_FIRE) - occupant_message("<span class='boldnotice'>Internal fire extinguished.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='boldnotice'>Internal fire extinguished.</span>") if(MECHA_INT_TANK_BREACH) - occupant_message("<span class='boldnotice'>Damaged internal tank has been sealed.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='boldnotice'>Damaged internal tank has been sealed.</span>") internal_damage &= ~int_dam_flag diag_hud_set_mechstat() @@ -727,7 +743,7 @@ //////////// AI piloting //////////// ///////////////////////////////////// -/obj/mecha/attack_ai(mob/living/silicon/ai/user) +/obj/vehicle/sealed/mecha/attack_ai(mob/living/silicon/ai/user) if(!isAI(user)) return //Allows the Malf to scan a mech's status and loadout, helping it to decide if it is a worthy chariot. @@ -741,7 +757,7 @@ to_chat(user, "<a href='?src=[REF(user)];ai_take_control=[REF(src)]'><span class='userdanger'>ASSUME DIRECT CONTROL?</span></a><br>") else examine(user) - if(occupant) + if(length(return_drivers()) > 0) to_chat(user, "<span class='warning'>This exosuit has a pilot and cannot be controlled.</span>") return var/can_control_mech = 0 @@ -754,42 +770,40 @@ return to_chat(user, "<a href='?src=[REF(user)];ai_take_control=[REF(src)]'><span class='boldnotice'>Take control of exosuit?</span></a><br>") -/obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) +/obj/vehicle/sealed/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) if(!..()) return - //Transfer from core or card to mech. Proc is called by mech. + //Transfer from core or card to mech. Proc is called by mech. switch(interaction) if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card. if(!construction_state) //Mech must be in maint mode to allow carding. to_chat(user, "<span class='warning'>[name] must have maintenance protocols active in order to allow a transfer.</span>") return - AI = occupant - if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot + if(!locate(AI) in occupants) //Mech does not have an AI for a pilot to_chat(user, "<span class='warning'>No AI detected in the [name] onboard computer.</span>") return + for(var/mob/living/silicon/ai in occupants) AI.ai_restore_power()//So the AI initially has power. AI.control_disabled = TRUE AI.radio_enabled = FALSE AI.disconnect_shell() - RemoveActions(AI, TRUE) - occupant = null - silicon_pilot = FALSE + remove_occupant(AI) + mecha_flags &= ~SILICON_PILOT AI.forceMove(card) card.AI = AI AI.controlled_mech = null AI.remote_control = null - icon_state = initial(icon_state)+"-open" to_chat(AI, "<span class='notice'>You have been downloaded to a mobile storage device. Wireless connection offline.</span>") to_chat(user, "<span class='boldnotice'>Transfer successful</span>: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.") if(AI_MECH_HACK) //Called by AIs on the mech AI.linked_core = new /obj/structure/ai_core/deactivated(AI.loc) if(AI.can_dominate_mechs) - if(occupant) //Oh, I am sorry, were you using that? - to_chat(AI, "<span class='warning'>Pilot detected! Forced ejection initiated!</span>") - to_chat(occupant, "<span class='danger'>You have been forcibly ejected!</span>") - go_out(1) //IT IS MINE, NOW. SUCK IT, RD! + if(LAZYLEN(occupants)) //Oh, I am sorry, were you using that? + to_chat(AI, "<span class='warning'>Occupants detected! Forced ejection initiated!</span>") + to_chat(occupants, "<span class='danger'>You have been forcibly ejected!</span>") + ejectall() //IT IS MINE, NOW. SUCK IT, RD! ai_enter_mech(AI, interaction) if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech. @@ -802,8 +816,8 @@ if(AI.stat || !AI.client) to_chat(user, "<span class='warning'>[AI.name] is currently unresponsive, and cannot be uploaded.</span>") return - if(occupant || dna_lock) //Normal AIs cannot steal mechs! - to_chat(user, "<span class='warning'>Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].</span>") + if((LAZYLEN(occupants) >= max_occupants) || dna_lock) //Normal AIs cannot steal mechs! + to_chat(user, "<span class='warning'>Access denied. [name] is [LAZYLEN(occupants) >= max_occupants ? "currently fully occupied" : "secured with a DNA lock"].</span>") return AI.control_disabled = FALSE AI.radio_enabled = TRUE @@ -812,171 +826,160 @@ ai_enter_mech(AI, interaction) //Hack and From Card interactions share some code, so leave that here for both to use. -/obj/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction) +/obj/vehicle/sealed/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction) AI.ai_restore_power() - AI.forceMove(src) - occupant = AI - silicon_pilot = TRUE - icon_state = initial(icon_state) - update_icon() - playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE) - if(!internal_damage) - SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) + mecha_flags |= SILICON_PILOT + moved_inside(AI) AI.cancel_camera() AI.controlled_mech = src AI.remote_control = src AI.mobility_flags = ALL //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow. - AI.can_shunt = 0 //ONE AI ENTERS. NO AI LEAVES. + if(interaction == AI_MECH_HACK) + AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES. to_chat(AI, AI.can_dominate_mechs ? "<span class='announce'>Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!</span>" :\ "<span class='notice'>You have been uploaded to a mech's onboard computer.</span>") to_chat(AI, "<span class='reallybig boldnotice'>Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.</span>") - if(interaction == AI_TRANS_FROM_CARD) - GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card - else - GrantActions(AI, !AI.can_dominate_mechs) -//An actual AI (simple_animal mecha pilot) entering the mech -/obj/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) +///Handles an actual AI (simple_animal mecha pilot) entering the mech +/obj/vehicle/sealed/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) if(pilot_mob && pilot_mob.Adjacent(src)) - if(occupant) + if(occupants) return - icon_state = initial(icon_state) - occupant = pilot_mob + LAZYADD(occupants, src) pilot_mob.mecha = src pilot_mob.forceMove(src) - GrantActions(pilot_mob)//needed for checks, and incase a badmin puts somebody in the mob + update_icon() -/obj/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) - if(occupant == pilot_mob) - occupant = null +///Handles an actual AI (simple_animal mecha pilot) exiting the mech +/obj/vehicle/sealed/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) + LAZYREMOVE(occupants, pilot_mob) if(pilot_mob.mecha == src) pilot_mob.mecha = null - icon_state = "[initial(icon_state)]-open" pilot_mob.forceMove(get_turf(src)) - RemoveActions(pilot_mob) + update_icon() ///////////////////////////////////// //////// Atmospheric stuff //////// ///////////////////////////////////// -/obj/mecha/remove_air(amount) +/obj/vehicle/sealed/mecha/remove_air(amount) if(use_internal_tank) return cabin_air.remove(amount) return ..() -/obj/mecha/return_air() +/obj/vehicle/sealed/mecha/return_air() if(use_internal_tank) return cabin_air return ..() -/obj/mecha/return_analyzable_air() +/obj/vehicle/sealed/mecha/return_analyzable_air() return cabin_air -/obj/mecha/proc/return_pressure() +/obj/vehicle/sealed/mecha/proc/return_pressure() var/datum/gas_mixture/t_air = return_air() if(t_air) - . = t_air.return_pressure() + return t_air.return_pressure() -/obj/mecha/return_temperature() +/obj/vehicle/sealed/mecha/return_temperature() var/datum/gas_mixture/t_air = return_air() if(t_air) - . = t_air.return_temperature() + return t_air.return_temperature() -/obj/mecha/MouseDrop_T(mob/M, mob/user) - if((user != M) || user.incapacitated() || !Adjacent(user)) +/obj/vehicle/sealed/mecha/mob_try_enter(mob/M) + if(!ishuman(M)) // no silicons or drones in mechas. return - if(!ishuman(user)) // no silicons or drones in mechas. + if(HAS_TRAIT(M, TRAIT_PRIMITIVE)) //no lavalizards either. + to_chat(M, "<span class='warning'>The knowledge to use this device eludes you!</span>") return - if(HAS_TRAIT(user, TRAIT_PRIMITIVE)) //no lavalizards either. - to_chat(user, "<span class='warning'>The knowledge to use this device eludes you!</span>") - return - log_message("[user] tries to move in.", LOG_MECHA) - if (occupant) - to_chat(usr, "<span class='warning'>The [name] is already occupied!</span>") - log_message("Permission denied (Occupied).", LOG_MECHA) - return - if(dna_lock) - var/passed = FALSE - if(user.has_dna()) - var/mob/living/carbon/C = user - if(C.dna.unique_enzymes==dna_lock) - passed = TRUE - if (!passed) - to_chat(user, "<span class='warning'>Access denied. [name] is secured with a DNA lock.</span>") + log_message("[M] tries to move into [src].", LOG_MECHA) + if(dna_lock && M.has_dna()) + var/mob/living/carbon/entering_carbon = M + if(entering_carbon.dna.unique_enzymes != dna_lock) + to_chat(M, "<span class='warning'>Access denied. [name] is secured with a DNA lock.</span>") log_message("Permission denied (DNA LOCK).", LOG_MECHA) return - if(!operation_allowed(user)) - to_chat(user, "<span class='warning'>Access denied. Insufficient operation keycodes.</span>") + if(!operation_allowed(M)) + to_chat(M, "<span class='warning'>Access denied. Insufficient operation keycodes.</span>") log_message("Permission denied (No keycode).", LOG_MECHA) return - if(user.buckled) - to_chat(user, "<span class='warning'>You are currently buckled and cannot move.</span>") + if(M.buckled) + to_chat(M, "<span class='warning'>You are currently buckled and cannot move.</span>") log_message("Permission denied (Buckled).", LOG_MECHA) return - if(user.has_buckled_mobs()) //mob attached to us - to_chat(user, "<span class='warning'>You can't enter the exosuit with other creatures attached to you!</span>") + if(M.has_buckled_mobs()) //mob attached to us + to_chat(M, "<span class='warning'>You can't enter the exosuit with other creatures attached to you!</span>") log_message("Permission denied (Attached mobs).", LOG_MECHA) return - visible_message("<span class='notice'>[user] starts to climb into [name].</span>") + visible_message("<span class='notice'>[M] starts to climb into [name].</span>") - if(do_after(user, enter_delay, target = src)) + if(do_after(M, enter_delay, target = src)) if(obj_integrity <= 0) - to_chat(user, "<span class='warning'>You cannot get in the [name], it has been destroyed!</span>") - else if(occupant) - to_chat(user, "<span class='danger'>[occupant] was faster! Try better next time, loser.</span>") - else if(user.buckled) - to_chat(user, "<span class='warning'>You can't enter the exosuit while buckled.</span>") - else if(user.has_buckled_mobs()) - to_chat(user, "<span class='warning'>You can't enter the exosuit with other creatures attached to you!</span>") + to_chat(M, "<span class='warning'>You cannot get in the [name], it has been destroyed!</span>") + else if(LAZYLEN(occupants) >= max_occupants) + to_chat(M, "<span class='danger'>[occupants[occupants.len]] was faster! Try better next time, loser.</span>")//get the last one that hopped in + else if(M.buckled) + to_chat(M, "<span class='warning'>You can't enter the exosuit while buckled.</span>") + else if(M.has_buckled_mobs()) + to_chat(M, "<span class='warning'>You can't enter the exosuit with other creatures attached to you!</span>") else - moved_inside(user) + moved_inside(M) + return ..() else - to_chat(user, "<span class='warning'>You stop entering the exosuit!</span>") + to_chat(M, "<span class='warning'>You stop entering the exosuit!</span>") -/obj/mecha/proc/moved_inside(mob/living/carbon/human/H) - . = FALSE - if(H && H.client && (H in range(1))) - occupant = H - H.forceMove(src) - H.update_mouse_pointer() - add_fingerprint(H) - GrantActions(H, human_occupant=1) - forceMove(loc) - log_message("[H] moved in as pilot.", LOG_MECHA) - icon_state = initial(icon_state) - setDir(dir_in) - playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE) - if(!internal_damage) - SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) - return TRUE -/obj/mecha/proc/mmi_move_inside(obj/item/mmi/M, mob/user) +/obj/vehicle/sealed/mecha/generate_actions() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_cycle_equip) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/strafe) + +/obj/vehicle/sealed/mecha/proc/moved_inside(mob/living/H) . = FALSE - if(!M.brain_check(user)) + if(!(H?.client)) return + if(ishuman(H) && !Adjacent(H)) + return + add_occupant(H) + H.forceMove(src) + H.update_mouse_pointer() + add_fingerprint(H) + log_message("[H] moved in as pilot.", LOG_MECHA) + setDir(dir_in) + playsound(src, 'sound/machines/windowdoor.ogg', 50, TRUE) + if(!internal_damage) + SEND_SOUND(H, sound('sound/mecha/nominal.ogg',volume=50)) + return TRUE + +/obj/vehicle/sealed/mecha/proc/mmi_move_inside(obj/item/mmi/M, mob/user) + if(!M.brain_check(user)) + return FALSE var/mob/living/brain/B = M.brainmob - if(occupant) - to_chat(user, "<span class='warning'>Occupant detected!</span>") - return + if(LAZYLEN(occupants) >= max_occupants) + to_chat(user, "<span class='warning'>It's full!</span>") + return FALSE if(dna_lock && (!B.stored_dna || (dna_lock != B.stored_dna.unique_enzymes))) to_chat(user, "<span class='warning'>Access denied. [name] is secured with a DNA lock.</span>") - return + return FALSE visible_message("<span class='notice'>[user] starts to insert an MMI into [name].</span>") if(do_after(user, 40, target = src)) - if(!occupant) + if(LAZYLEN(occupants) < max_occupants) return mmi_moved_inside(M, user) else - to_chat(user, "<span class='warning'>Occupant detected!</span>") + to_chat(user, "<span class='warning'>Maximum occupants detected!</span>") else to_chat(user, "<span class='notice'>You stop inserting the MMI.</span>") + return FALSE -/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/M, mob/user) +/obj/vehicle/sealed/mecha/proc/mmi_moved_inside(obj/item/mmi/M, mob/user) if(!(Adjacent(M) && Adjacent(user))) return FALSE if(!M.brain_check(user)) @@ -988,69 +991,53 @@ return FALSE M.mecha = src - occupant = B - silicon_pilot = TRUE - B.forceMove(src) //should allow relaymove + add_occupant(B)//Note this forcemoves the brain into the mech to allow relaymove + mecha_flags |= SILICON_PILOT B.reset_perspective(src) B.remote_control = src B.update_mobility() B.update_mouse_pointer() - icon_state = initial(icon_state) update_icon() setDir(dir_in) log_message("[M] moved in as pilot.", LOG_MECHA) if(!internal_damage) - SEND_SOUND(occupant, sound('sound/mecha/nominal.ogg',volume=50)) - GrantActions(B) + SEND_SOUND(M, sound('sound/mecha/nominal.ogg',volume=50)) log_game("[key_name(user)] has put the MMI/posibrain of [key_name(B)] into [src] at [AREACOORD(src)]") return TRUE -/obj/mecha/container_resist_act(mob/living/user) +/obj/vehicle/sealed/mecha/container_resist_act(mob/living/user) + if(isAI(user)) + var/mob/living/silicon/ai/AI = user + if(!AI.can_shunt) + to_chat(AI, "<span class='notice'>You can't leave a mech after dominating it!.</span>") + return FALSE + to_chat(user, "<span class='notice'>You begin the ejection procedure. Equipment is disabled during this process. Hold still to finish ejecting.</span>") is_currently_ejecting = TRUE - to_chat(occupant, "<span class='notice'>You begin the ejection procedure. Equipment is disabled during this process. Hold still to finish ejecting.</span>") - if(do_after(occupant, has_gravity() ? exit_delay : 0 , target = src)) - to_chat(occupant, "<span class='notice'>You exit the mech.</span>") - go_out() + if(do_after(user, has_gravity() ? exit_delay : 0 , target = src)) + to_chat(user, "<span class='notice'>You exit the mech.</span>") + mob_exit(user, TRUE) else - to_chat(occupant, "<span class='notice'>You stop exiting the mech. Weapons are enabled again.</span>") + to_chat(user, "<span class='notice'>You stop exiting the mech. Weapons are enabled again.</span>") is_currently_ejecting = FALSE -/obj/mecha/Exited(atom/movable/M, atom/newloc) - if(occupant && occupant == M) // The occupant exited the mech without calling go_out() - go_out(TRUE, newloc) +/obj/vehicle/sealed/mecha/proc/ejectall() + for(var/ejectee in occupants) + mob_exit(ejectee, TRUE, TRUE) - if(cell && cell == M) - cell = null - return - if(scanmod && scanmod == M) - scanmod = null - update_part_values() - return - if(capacitor && capacitor == M) - armor = armor.modifyRating(energy = (capacitor.rating * -5)) //lose the energy armor if we lose this cap - capacitor = null - update_part_values() - -/obj/mecha/proc/go_out(forced, atom/newloc = loc) - if(!occupant) - return +/obj/vehicle/sealed/mecha/mob_exit(mob/M, silent, forced) + var/newloc = get_turf(src) var/atom/movable/mob_container - occupant.clear_alert("charge") - occupant.clear_alert("mech damage") - if(ishuman(occupant)) - mob_container = occupant - RemoveActions(occupant, human_occupant=1) - else if(isbrain(occupant)) - var/mob/living/brain/brain = occupant - RemoveActions(brain) + if(ishuman(M)) + mob_container = M + else if(isbrain(M)) + var/mob/living/brain/brain = M mob_container = brain.container - else if(isAI(occupant)) - var/mob/living/silicon/ai/AI = occupant + else if(isAI(M)) + var/mob/living/silicon/ai/AI = M if(forced)//This should only happen if there are multiple AIs in a round, and at least one is Malf. - RemoveActions(occupant) - occupant.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. - occupant = null - silicon_pilot = FALSE + AI.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. + AI = null + mecha_flags &= ~SILICON_PILOT return else if(!AI.linked_core) @@ -1060,15 +1047,13 @@ to_chat(AI, "<span class='notice'>Returning to core...</span>") AI.controlled_mech = null AI.remote_control = null - RemoveActions(occupant, 1) mob_container = AI newloc = get_turf(AI.linked_core) qdel(AI.linked_core) else - return - var/mob/living/L = occupant - occupant = null //we need it null when forceMove calls Exited(). - silicon_pilot = FALSE + return ..() + var/mob/living/L = M + mecha_flags &= ~SILICON_PILOT if(mob_container.forceMove(newloc))//ejecting mob container log_message("[mob_container] moved out.", LOG_MECHA) L << browse(null, "window=exosuit") @@ -1078,53 +1063,65 @@ if(mmi.brainmob) L.forceMove(mmi) L.reset_perspective() + remove_occupant(L) mmi.mecha = null mmi.update_icon() L.mobility_flags = NONE - icon_state = initial(icon_state)+"-open" + update_icon() setDir(dir_in) + return ..() - if(L && L.client) - L.update_mouse_pointer() - L.client.view_size.resetToDefault() + +/obj/vehicle/sealed/mecha/add_occupant(mob/M, control_flags) + RegisterSignal(M, COMSIG_MOB_DEATH, .proc/mob_exit) + RegisterSignal(M, COMSIG_MOB_CLICKON, .proc/on_mouseclick) + RegisterSignal(M, COMSIG_MOB_SAY, .proc/display_speech_bubble) + update_icon() + return ..() + +/obj/vehicle/sealed/mecha/remove_occupant(mob/M) + UnregisterSignal(M, COMSIG_MOB_DEATH) + UnregisterSignal(M, COMSIG_MOB_CLICKON) + UnregisterSignal(M, COMSIG_MOB_SAY) + update_icon() + M.clear_alert("charge") + M.clear_alert("mech damage") + if(M.client) + M.update_mouse_pointer() + M.client.view_size.resetToDefault() zoom_mode = 0 + return ..() ///////////////////////// ////// Access stuff ///// ///////////////////////// -/obj/mecha/proc/operation_allowed(mob/M) +/obj/vehicle/sealed/mecha/proc/operation_allowed(mob/M) req_access = operation_req_access req_one_access = list() return allowed(M) -/obj/mecha/proc/internals_access_allowed(mob/M) +/obj/vehicle/sealed/mecha/proc/internals_access_allowed(mob/M) req_one_access = internals_req_access req_access = list() return allowed(M) - - //////////////////////////////// /////// Messages and Log /////// //////////////////////////////// -/obj/mecha/proc/occupant_message(message as text) - if(message) - if(occupant && occupant.client) - to_chat(occupant, "[icon2html(src, occupant)] [message]") - GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY")) GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? +//why is this in mecha /////////////////////// ///// Power stuff ///// /////////////////////// -/obj/mecha/proc/has_charge(amount) +/obj/vehicle/sealed/mecha/proc/has_charge(amount) return (get_charge()>=amount) -/obj/mecha/proc/get_charge() +/obj/vehicle/sealed/mecha/proc/get_charge() for(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/R in equipment) var/relay_charge = R.get_charge() if(relay_charge) @@ -1132,27 +1129,22 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? if(cell) return max(0, cell.charge) -/obj/mecha/proc/use_power(amount) +/obj/vehicle/sealed/mecha/proc/use_power(amount) if(get_charge() && cell.use(amount)) - return 1 - return 0 + return TRUE + return FALSE -/obj/mecha/proc/give_power(amount) +/obj/vehicle/sealed/mecha/proc/give_power(amount) if(!isnull(get_charge())) cell.give(amount) - return 1 - return 0 - -/obj/mecha/update_remote_sight(mob/living/user) - if(occupant_sight_flags) - if(user == occupant) - user.sight |= occupant_sight_flags + return TRUE + return FALSE /////////////////////// ////// Ammo stuff ///// /////////////////////// -/obj/mecha/proc/ammo_resupply(obj/item/mecha_ammo/A, mob/user,fail_chat_override = FALSE) +/obj/vehicle/sealed/mecha/proc/ammo_resupply(obj/item/mecha_ammo/A, mob/user,fail_chat_override = FALSE) if(!A.rounds) if(!fail_chat_override) to_chat(user, "<span class='warning'>This box of ammo is empty!</span>") diff --git a/code/game/mecha/combat/combat.dm b/code/modules/vehicles/mecha/combat/combat.dm similarity index 75% rename from code/game/mecha/combat/combat.dm rename to code/modules/vehicles/mecha/combat/combat.dm index d0e8a62cc65..4f964017958 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/modules/vehicles/mecha/combat/combat.dm @@ -1,4 +1,4 @@ -/obj/mecha/combat +/obj/vehicle/sealed/mecha/combat force = 30 internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY) internal_damage_threshold = 50 @@ -7,11 +7,12 @@ destruction_sleep_duration = 40 exit_delay = 40 -/obj/mecha/combat/restore_equipment() +/obj/vehicle/sealed/mecha/combat/restore_equipment() mouse_pointer = 'icons/effects/mouse_pointers/mecha_mouse.dmi' . = ..() -/obj/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this + +/obj/vehicle/sealed/mecha/combat/proc/max_ammo() //Max the ammo stored for Nuke Ops mechs, or anyone else that calls this for(var/obj/item/I in equipment) if(istype(I, /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/)) var/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/gun = I diff --git a/code/game/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm similarity index 57% rename from code/game/mecha/combat/durand.dm rename to code/modules/vehicles/mecha/combat/durand.dm index 1e40ba99bc0..576b5bacd0b 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -1,81 +1,80 @@ -/obj/mecha/combat/durand +/obj/vehicle/sealed/mecha/combat/durand desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." name = "\improper Durand" icon_state = "durand" - step_in = 4 + movedelay = 4 dir_in = 1 //Facing North. max_integrity = 400 deflect_chance = 20 armor = list(MELEE = 40, BULLET = 35, LASER = 15, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 50, FIRE = 100, ACID = 100) max_temperature = 30000 - infra_luminosity = 8 force = 40 wreckage = /obj/structure/mecha_wreckage/durand var/obj/durand_shield/shield -/obj/mecha/combat/durand/Initialize() +/obj/vehicle/sealed/mecha/combat/durand/Initialize() . = ..() shield = new /obj/durand_shield(loc, src, layer, dir) - RegisterSignal(src, COMSIG_MECHA_ACTION_ACTIVATE, .proc/relay) + RegisterSignal(src, COMSIG_MECHA_ACTION_TRIGGER, .proc/relay) RegisterSignal(src, COMSIG_PROJECTILE_PREHIT, .proc/prehit) -/obj/mecha/combat/durand/Destroy() +/obj/vehicle/sealed/mecha/combat/durand/Destroy() if(shield) QDEL_NULL(shield) return ..() -/obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0) - ..() - defense_action.Grant(user, src) - -/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0) - ..() - defense_action.Remove(user) - -/obj/mecha/combat/durand/process() +/obj/vehicle/sealed/mecha/combat/durand/generate_actions() . = ..() - if(defense_mode && !use_power(100)) - defense_action.Activate(forced_state = TRUE) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_defense_mode) -/obj/mecha/combat/durand/domove(direction) +/obj/vehicle/sealed/mecha/combat/durand/process() + . = ..() + if(defense_mode && !use_power(100)) //Defence mode can only be on with a occupant so we check if one of them can toggle it and toggle + for(var/O in occupants) + var/mob/living/occupant = O + var/datum/action/action = LAZYACCESSASSOC(occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/mech_defense_mode) + if(action) + action.Trigger() + break + +/obj/vehicle/sealed/mecha/combat/durand/Move(direction) . = ..() if(shield) shield.forceMove(loc) shield.setDir(dir) -/obj/mecha/combat/durand/forceMove(turf/T) +/obj/vehicle/sealed/mecha/combat/durand/forceMove(turf/T) . = ..() shield.forceMove(T) -/obj/mecha/combat/durand/go_out(forced, atom/newloc = loc) +/obj/vehicle/sealed/mecha/combat/durand/mob_exit(mob/M, silent, randomstep, forced) if(defense_mode) - defense_action.Activate(forced_state = TRUE) - . = ..() + var/datum/action/action = LAZYACCESSASSOC(occupant_actions, M, /datum/action/vehicle/sealed/mecha/mech_defense_mode) + if(action) + action.Trigger(FALSE) + return ..() ///Relays the signal from the action button to the shield, and creates a new shield if the old one is MIA. -/obj/mecha/combat/durand/proc/relay(datum/source, list/signal_args) +/obj/vehicle/sealed/mecha/combat/durand/proc/relay(datum/source, mob/owner, list/signal_args) SIGNAL_HANDLER - if(!shield) //if the shield somehow got deleted stack_trace("Durand triggered relay without a shield") shield = new /obj/durand_shield(loc, src, layer) shield.setDir(dir) - SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_ACTIVATE, source, signal_args) + SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_TRIGGER, owner, signal_args) //Redirects projectiles to the shield if defense_check decides they should be blocked and returns true. -/obj/mecha/combat/durand/proc/prehit(obj/projectile/source, list/signal_args) - SIGNAL_HANDLER - +/obj/vehicle/sealed/mecha/combat/durand/proc/prehit(obj/projectile/source, list/signal_args) if(defense_check(source.loc) && shield) signal_args[2] = shield /**Checks if defense mode is enabled, and if the attacker is standing in an area covered by the shield. Expects a turf. Returns true if the attack should be blocked, false if not.*/ -/obj/mecha/combat/durand/proc/defense_check(turf/aloc) +/obj/vehicle/sealed/mecha/combat/durand/proc/defense_check(turf/aloc) if (!defense_mode || !shield || shield.switching) return FALSE . = FALSE @@ -94,14 +93,14 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ . = TRUE return -/obj/mecha/combat/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) +/obj/vehicle/sealed/mecha/combat/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) if(defense_check(user.loc)) log_message("Attack absorbed by defense field. Attacker - [user].", LOG_MECHA, color="orange") shield.attack_generic(user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) else . = ..() -/obj/mecha/combat/durand/blob_act(obj/structure/blob/B) +/obj/vehicle/sealed/mecha/combat/durand/blob_act(obj/structure/blob/B) if(defense_check(B.loc)) log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") log_message("Attack absorbed by defense field.", LOG_MECHA, color="orange") @@ -109,14 +108,14 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ else . = ..() -/obj/mecha/combat/durand/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/vehicle/sealed/mecha/combat/durand/attackby(obj/item/W as obj, mob/user as mob, params) if(defense_check(user.loc)) log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange") shield.attackby(W, user, params) else . = ..() -/obj/mecha/combat/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) +/obj/vehicle/sealed/mecha/combat/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(defense_check(AM.loc)) log_message("Impact with [AM] absorbed by defense field.", LOG_MECHA, color="orange") shield.hitby(AM, skipcatch, hitpush, blocked, throwingdatum) @@ -147,8 +146,11 @@ own integrity back to max. Shield is automatically dropped if we run out of powe light_power = 5 light_color = LIGHT_COLOR_ELECTRIC_CYAN light_on = FALSE - var/obj/mecha/combat/durand/chassis ///Our link back to the durand - var/switching = FALSE ///To keep track of things during the animation + ///Our link back to the durand + var/obj/vehicle/sealed/mecha/combat/durand/chassis + ///To keep track of things during the animation + var/switching = FALSE + var/currentuser /obj/durand_shield/Initialize(mapload, _chassis, _layer, _dir) @@ -156,7 +158,7 @@ own integrity back to max. Shield is automatically dropped if we run out of powe chassis = _chassis layer = _layer setDir(_dir) - RegisterSignal(src, COMSIG_MECHA_ACTION_ACTIVATE, .proc/activate) + RegisterSignal(src, COMSIG_MECHA_ACTION_TRIGGER, .proc/activate) /obj/durand_shield/Destroy() @@ -165,29 +167,36 @@ own integrity back to max. Shield is automatically dropped if we run out of powe chassis = null return ..() -/**Handles activating and deactivating the shield. This proc is called by a signal sent from the mech's action button -and relayed by the mech itself. The "forced" variabe, signal_args[1], will skip the to-pilot text and is meant for when -the shield is disabled by means other than the action button (like running out of power)*/ - -/obj/durand_shield/proc/activate(datum/source, datum/action/innate/mecha/mech_defense_mode/button, list/signal_args) +/** + *Handles activating and deactivating the shield. This proc is called by a signal sent from the mech's action button + *and relayed by the mech itself. The "forced" variabe, signal_args[1], will skip the to-pilot text and is meant for when + *the shield is disabled by means other than the action button (like running out of power) + * Arguments: + * * source: the shield + * * owner: mob that activated the shield + * * signal_args: whether it's forced + */ +/obj/durand_shield/proc/activate(datum/source, mob/owner, list/signal_args) SIGNAL_HANDLER - - if(!chassis || !chassis.occupant) + currentuser = owner + if(!chassis?.occupants) return if(switching && !signal_args[1]) return if(!chassis.defense_mode && (!chassis.cell || chassis.cell.charge < 100)) //If it's off, and we have less than 100 units of power - chassis.occupant_message("<span class='warn'>Insufficient power; cannot activate defense mode.</span>") + to_chat(currentuser, "[icon2html(src, currentuser)]<span class='warn'>Insufficient power; cannot activate defense mode.</span>") return switching = TRUE chassis.defense_mode = !chassis.defense_mode - chassis.defense_action.button_icon_state = "mech_defense_mode_[chassis.defense_mode ? "on" : "off"]" //This is backwards because we haven't changed the var yet if(!signal_args[1]) - chassis.occupant_message("<span class='notice'>Defense mode [chassis.defense_mode?"enabled":"disabled"].</span>") + to_chat(currentuser, "[icon2html(src, currentuser)]<span class='notice'>Defense mode [chassis.defense_mode?"enabled":"disabled"].</span>") chassis.log_message("User has toggled defense mode -- now [chassis.defense_mode?"enabled":"disabled"].", LOG_MECHA) else chassis.log_message("defense mode state changed -- now [chassis.defense_mode?"enabled":"disabled"].", LOG_MECHA) - chassis.defense_action.UpdateButtonIcon() + for(var/occupant in chassis.occupants) + var/datum/action/button = chassis.occupant_actions[occupant][/datum/action/vehicle/sealed/mecha/mech_defense_mode] + button.button_icon_state = "mech_defense_mode_[chassis.defense_mode ? "on" : "off"]" + button.UpdateButtonIcon() set_light_on(chassis.defense_mode) @@ -195,19 +204,20 @@ the shield is disabled by means other than the action button (like running out o invisibility = 0 flick("shield_raise", src) playsound(src, 'sound/mecha/mech_shield_raise.ogg', 50, FALSE) - addtimer(CALLBACK(src, .proc/shield_icon_enable), 3) + set_light(l_range = MINIMUM_USEFUL_LIGHT_RANGE , l_power = 5, l_color = "#00FFFF") + icon_state = "shield" + RegisterSignal(chassis, COMSIG_ATOM_DIR_CHANGE, .proc/resetdir) else flick("shield_drop", src) playsound(src, 'sound/mecha/mech_shield_drop.ogg', 50, FALSE) - addtimer(CALLBACK(src, .proc/shield_icon_reset), 5) + set_light(0) + icon_state = "shield_null" + invisibility = INVISIBILITY_MAXIMUM //no showing on right-click + UnregisterSignal(chassis, COMSIG_ATOM_DIR_CHANGE) switching = FALSE -/obj/durand_shield/proc/shield_icon_enable() - icon_state = "shield" - -/obj/durand_shield/proc/shield_icon_reset() - icon_state = "shield_null" - invisibility = INVISIBILITY_MAXIMUM //no showing on right-click +/obj/durand_shield/proc/resetdir(datum/source, olddir, newdir) + setDir(newdir) /obj/durand_shield/take_damage() if(!chassis) @@ -219,7 +229,10 @@ the shield is disabled by means other than the action button (like running out o flick("shield_impact", src) if(!chassis.use_power((max_integrity - obj_integrity) * 100)) chassis.cell?.charge = 0 - chassis.defense_action.Activate(forced_state = TRUE) + for(var/O in chassis.occupants) + var/mob/living/occupant = O + var/datum/action/action = LAZYACCESSASSOC(chassis.occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/mech_defense_mode) + action.Trigger(FALSE) obj_integrity = 10000 /obj/durand_shield/play_attack_sound() diff --git a/code/game/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm similarity index 73% rename from code/game/mecha/combat/gygax.dm rename to code/modules/vehicles/mecha/combat/gygax.dm index b9ea3287ae4..a90b7763741 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/modules/vehicles/mecha/combat/gygax.dm @@ -1,27 +1,22 @@ -/obj/mecha/combat/gygax +/obj/vehicle/sealed/mecha/combat/gygax desc = "A lightweight, security exosuit. Popular among private and corporate security." name = "\improper Gygax" icon_state = "gygax" - step_in = 3 + allow_diagonal_movement = TRUE + movedelay = 3 dir_in = 1 //Facing North. max_integrity = 250 deflect_chance = 5 armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) max_temperature = 25000 leg_overload_coeff = 80 - infra_luminosity = 6 force = 25 wreckage = /obj/structure/mecha_wreckage/gygax internal_damage_threshold = 35 max_equip = 3 step_energy_drain = 3 -/obj/mecha/combat/gygax/mechturn(direction) - . = ..() - if(!strafe && !occupant.client.keys_held["Alt"]) - mechstep(direction) //agile mechs get to move and turn in the same step - -/obj/mecha/combat/gygax/dark +/obj/vehicle/sealed/mecha/combat/gygax/dark desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." name = "\improper Dark Gygax" icon_state = "darkgygax" @@ -37,7 +32,7 @@ max_equip = 5 destruction_sleep_duration = 20 -/obj/mecha/combat/gygax/dark/loaded/Initialize() +/obj/vehicle/sealed/mecha/combat/gygax/dark/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) ME.attach(src) @@ -51,7 +46,7 @@ ME.attach(src) max_ammo() -/obj/mecha/combat/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null) +/obj/vehicle/sealed/mecha/combat/gygax/dark/add_cell(obj/item/stock_parts/cell/C=null) if(C) C.forceMove(src) cell = C @@ -59,11 +54,6 @@ cell = new /obj/item/stock_parts/cell/bluespace(src) -/obj/mecha/combat/gygax/GrantActions(mob/living/user, human_occupant = 0) - ..() - overload_action.Grant(user, src) - - -/obj/mecha/combat/gygax/RemoveActions(mob/living/user, human_occupant = 0) - ..() - overload_action.Remove(user) +/obj/vehicle/sealed/mecha/combat/gygax/generate_actions() + . = ..() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_overload_mode) diff --git a/code/game/mecha/combat/honker.dm b/code/modules/vehicles/mecha/combat/honker.dm similarity index 91% rename from code/game/mecha/combat/honker.dm rename to code/modules/vehicles/mecha/combat/honker.dm index f2fa0e6c569..da96bb2b949 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/modules/vehicles/mecha/combat/honker.dm @@ -1,22 +1,21 @@ -/obj/mecha/combat/honker +/obj/vehicle/sealed/mecha/combat/honker desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!" name = "\improper H.O.N.K" icon_state = "honker" - step_in = 3 + movedelay = 3 max_integrity = 140 deflect_chance = 60 internal_damage_threshold = 60 armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) max_temperature = 25000 - infra_luminosity = 5 operation_req_access = list(ACCESS_THEATRE) internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) wreckage = /obj/structure/mecha_wreckage/honker - add_req_access = 0 + mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS max_equip = 3 var/squeak = TRUE -/obj/mecha/combat/honker/get_stats_part() +/obj/vehicle/sealed/mecha/combat/honker/get_stats_part(mob/user) var/integrity = obj_integrity/max_integrity*100 var/cell_charge = get_charge() var/datum/gas_mixture/int_tank_air = internal_tank.return_air() @@ -35,12 +34,12 @@ <b>AirHONK temperature: </b>[tank_temperature]°K|[tank_temperature - T0C]°C<br> <b>HONK pressure: </b>[cabin_pressure>WARNING_HIGH_PRESSURE ? "<font color='red'>[cabin_pressure]</font>": cabin_pressure]kPa<br> <b>HONK temperature: </b> [return_temperature()]°K|[return_temperature() - T0C]°C<br> - <b>Lights: </b>[lights?"on":"off"]<br> + <b>Lights: </b>[(mecha_flags & LIGHTS_ON)?"on":"off"]<br> [dna_lock?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[dna_lock]</span> \[<a href='?src=[REF(src)];reset_dna=1'>Reset</a>\]<br>":null] "} return output -/obj/mecha/combat/honker/get_stats_html() +/obj/vehicle/sealed/mecha/combat/honker/get_stats_html(mob/user) var/output = {"<html> <head> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> @@ -83,7 +82,7 @@ </head> <body> <div id='content'> - [src.get_stats_part()] + [src.get_stats_part(user)] </div> <div id='eq_list'> [src.get_equipment_list()] @@ -97,7 +96,7 @@ "} return output -/obj/mecha/combat/honker/get_commands() +/obj/vehicle/sealed/mecha/combat/honker/get_commands() var/output = {"<div class='wr'> <div class='header'>Sounds of HONK:</div> <div class='links'> @@ -121,8 +120,8 @@ return output -/obj/mecha/combat/honker/get_equipment_list() - if(!equipment.len) +/obj/vehicle/sealed/mecha/combat/honker/get_equipment_list() + if(!LAZYLEN(equipment)) return var/output = "<b>Honk-ON-Systems:</b><div style=\"margin-left: 15px;\">" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) @@ -130,12 +129,12 @@ output += "</div>" return output -/obj/mecha/combat/honker/play_stepsound() +/obj/vehicle/sealed/mecha/combat/honker/play_stepsound() if(squeak) playsound(src, "clownstep", 70, 1) squeak = !squeak -/obj/mecha/combat/honker/Topic(href, href_list) +/obj/vehicle/sealed/mecha/combat/honker/Topic(href, href_list) ..() if (href_list["play_sound"]) switch(href_list["play_sound"]) diff --git a/code/game/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm similarity index 81% rename from code/game/mecha/combat/marauder.dm rename to code/modules/vehicles/mecha/combat/marauder.dm index d89573a843c..d595509d2eb 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/modules/vehicles/mecha/combat/marauder.dm @@ -1,34 +1,28 @@ -/obj/mecha/combat/marauder +/obj/vehicle/sealed/mecha/combat/marauder desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." name = "\improper Marauder" icon_state = "marauder" - step_in = 5 + movedelay = 5 max_integrity = 500 deflect_chance = 25 armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 60, FIRE = 100, ACID = 100) max_temperature = 60000 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - infra_luminosity = 3 operation_req_access = list(ACCESS_CENT_SPECOPS) internals_req_access = list(ACCESS_CENT_SPECOPS) wreckage = /obj/structure/mecha_wreckage/marauder - add_req_access = 0 + mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS internal_damage_threshold = 25 force = 45 max_equip = 5 - bumpsmash = 1 + bumpsmash = TRUE -/obj/mecha/combat/marauder/GrantActions(mob/living/user, human_occupant = 0) - ..() - smoke_action.Grant(user, src) - zoom_action.Grant(user, src) +/obj/vehicle/sealed/mecha/combat/marauder/generate_actions() + . = ..() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_smoke) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_zoom) -/obj/mecha/combat/marauder/RemoveActions(mob/living/user, human_occupant = 0) - ..() - smoke_action.Remove(user) - zoom_action.Remove(user) - -/obj/mecha/combat/marauder/loaded/Initialize() +/obj/vehicle/sealed/mecha/combat/marauder/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) ME.attach(src) @@ -42,20 +36,20 @@ ME.attach(src) max_ammo() -/obj/mecha/combat/marauder/seraph +/obj/vehicle/sealed/mecha/combat/marauder/seraph desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." name = "\improper Seraph" icon_state = "seraph" operation_req_access = list(ACCESS_CENT_SPECOPS) internals_req_access = list(ACCESS_CENT_SPECOPS) - step_in = 3 + movedelay = 3 max_integrity = 550 wreckage = /obj/structure/mecha_wreckage/seraph internal_damage_threshold = 20 force = 55 max_equip = 6 -/obj/mecha/combat/marauder/seraph/Initialize() +/obj/vehicle/sealed/mecha/combat/marauder/seraph/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) ME.attach(src) @@ -71,7 +65,7 @@ ME.attach(src) max_ammo() -/obj/mecha/combat/marauder/mauler +/obj/vehicle/sealed/mecha/combat/marauder/mauler desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." name = "\improper Mauler" icon_state = "mauler" @@ -81,12 +75,12 @@ max_equip = 6 destruction_sleep_duration = 20 -/obj/mecha/combat/marauder/mauler/Initialize() +/obj/vehicle/sealed/mecha/combat/marauder/mauler/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) ME.attach(src) -/obj/mecha/combat/marauder/mauler/loaded/Initialize() +/obj/vehicle/sealed/mecha/combat/marauder/mauler/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) ME.attach(src) diff --git a/code/game/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm similarity index 60% rename from code/game/mecha/combat/phazon.dm rename to code/modules/vehicles/mecha/combat/phazon.dm index 84c24c80839..c964b17e362 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/modules/vehicles/mecha/combat/phazon.dm @@ -1,30 +1,21 @@ -/obj/mecha/combat/phazon +/obj/vehicle/sealed/mecha/combat/phazon desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." name = "\improper Phazon" icon_state = "phazon" - step_in = 2 + movedelay = 2 dir_in = 2 //Facing South. step_energy_drain = 3 max_integrity = 200 deflect_chance = 30 armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 50, FIRE = 100, ACID = 100) max_temperature = 25000 - infra_luminosity = 3 wreckage = /obj/structure/mecha_wreckage/phazon - add_req_access = 1 internal_damage_threshold = 25 force = 15 max_equip = 3 phase_state = "phazon-phase" -/obj/mecha/combat/phazon/GrantActions(mob/living/user, human_occupant = 0) - ..() - switch_damtype_action.Grant(user, src) - phasing_action.Grant(user, src) - - -/obj/mecha/combat/phazon/RemoveActions(mob/living/user, human_occupant = 0) - ..() - switch_damtype_action.Remove(user) - phasing_action.Remove(user) - +/obj/vehicle/sealed/mecha/combat/phazon/generate_actions() + . = ..() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_phasing) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_switch_damtype) diff --git a/code/game/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm similarity index 83% rename from code/game/mecha/combat/reticence.dm rename to code/modules/vehicles/mecha/combat/reticence.dm index b5411991f65..9d2698c1a03 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -1,8 +1,8 @@ -/obj/mecha/combat/reticence +/obj/vehicle/sealed/mecha/combat/reticence desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins." name = "\improper reticence" icon_state = "reticence" - step_in = 2 + movedelay = 2 dir_in = 1 //Facing North. max_integrity = 100 deflect_chance = 3 @@ -11,7 +11,7 @@ wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_THEATRE) internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) - add_req_access = 0 + mecha_flags = CANSTRAFE | IS_ENCLOSED | HAS_LIGHTS internal_damage_threshold = 25 max_equip = 2 step_energy_drain = 3 @@ -19,8 +19,7 @@ stepsound = null turnsound = null - -/obj/mecha/combat/reticence/loaded/Initialize() +/obj/vehicle/sealed/mecha/combat/reticence/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced ME.attach(src) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm similarity index 64% rename from code/game/mecha/equipment/mecha_equipment.dm rename to code/modules/vehicles/mecha/equipment/mecha_equipment.dm index 67df4e24b6d..617b82603a8 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/modules/vehicles/mecha/equipment/mecha_equipment.dm @@ -7,10 +7,10 @@ icon_state = "mecha_equip" force = 5 max_integrity = 300 - var/equip_cooldown = 0 // cooldown after use - var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff) + var/equip_cooldown = 0 + var/equip_ready = TRUE //whether the equipment is ready for use. (or deactivated/activated for static stuff) var/energy_drain = 0 - var/obj/mecha/chassis = null + var/obj/vehicle/sealed/mecha/chassis = null ///Bitflag. Determines the range of the equipment. var/range = MECHA_MELEE /// Bitflag. Used by exosuit fabricator to assign sub-categories based on which exosuits can equip this. @@ -23,33 +23,33 @@ /obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) - send_byjax(chassis.occupant,"exosuit.browser","equipment_menu",chassis.get_equipment_menu(),"dropdowns") - return 1 + send_byjax(chassis.occupants,"exosuit.browser","eq_list",chassis.get_equipment_list()) + send_byjax(chassis.occupants,"exosuit.browser","equipment_menu",chassis.get_equipment_menu(),"dropdowns") + return TRUE return /obj/item/mecha_parts/mecha_equipment/proc/update_equip_info() if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",get_equip_info()) - return 1 + send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",get_equip_info()) + return TRUE return /obj/item/mecha_parts/mecha_equipment/Destroy() if(chassis) - chassis.equipment -= src + LAZYREMOVE(chassis.equipment, src) if(chassis.selected == src) chassis.selected = null - src.update_chassis_page() + update_chassis_page() log_message("[src] is destroyed.", LOG_MECHA) - if(chassis.occupant) - chassis.occupant_message("<span class='danger'>[src] is destroyed!</span>") - chassis.occupant.playsound_local(chassis, destroy_sound, 50) + if(chassis.occupants) + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='danger'>[src] is destroyed!</span>") + playsound(chassis, destroy_sound, 50) if(!detachable) //If we're a built-in nondetachable equipment, let's lock up the slot that we were in. chassis.max_equip-- chassis = null return ..() -/obj/item/mecha_parts/mecha_equipment/try_attach_part(mob/user, obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) if(can_attach(M)) if(!user.temporarilyRemoveItemFromInventory(src)) return FALSE @@ -72,62 +72,53 @@ return txt -/obj/item/mecha_parts/mecha_equipment/proc/is_ranged()//add a distance restricted equipment. Why not? - return range&MECHA_RANGED - -/obj/item/mecha_parts/mecha_equipment/proc/is_melee() - return range&MECHA_MELEE - - /obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target) if(!target) - return 0 + return FALSE if(!chassis) - return 0 + return FALSE if(!equip_ready) - return 0 + return FALSE if(energy_drain && !chassis.has_charge(energy_drain)) - return 0 + return FALSE if(chassis.is_currently_ejecting) - return 0 + return FALSE if(chassis.equipment_disabled) - to_chat(chassis.occupant, "<span=warn>Error -- Equipment control unit is unresponsive.</span>") - return 0 - return 1 + to_chat(chassis.occupants, "<span=warn>Error -- Equipment control unit is unresponsive.</span>") + return FALSE + if(TIMER_COOLDOWN_CHECK(chassis, COOLDOWN_MECHA_EQUIPMENT)) + return FALSE + return TRUE -/obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) - return 0 - -/obj/item/mecha_parts/mecha_equipment/proc/start_cooldown() - set_ready_state(0) +/obj/item/mecha_parts/mecha_equipment/proc/action(mob/source, atom/target, params) + TIMER_COOLDOWN_START(chassis, COOLDOWN_MECHA_EQUIPMENT, equip_cooldown)//Cooldown is on the MECH so people dont bypass it by switching equipment + send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info()) chassis.use_power(energy_drain) - addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown) + return TRUE -/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target) +/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target, mob/user) if(!chassis) return var/C = chassis.loc - set_ready_state(0) chassis.use_power(energy_drain) - . = do_after(chassis.occupant, equip_cooldown, target=target) - set_ready_state(1) + . = do_after(user, equip_cooldown, target=target) if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) - return 0 + return FALSE -/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, delay) +/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, mob/user, delay) if(!chassis) return var/C = chassis.loc - . = do_after(chassis.occupant, delay, target=target) + . = do_after(user, delay, target=target) if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) - return 0 + return FALSE -/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M) - if(M.equipment.len<M.max_equip) - return 1 +/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/vehicle/sealed/mecha/M) + if(LAZYLEN(M.equipment)<M.max_equip) + return TRUE -/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/mecha/M) - M.equipment += src +/obj/item/mecha_parts/mecha_equipment/proc/attach(obj/vehicle/sealed/mecha/M) + LAZYADD(M.equipment, src) chassis = M forceMove(M) log_message("[src] initialized.", LOG_MECHA) @@ -137,13 +128,12 @@ /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null) moveto = moveto || get_turf(chassis) if(src.Move(moveto)) - chassis.equipment -= src + LAZYREMOVE(chassis.equipment, src) if(chassis.selected == src) chassis.selected = null update_chassis_page() log_message("[src] removed from equipment.", LOG_MECHA) chassis = null - set_ready_state(1) return @@ -151,17 +141,6 @@ if(href_list["detach"]) detach() -/obj/item/mecha_parts/mecha_equipment/proc/set_ready_state(state) - equip_ready = state - if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - return - -/obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) - if(chassis) - chassis.occupant_message("[icon2html(src, chassis.occupant)] [message]") - return - /obj/item/mecha_parts/mecha_equipment/log_message(message, message_type=LOG_GAME, color=null, log_globally) if(chassis) chassis.log_message("ATTACHMENT: [src] [message]", message_type, color) @@ -171,8 +150,8 @@ //Used for reloading weapons/tools etc. that use some form of resource /obj/item/mecha_parts/mecha_equipment/proc/rearm() - return 0 + return FALSE /obj/item/mecha_parts/mecha_equipment/proc/needs_rearm() - return 0 + return FALSE diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm similarity index 77% rename from code/game/mecha/equipment/tools/medical_tools.dm rename to code/modules/vehicles/mecha/equipment/tools/medical_tools.dm index 0f6fe31d445..dab190aa83b 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/medical_tools.dm @@ -7,12 +7,12 @@ . = ..() START_PROCESSING(SSobj, src) -/obj/item/mecha_parts/mecha_equipment/medical/can_attach(obj/mecha/medical/M) +/obj/item/mecha_parts/mecha_equipment/medical/can_attach(obj/vehicle/sealed/mecha/medical/M) if(..() && istype(M)) return 1 -/obj/item/mecha_parts/mecha_equipment/medical/attach(obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/medical/attach(obj/vehicle/sealed/mecha/M) ..() START_PROCESSING(SSobj, src) @@ -22,8 +22,7 @@ /obj/item/mecha_parts/mecha_equipment/medical/process() if(!chassis) - STOP_PROCESSING(SSobj, src) - return 1 + return PROCESS_KILL /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/detach() STOP_PROCESSING(SSobj, src) @@ -49,43 +48,46 @@ /obj/item/mecha_parts/mecha_equipment/medical/sleeper/Exit(atom/movable/O) return 0 -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/action(mob/living/carbon/target) +/obj/item/mecha_parts/mecha_equipment/medical/sleeper/action(mob/source, mob/living/carbon/target, params) if(!action_checks(target)) return if(!istype(target)) return if(!patient_insertion_check(target)) return - occupant_message("<span class='notice'>You start putting [target] into [src]...</span>") + to_chat(source, "[icon2html(src, source)]<span class='notice'>You start putting [target] into [src]...</span>") chassis.visible_message("<span class='warning'>[chassis] starts putting [target] into \the [src].</span>") - if(do_after_cooldown(target)) - if(!patient_insertion_check(target)) + if(do_after(source, equip_cooldown, target=target)) + if(!chassis || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) + return + if(!patient_insertion_check(target, source)) return target.forceMove(src) patient = target START_PROCESSING(SSobj, src) update_equip_info() - occupant_message("<span class='notice'>[target] successfully loaded into [src]. Life support functions engaged.</span>") + to_chat(source, "[icon2html(src, source)]<span class='notice'>[target] successfully loaded into [src]. Life support functions engaged.</span>") chassis.visible_message("<span class='warning'>[chassis] loads [target] into [src].</span>") log_message("[target] loaded. Life support functions engaged.", LOG_MECHA) + return ..() -/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target) +/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target, mob/user) if(target.buckled) - occupant_message("<span class='warning'>[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]!</span>") return if(target.has_buckled_mobs()) - occupant_message("<span class='warning'>[target] will not fit into the sleeper because of the creatures attached to it!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>[target] will not fit into the sleeper because of the creatures attached to it!</span>") return if(patient) - occupant_message("<span class='warning'>The sleeper is already occupied!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>The sleeper is already occupied!</span>") return - return 1 + return TRUE /obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/go_out() if(!patient) return patient.forceMove(get_turf(src)) - occupant_message("<span class='notice'>[patient] ejected. Life support functions disabled.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>[patient] ejected. Life support functions disabled.</span>") log_message("[patient] ejected. Life support functions disabled.", LOG_MECHA) STOP_PROCESSING(SSobj, src) patient = null @@ -93,7 +95,7 @@ /obj/item/mecha_parts/mecha_equipment/medical/sleeper/detach() if(patient) - occupant_message("<span class='warning'>Unable to detach [src] - equipment occupied!</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='warning'>Unable to detach [src] - equipment occupied!</span>") return STOP_PROCESSING(SSobj, src) return ..() @@ -107,17 +109,21 @@ return "[output] [temp]" /obj/item/mecha_parts/mecha_equipment/medical/sleeper/Topic(href,href_list) - ..() + . = ..() + if(.) + return + if(!(usr in chassis.occupants)) + return if(href_list["eject"]) go_out() if(href_list["view_stats"]) - chassis.occupant << browse(get_patient_stats(),"window=msleeper") - onclose(chassis.occupant, "msleeper") + usr << browse(get_patient_stats(),"window=msleeper") + onclose(usr, "msleeper") return if(href_list["inject"]) var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/SG = locate() in chassis var/datum/reagent/R = locate(href_list["inject"]) in SG.reagents.reagent_list - if (istype(R)) + if(istype(R)) inject_reagent(R, SG) /obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats() @@ -194,9 +200,9 @@ return 0 var/to_inject = min(R.volume, inject_amount) if(to_inject && patient.reagents.get_reagent_amount(R.type) + to_inject <= inject_amount*2) - occupant_message("<span class='notice'>Injecting [patient] with [to_inject] units of [R.name].</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>Injecting [patient] with [to_inject] units of [R.name].</span>") log_message("Injecting [patient] with [to_inject] units of [R.name].", LOG_MECHA) - log_combat(chassis.occupant, patient, "injected", "[name] ([R] - [to_inject] units)") + log_combat(chassis.occupants, patient, "injected", "[name] ([R] - [to_inject] units)") SG.reagents.trans_id_to(patient,R.type,to_inject) update_equip_info() return @@ -204,9 +210,9 @@ /obj/item/mecha_parts/mecha_equipment/medical/sleeper/update_equip_info() if(..()) if(patient) - send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_patient_dam()) - send_byjax(chassis.occupant,"msleeper.browser","reagents",get_patient_reagents()) - send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents()) + send_byjax(chassis.occupants,"msleeper.browser","lossinfo",get_patient_dam()) + send_byjax(chassis.occupants,"msleeper.browser","reagents",get_patient_reagents()) + send_byjax(chassis.occupants,"msleeper.browser","injectwith",get_available_reagents()) return 1 return @@ -217,9 +223,8 @@ if(..()) return if(!chassis.has_charge(energy_drain)) - set_ready_state(1) log_message("Deactivated.", LOG_MECHA) - occupant_message("<span class='warning'>[src] deactivated - no power.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='warning'>[src] deactivated - no power.</span>") STOP_PROCESSING(SSobj, src) return var/mob/living/carbon/M = patient @@ -274,7 +279,7 @@ STOP_PROCESSING(SSobj, src) return ..() -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/mecha/medical/M) +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/can_attach(obj/vehicle/sealed/mecha/medical/M) if(..()) if(istype(M)) return 1 @@ -285,38 +290,36 @@ if(output) return "[output] \[<a href=\"?src=[REF(src)];toggle_mode=1\">[mode? "Analyze" : "Launch"]</a>\]<br />\[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]<br /><a href='?src=[REF(src)];show_reagents=1'>Reagents list</a>" -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target) +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(mob/source, atom/movable/target, params) if(!action_checks(target)) return if(istype(target, /obj/item/reagent_containers/syringe)) return load_syringe(target) if(istype(target, /obj/item/storage))//Loads syringes from boxes for(var/obj/item/reagent_containers/syringe/S in target.contents) - load_syringe(S) + load_syringe(S, source) return if(mode) - return analyze_reagents(target) + return analyze_reagents(target, source) if(!syringes.len) - occupant_message("<span class=\"alert\">No syringes loaded.</span>") + to_chat(source, "[icon2html(src, source)]<span class=\"alert\">No syringes loaded.</span>") return if(reagents.total_volume<=0) - occupant_message("<span class=\"alert\">No available reagents to load syringe with.</span>") + to_chat(source, "[icon2html(src, source)]<span class=\"alert\">No available reagents to load syringe with.</span>") return - if(HAS_TRAIT(chassis.occupant, TRAIT_PACIFISM)) - occupant_message("<span class=\"alert\">The [src] is lethally chambered! You don't want to risk harming anyone...</span>") + if(HAS_TRAIT(source, TRAIT_PACIFISM)) + to_chat(source, "<span class=\"alert\">The [src] is lethally chambered! You don't want to risk harming anyone...</span>") return var/turf/trg = get_turf(target) var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1] mechsyringe.forceMove(get_turf(chassis)) - reagents.trans_to(mechsyringe, min(mechsyringe.volume, reagents.total_volume), transfered_by = chassis.occupant) + reagents.trans_to(mechsyringe, min(mechsyringe.volume, reagents.total_volume), transfered_by = source) syringes -= mechsyringe mechsyringe.icon = 'icons/obj/chemical.dmi' mechsyringe.icon_state = "syringeproj" playsound(chassis, 'sound/items/syringeproj.ogg', 50, TRUE) - log_message("Launched [mechsyringe] from [src], targeting [target].", LOG_MECHA) - var/mob/originaloccupant = chassis.occupant - spawn(0) - src = null //if src is deleted, still process the syringe + log_message("Launched [mechsyringe] from [src] by [source], targeting [target].", LOG_MECHA) + spawn(0) //This code is trash and whoever wrote it should feel bad for(var/i=0, i<6, i++) if(!mechsyringe) break @@ -334,9 +337,9 @@ R += "[A.name] ([num2text(A.volume)]" mechsyringe.icon_state = initial(mechsyringe.icon_state) mechsyringe.icon = initial(mechsyringe.icon) - mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume, transfered_by = originaloccupant, methods = INJECT) + mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume, transfered_by = source, methods = INJECT) M.take_bodypart_damage(2) - log_combat(originaloccupant, M, "shot", "syringegun") + log_combat(source, M, "shot", "syringegun") break else if(mechsyringe.loc == trg) mechsyringe.icon_state = initial(mechsyringe.icon_state) @@ -349,7 +352,7 @@ mechsyringe.update_icon() break sleep(1) - return 1 + return ..() /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Topic(href,href_list) @@ -373,12 +376,14 @@ if(processed_reagents.len) message += " added to production" START_PROCESSING(SSobj, src) - occupant_message(message) - occupant_message("<span class='notice'>Reagent processing started.</span>") + to_chat(usr, message) + to_chat(usr, "[icon2html(src, usr)]<span class='notice'>Reagent processing started.</span>") log_message("Reagent processing started.", LOG_MECHA) return if (href_list["show_reagents"]) - chassis.occupant << browse(get_reagents_page(),"window=msyringegun") + if(!(usr in chassis.occupants)) + return + usr << browse(get_reagents_page(),"window=msyringegun") if (href_list["purge_reagent"]) var/reagent = href_list["purge_reagent"] if(reagent) @@ -447,55 +452,55 @@ output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - <a href=\"?src=[REF(src)];purge_all=1\">Purge All</a>" return output || "None" -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S) +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S, mob/user) if(syringes.len<max_syringes) if(get_dist(src,S) >= 2) - occupant_message("<span class='warning'>The syringe is too far away!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>The syringe is too far away!</span>") return 0 for(var/obj/structure/D in S.loc)//Basic level check for structures in the way (Like grilles and windows) if(!(D.CanPass(S,src.loc))) - occupant_message("<span class='warning'>Unable to load syringe!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>Unable to load syringe!</span>") return 0 for(var/obj/machinery/door/D in S.loc)//Checks for doors if(!(D.CanPass(S,src.loc))) - occupant_message("<span class='warning'>Unable to load syringe!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>Unable to load syringe!</span>") return 0 - S.reagents.trans_to(src, S.reagents.total_volume, transfered_by = chassis.occupant) + S.reagents.trans_to(src, S.reagents.total_volume, transfered_by = user) S.forceMove(src) syringes += S - occupant_message("<span class='notice'>Syringe loaded.</span>") + to_chat(user, "[icon2html(src, user)]<span class='notice'>Syringe loaded.</span>") update_equip_info() return 1 - occupant_message("<span class='warning'>[src]'s syringe chamber is full!</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>[src]'s syringe chamber is full!</span>") return 0 -/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/analyze_reagents(atom/A) +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/analyze_reagents(atom/A, mob/user) if(get_dist(src,A) >= 4) - occupant_message("<span class='notice'>The object is too far away!</span>") - return 0 + to_chat(user, "[icon2html(src, user)]<span class='notice'>The object is too far away!</span>") + return FALSE if(!A.reagents || ismob(A)) - occupant_message("<span class='warning'>No reagent info gained from [A].</span>") - return 0 - occupant_message("<span class='notice'>Analyzing reagents...</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>No reagent info gained from [A].</span>") + return FALSE + to_chat(user, "[icon2html(src, user)]<span class='notice'>Analyzing reagents...</span>") for(var/datum/reagent/R in A.reagents.reagent_list) if(R.can_synth && add_known_reagent(R.type,R.name)) - occupant_message("<span class='notice'>Reagent analyzed, identified as [R.name] and added to database.</span>") - send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) - occupant_message("<span class='notice'>Analysis complete.</span>") - return 1 + to_chat(user, "[icon2html(src, user)]<span class='notice'>Reagent analyzed, identified as [R.name] and added to database.</span>") + send_byjax(chassis.occupants,"msyringegun.browser","reagents_form",get_reagents_form()) + to_chat(user, "[icon2html(src, user)]<span class='notice'>Analysis complete.</span>") + return TRUE /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/add_known_reagent(r_id,r_name) if(!(r_id in known_reagents)) known_reagents += r_id known_reagents[r_id] = r_name - return 1 - return 0 + return TRUE + return FALSE /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/update_equip_info() if(..()) - send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents()) - send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) - return 1 + send_byjax(chassis.occupants,"msyringegun.browser","reagents",get_current_reagents()) + send_byjax(chassis.occupants,"msyringegun.browser","reagents_form",get_reagents_form()) + return TRUE /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/on_reagent_change(changetype) ..() @@ -506,7 +511,7 @@ if(..()) return if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) - occupant_message("<span class='alert'>Reagent processing stopped.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='alert'>Reagent processing stopped.</span>") log_message("Reagent processing stopped.", LOG_MECHA) STOP_PROCESSING(SSobj, src) return @@ -542,7 +547,7 @@ return medigun.process() -/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam/action(mob/source, atom/movable/target, params) medigun.process_fire(target, loc) diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm similarity index 78% rename from code/game/mecha/equipment/tools/mining_tools.dm rename to code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index 941ca65d72e..ef856fe5434 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -13,6 +13,7 @@ energy_drain = 10 force = 15 harmful = TRUE + range = MECHA_MELEE tool_behaviour = TOOL_DRILL toolspeed = 0.9 var/drill_delay = 7 @@ -23,7 +24,7 @@ . = ..() AddComponent(/datum/component/butchering, 50, 100, null, null, TRUE) -/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, params) if(!action_checks(target)) return if(isspaceturf(target)) @@ -36,48 +37,45 @@ "<span class='userdanger'>[chassis] starts to drill [target]...</span>", \ "<span class='hear'>You hear drilling.</span>") - if(do_after_cooldown(target)) - set_ready_state(FALSE) + if(do_after_cooldown(target, source)) log_message("Started drilling [target]", LOG_MECHA) if(isturf(target)) var/turf/T = target - T.drill_act(src) - set_ready_state(TRUE) + T.drill_act(src, source) return - while(do_after_mecha(target, drill_delay)) + while(do_after_mecha(target, source, drill_delay)) if(isliving(target)) - drill_mob(target, chassis.occupant) + drill_mob(target, source) playsound(src,'sound/weapons/drill.ogg',40,TRUE) else if(isobj(target)) var/obj/O = target O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) playsound(src,'sound/weapons/drill.ogg',40,TRUE) else - set_ready_state(TRUE) return - set_ready_state(TRUE) + return ..() -/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) +/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) return -/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) - if(drill.do_after_mecha(src, 60 / drill.drill_level)) +/turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) + if(drill.do_after_mecha(src, user, 60 / drill.drill_level)) drill.log_message("Drilled through [src]", LOG_MECHA) dismantle_wall(TRUE, FALSE) -/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) +/turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) if(drill.drill_level >= DRILL_HARDENED) - if(drill.do_after_mecha(src, 120 / drill.drill_level)) + if(drill.do_after_mecha(src, user, 120 / drill.drill_level)) drill.log_message("Drilled through [src]", LOG_MECHA) dismantle_wall(TRUE, FALSE) else - drill.occupant_message("<span class='danger'>[src] is too durable to drill through.</span>") + to_chat(user, "[icon2html(src, user)]<span class='danger'>[src] is too durable to drill through.</span>") -/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) +/turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) for(var/turf/closed/mineral/M in range(drill.chassis,1)) if(get_dir(drill.chassis,M)&drill.chassis.dir) M.gets_drilled() - drill.log_message("Drilled through [src]", LOG_MECHA) + drill.log_message("[user] drilled through [src]", LOG_MECHA) drill.move_ores() /turf/open/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill) @@ -89,17 +87,17 @@ /obj/item/mecha_parts/mecha_equipment/drill/proc/move_ores() - if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment && istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/R = chassis //we could assume that it's a ripley because it has a clamp, but that's ~unsafe~ and ~bad practice~ + if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment && istype(chassis, /obj/vehicle/sealed/mecha/working/ripley)) + var/obj/vehicle/sealed/mecha/working/ripley/R = chassis //we could assume that it's a ripley because it has a clamp, but that's ~unsafe~ and ~bad practice~ R.collect_ore() -/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/mecha/M as obj) +/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/vehicle/sealed/mecha/M as obj) if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) - return 1 - return 0 + if(istype(M, /obj/vehicle/sealed/mecha/working) || istype(M, /obj/vehicle/sealed/mecha/combat)) + return TRUE + return FALSE -/obj/item/mecha_parts/mecha_equipment/drill/attach(obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/drill/attach(obj/vehicle/sealed/mecha/M) ..() var/datum/component/butchering/butchering = src.GetComponent(/datum/component/butchering) butchering.butchering_enabled = TRUE @@ -160,9 +158,9 @@ . = ..() START_PROCESSING(SSfastprocess, src) -/obj/item/mecha_parts/mecha_equipment/mining_scanner/can_attach(obj/mecha/M as obj) +/obj/item/mecha_parts/mecha_equipment/mining_scanner/can_attach(obj/vehicle/sealed/mecha/M as obj) if(..()) - if(istype(M, /obj/mecha/working)) + if(istype(M, /obj/vehicle/sealed/mecha/working)) return TRUE return FALSE @@ -170,9 +168,9 @@ if(!loc) STOP_PROCESSING(SSfastprocess, src) qdel(src) - if(istype(loc, /obj/mecha/working) && scanning_time <= world.time) - var/obj/mecha/working/mecha = loc - if(!mecha.occupant) + if(istype(loc, /obj/vehicle/sealed/mecha/working) && scanning_time <= world.time) + var/obj/vehicle/sealed/mecha/working/mecha = loc + if(!mecha.occupants) return scanning_time = world.time + equip_cooldown mineral_scan_pulse(get_turf(src)) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm similarity index 84% rename from code/game/mecha/equipment/tools/other_tools.dm rename to code/modules/vehicles/mecha/equipment/tools/other_tools.dm index da6648f3c49..af1af168047 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/other_tools.dm @@ -13,13 +13,13 @@ range = MECHA_RANGED var/teleport_range = 7 -/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/teleporter/action(mob/source, atom/target, params) if(!action_checks(target) || is_centcom_level(loc.z)) return var/turf/T = get_turf(target) if(T && (loc.z == T.z) && (get_dist(loc, T) <= teleport_range)) do_teleport(chassis, T, 4, channel = TELEPORT_CHANNEL_BLUESPACE) - return 1 + return ..() @@ -34,7 +34,7 @@ range = MECHA_RANGED -/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(mob/source, atom/target, params) if(!action_checks(target) || is_centcom_level(loc.z)) return var/list/theareas = get_areas_in_range(100, chassis) @@ -59,11 +59,11 @@ return var/list/obj/effect/portal/created = create_portal_pair(get_turf(src), target_turf, 300, 1, /obj/effect/portal/anom) var/turf/T = get_turf(target) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Wormhole Generator in [ADMIN_VERBOSEJMP(T)]") - log_game("[key_name(chassis.occupant)] used a Wormhole Generator in [AREACOORD(T)]") + message_admins("[ADMIN_LOOKUPFLW(source)] used a Wormhole Generator in [ADMIN_VERBOSEJMP(T)]") + log_game("[key_name(source)] used a Wormhole Generator in [AREACOORD(T)]") src = null QDEL_LIST_IN(created, rand(150,300)) - return 1 + return ..() /////////////////////////////////////// GRAVITATIONAL CATAPULT /////////////////////////////////////////// @@ -79,36 +79,36 @@ var/mode = 1 //1 - gravsling 2 - gravpush -/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) +/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(mob/source, atom/movable/target, params) if(!action_checks(target)) return switch(mode) if(1) if(!locked) if(!istype(target) || target.anchored || target.move_resist >= MOVE_FORCE_EXTREMELY_STRONG) - occupant_message("<span class='warning'>Unable to lock on [target]!</span>") + to_chat(source, "[icon2html(src, source)]<span class='warning'>Unable to lock on [target]!</span>") return if(ismob(target)) var/mob/M = target if(M.mob_negates_gravity()) - occupant_message("<span class='warning'>Unable to lock on [target]!</span>") + to_chat(source, "[icon2html(src, source)]<span class='warning'>Unable to lock on [target]!</span>") return locked = target - occupant_message("<span class='notice'>Locked on [target].</span>") - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Locked on [target].</span>") + send_byjax(source,"exosuit.browser","[REF(src)]",src.get_equip_info()) else if(target!=locked) if(locked in view(chassis)) var/turf/targ = get_turf(target) var/turf/orig = get_turf(locked) locked.throw_at(target, 14, 1.5) locked = null - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - log_game("[key_name(chassis.occupant)] used a Gravitational Catapult to throw [locked] (From [AREACOORD(orig)]) at [target] ([AREACOORD(targ)]).") - return TRUE + send_byjax(source,"exosuit.browser","[REF(src)]",src.get_equip_info()) + log_game("[key_name(source)] used a Gravitational Catapult to throw [locked] (From [AREACOORD(orig)]) at [target] ([AREACOORD(targ)]).") + return ..() else locked = null - occupant_message("<span class='notice'>Lock on [locked] disengaged.</span>") - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Lock on [locked] disengaged.</span>") + send_byjax(source,"exosuit.browser","[REF(src)]",src.get_equip_info()) if(2) var/list/atoms = list() if(isturf(target)) @@ -125,8 +125,8 @@ INVOKE_ASYNC(src, .proc/do_scatter, A, target) var/turf/T = get_turf(target) - log_game("[key_name(chassis.occupant)] used a Gravitational Catapult repulse wave on [AREACOORD(T)]") - return TRUE + log_game("[key_name(source)] used a Gravitational Catapult repulse wave on [AREACOORD(T)]") + return ..() /obj/item/mecha_parts/mecha_equipment/gravcatapult/proc/do_scatter(atom/movable/A, atom/movable/target) var/iter = 5-get_dist(A,target) @@ -141,7 +141,7 @@ ..() if(href_list["mode"]) mode = text2num(href_list["mode"]) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) + send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info()) return @@ -162,9 +162,10 @@ selectable = 0 /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/attack_react() - if(action_checks(src)) - start_cooldown() - return 1 + if(energy_drain && !chassis.has_charge(energy_drain)) + return FALSE + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_ARMOR, equip_cooldown) + return TRUE @@ -180,9 +181,10 @@ selectable = 0 /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/projectile_react() - if(action_checks(src)) - start_cooldown() - return 1 + if(energy_drain && !chassis.has_charge(energy_drain)) + return FALSE + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_ARMOR, equip_cooldown) + return TRUE ////////////////////////////////// REPAIR DROID ////////////////////////////////////////////////// @@ -205,7 +207,7 @@ chassis.cut_overlay(droid_overlay) return ..() -/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) +/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/vehicle/sealed/mecha/M) ..() droid_overlay = new(src.icon, icon_state = "repair_droid") M.add_overlay(droid_overlay) @@ -229,20 +231,17 @@ START_PROCESSING(SSobj, src) droid_overlay = new(src.icon, icon_state = "repair_droid_a") log_message("Activated.", LOG_MECHA) - set_ready_state(0) else STOP_PROCESSING(SSobj, src) droid_overlay = new(src.icon, icon_state = "repair_droid") log_message("Deactivated.", LOG_MECHA) - set_ready_state(1) chassis.add_overlay(droid_overlay) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) + send_byjax(chassis.occupants,"exosuit.browser", "[REF(src)]", get_equip_info()) /obj/item/mecha_parts/mecha_equipment/repair_droid/process() if(!chassis) STOP_PROCESSING(SSobj, src) - set_ready_state(1) return var/h_boost = health_boost var/repaired = 0 @@ -260,10 +259,8 @@ if(repaired) if(!chassis.use_power(energy_drain)) STOP_PROCESSING(SSobj, src) - set_ready_state(1) else //no repair needed, we turn off STOP_PROCESSING(SSobj, src) - set_ready_state(1) chassis.cut_overlay(droid_overlay) droid_overlay = new(src.icon, icon_state = "repair_droid") chassis.add_overlay(droid_overlay) @@ -315,11 +312,9 @@ if(href_list["toggle_relay"]) if(equip_ready) //inactive START_PROCESSING(SSobj, src) - set_ready_state(0) log_message("Activated.", LOG_MECHA) else STOP_PROCESSING(SSobj, src) - set_ready_state(1) log_message("Deactivated.", LOG_MECHA) /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() @@ -331,13 +326,11 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process() if(!chassis || chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) STOP_PROCESSING(SSobj, src) - set_ready_state(1) return var/cur_charge = chassis.get_charge() if(isnull(cur_charge) || !chassis.cell) STOP_PROCESSING(SSobj, src) - set_ready_state(1) - occupant_message("<span class='notice'>No power cell detected.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>No power cell detected.</span>") return if(cur_charge < chassis.cell.maxcharge) var/area/A = get_area(chassis) @@ -389,11 +382,9 @@ ..() if(href_list["toggle"]) if(equip_ready) //inactive - set_ready_state(0) START_PROCESSING(SSobj, src) log_message("Activated.", LOG_MECHA) else - set_ready_state(1) STOP_PROCESSING(SSobj, src) log_message("Deactivated.", LOG_MECHA) @@ -402,26 +393,26 @@ if(output) return "[output] \[[fuel]: [round(fuel.amount*MINERAL_MATERIAL_AMOUNT,0.1)] cm<sup>3</sup>\] - <a href='?src=[REF(src)];toggle=1'>[equip_ready?"A":"Dea"]ctivate</a>" -/obj/item/mecha_parts/mecha_equipment/generator/action(target) +/obj/item/mecha_parts/mecha_equipment/generator/action(mob/source, atom/movable/target, params) if(chassis) - var/result = load_fuel(target) - if(result) - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) + if(load_fuel(target, source)) + send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info()) + return ..() -/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/stack/sheet/P) +/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/stack/sheet/P, mob/user) if(P.type == fuel.type && P.amount > 0) var/to_load = max(max_fuel - fuel.amount*MINERAL_MATERIAL_AMOUNT,0) if(to_load) var/units = min(max(round(to_load / MINERAL_MATERIAL_AMOUNT),1),P.amount) fuel.amount += units P.use(units) - occupant_message("<span class='notice'>[units] unit\s of [fuel] successfully loaded.</span>") + to_chat(user, "[icon2html(src, user)]<span class='notice'>[units] unit\s of [fuel] successfully loaded.</span>") return units else - occupant_message("<span class='notice'>Unit is full.</span>") + to_chat(user, "[icon2html(src, user)]<span class='notice'>Unit is full.</span>") return 0 else - occupant_message("<span class='warning'>[fuel] traces in target minimal! [P] cannot be used as fuel.</span>") + to_chat(user, "[icon2html(src, user)]<span class='warning'>[fuel] traces in target minimal! [P] cannot be used as fuel.</span>") return /obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params) @@ -430,17 +421,14 @@ /obj/item/mecha_parts/mecha_equipment/generator/process() if(!chassis) STOP_PROCESSING(SSobj, src) - set_ready_state(1) return if(fuel.amount<=0) STOP_PROCESSING(SSobj, src) log_message("Deactivated - no fuel.", LOG_MECHA) - set_ready_state(1) return var/cur_charge = chassis.get_charge() if(isnull(cur_charge)) - set_ready_state(1) - occupant_message("<span class='notice'>No power cell detected.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>No power cell detected.</span>") log_message("Deactivated.", LOG_MECHA) STOP_PROCESSING(SSobj, src) return @@ -450,7 +438,7 @@ chassis.give_power(power_per_cycle) fuel.amount -= min(use_fuel/MINERAL_MATERIAL_AMOUNT,fuel.amount) update_equip_info() - return 1 + return TRUE /obj/item/mecha_parts/mecha_equipment/generator/nuclear @@ -480,14 +468,14 @@ selectable = FALSE var/effect_type = /obj/effect/particle_effect/sparks -/obj/item/mecha_parts/mecha_equipment/thrusters/try_attach_part(mob/user, obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/thrusters/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) for(var/obj/item/I in M.equipment) if(istype(I, src)) to_chat(user, "<span class='warning'>[M] already has this thruster package!</span>") return FALSE . = ..() -/obj/item/mecha_parts/mecha_equipment/thrusters/attach(obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/thrusters/attach(obj/vehicle/sealed/mecha/M) M.active_thrusters = src //Enable by default . = ..() @@ -518,13 +506,13 @@ if (chassis.active_thrusters == src) return chassis.active_thrusters = src - occupant_message("<span class='notice'>[src] enabled.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>[src] enabled.</span>") /obj/item/mecha_parts/mecha_equipment/thrusters/proc/disable() if(chassis.active_thrusters != src) return chassis.active_thrusters = null - occupant_message("<span class='notice'>[src] disabled.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>[src] disabled.</span>") /obj/item/mecha_parts/mecha_equipment/thrusters/get_equip_info() return "[..()] \[<a href='?src=[REF(src)];mode=0'>Enable</a>|<a href='?src=[REF(src)];mode=1'>Disable</a>\]" @@ -548,7 +536,7 @@ effect_type = /obj/effect/particle_effect/smoke var/move_cost = 20 //moles per step -/obj/item/mecha_parts/mecha_equipment/thrusters/gas/try_attach_part(mob/user, obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/thrusters/gas/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) if(!M.internal_tank) to_chat(user, "<span class='warning'>[M] does not have an internal tank and cannot support this upgrade!</span>") return FALSE diff --git a/code/game/mecha/equipment/tools/weapon_bay.dm b/code/modules/vehicles/mecha/equipment/tools/weapon_bay.dm similarity index 87% rename from code/game/mecha/equipment/tools/weapon_bay.dm rename to code/modules/vehicles/mecha/equipment/tools/weapon_bay.dm index 5fe3e14880f..469d430328a 100644 --- a/code/game/mecha/equipment/tools/weapon_bay.dm +++ b/code/modules/vehicles/mecha/equipment/tools/weapon_bay.dm @@ -4,8 +4,8 @@ icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_weapon_bay" -/obj/item/mecha_parts/concealed_weapon_bay/try_attach_part(mob/user, obj/mecha/M) - if(istype(M, /obj/mecha/combat)) +/obj/item/mecha_parts/concealed_weapon_bay/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) + if(istype(M, /obj/vehicle/sealed/mecha/combat)) to_chat(user, "<span class='warning'>[M] can already hold weapons!</span>") return if(locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm similarity index 74% rename from code/game/mecha/equipment/tools/work_tools.dm rename to code/modules/vehicles/mecha/equipment/tools/work_tools.dm index b796085a2ef..361106a31a5 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -9,19 +9,20 @@ equip_cooldown = 15 energy_drain = 10 tool_behaviour = TOOL_RETRACTOR + range = MECHA_MELEE toolspeed = 0.8 var/dam_force = 20 - var/obj/mecha/working/ripley/cargo_holder + var/obj/vehicle/sealed/mecha/working/ripley/cargo_holder harmful = TRUE mech_flags = EXOSUIT_MODULE_RIPLEY -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/vehicle/sealed/mecha/working/ripley/M) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/mecha/M as obj) +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/vehicle/sealed/mecha/M) ..() cargo_holder = M return @@ -30,56 +31,56 @@ ..() cargo_holder = null -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(mob/source, atom/target, params) if(!action_checks(target)) return if(!cargo_holder) return if(ismecha(target)) - var/obj/mecha/M = target + var/obj/vehicle/sealed/mecha/M = target var/have_ammo for(var/obj/item/mecha_ammo/box in cargo_holder.cargo) if(istype(box, /obj/item/mecha_ammo) && box.rounds) have_ammo = TRUE - if(M.ammo_resupply(box, chassis.occupant, TRUE)) + if(M.ammo_resupply(box, source, TRUE)) return if(have_ammo) - to_chat(chassis.occupant, "No further supplies can be provided to [M].") + to_chat(source, "No further supplies can be provided to [M].") else - to_chat(chassis.occupant, "No providable supplies found in cargo hold") + to_chat(source, "No providable supplies found in cargo hold") return if(isobj(target)) var/obj/O = target if(istype(O, /obj/machinery/door/firedoor)) var/obj/machinery/door/firedoor/D = O - D.try_to_crowbar(src,chassis.occupant) + D.try_to_crowbar(src, source) return if(istype(O, /obj/machinery/door/airlock/)) var/obj/machinery/door/airlock/D = O - D.try_to_crowbar(src,chassis.occupant) + D.try_to_crowbar(src, source) return if(!O.anchored) if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) chassis.visible_message("<span class='notice'>[chassis] lifts [target] and starts to load it into cargo compartment.</span>") O.set_anchored(TRUE) - if(do_after_cooldown(target)) + if(do_after_cooldown(target, source)) cargo_holder.cargo += O O.forceMove(chassis) O.set_anchored(FALSE) - occupant_message("<span class='notice'>[target] successfully loaded.</span>") + to_chat(source, "[icon2html(src, source)]<span class='notice'>[target] successfully loaded.</span>") log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA) else O.set_anchored(initial(O.anchored)) else - occupant_message("<span class='warning'>Not enough room in cargo compartment!</span>") + to_chat(source, "[icon2html(src, source)]<span class='warning'>Not enough room in cargo compartment!</span>") else - occupant_message("<span class='warning'>[target] is firmly secured!</span>") + to_chat(source, "[icon2html(src, source)]<span class='warning'>[target] is firmly secured!</span>") else if(isliving(target)) var/mob/living/M = target if(M.stat == DEAD) return - if(chassis.occupant.a_intent == INTENT_HARM) + if(source.a_intent == INTENT_HARM) M.take_overall_damage(dam_force) if(!M) return @@ -88,12 +89,12 @@ target.visible_message("<span class='danger'>[chassis] squeezes [target]!</span>", \ "<span class='userdanger'>[chassis] squeezes you!</span>",\ "<span class='hear'>You hear something crack.</span>") - log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + log_combat(source, M, "attacked", "[name]", "(INTENT: [uppertext(source.a_intent)]) (DAMTYPE: [uppertext(damtype)])") else step_away(M,chassis) - occupant_message("<span class='notice'>You push [target] out of the way.</span>") + to_chat(source, "[icon2html(src, source)]<span class='notice'>You push [target] out of the way.</span>") chassis.visible_message("<span class='notice'>[chassis] pushes [target] out of the way.</span>") - return 1 + return ..() @@ -111,7 +112,7 @@ dam_force = 20 real_clamp = TRUE -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(mob/source, atom/target, params) if(!action_checks(target)) return if(!cargo_holder) @@ -122,24 +123,24 @@ if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) chassis.visible_message("<span class='notice'>[chassis] lifts [target] and starts to load it into cargo compartment.</span>") O.set_anchored(TRUE) - if(do_after_cooldown(target)) + if(do_after_cooldown(target, source)) cargo_holder.cargo += O O.forceMove(chassis) O.set_anchored(FALSE) - occupant_message("<span class='notice'>[target] successfully loaded.</span>") + to_chat(source, "[icon2html(src, source)]<span class='notice'>[target] successfully loaded.</span>") log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]", LOG_MECHA) else O.set_anchored(initial(O.anchored)) else - occupant_message("<span class='warning'>Not enough room in cargo compartment!</span>") + to_chat(source, "[icon2html(src, source)]<span class='warning'>Not enough room in cargo compartment!</span>") else - occupant_message("<span class='warning'>[target] is firmly secured!</span>") + to_chat(source, "[icon2html(src, source)]<span class='warning'>[target] is firmly secured!</span>") else if(isliving(target)) var/mob/living/M = target if(M.stat == DEAD) return - if(chassis.occupant.a_intent == INTENT_HARM) + if(source.a_intent == INTENT_HARM) if(real_clamp) M.take_overall_damage(dam_force) if(!M) @@ -148,11 +149,11 @@ M.updatehealth() target.visible_message("<span class='danger'>[chassis] destroys [target] in an unholy fury!</span>", \ "<span class='userdanger'>[chassis] destroys you in an unholy fury!</span>") - log_combat(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + log_combat(source, M, "attacked", "[name]", "(INTENT: [uppertext(source.a_intent)]) (DAMTYPE: [uppertext(damtype)])") else target.visible_message("<span class='danger'>[chassis] destroys [target] in an unholy fury!</span>", \ "<span class='userdanger'>[chassis] destroys you in an unholy fury!</span>") - else if(chassis.occupant.a_intent == INTENT_DISARM) + else if(source.a_intent == INTENT_DISARM) if(real_clamp) var/mob/living/carbon/C = target var/play_sound = FALSE @@ -171,7 +172,7 @@ playsound(src, get_dismember_sound(), 80, TRUE) target.visible_message("<span class='danger'>[chassis] rips [target]'s arms off!</span>", \ "<span class='userdanger'>[chassis] rips your arms off!</span>") - log_combat(chassis.occupant, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + log_combat(source, M, "dismembered of[limbs_gone],", "[name]", "(INTENT: [uppertext(source.a_intent)]) (DAMTYPE: [uppertext(damtype)])") else target.visible_message("<span class='danger'>[chassis] rips [target]'s arms off!</span>", \ "<span class='userdanger'>[chassis] rips your arms off!</span>") @@ -179,7 +180,7 @@ step_away(M,chassis) target.visible_message("<span class='danger'>[chassis] tosses [target] like a piece of paper!</span>", \ "<span class='userdanger'>[chassis] tosses you like a piece of paper!</span>") - return 1 + return ..() @@ -197,14 +198,14 @@ create_reagents(1000) reagents.add_reagent(/datum/reagent/water, 1000) -/obj/item/mecha_parts/mecha_equipment/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. +/obj/item/mecha_parts/mecha_equipment/extinguisher/action(mob/source, atom/target, params) //copypasted from extinguisher. TODO: Rewrite from scratch.//Still todo if(!action_checks(target) || get_dist(chassis, target)>3) return if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) var/obj/structure/reagent_dispensers/watertank/WT = target WT.reagents.trans_to(src, 1000) - occupant_message("<span class='notice'>Extinguisher refilled.</span>") + to_chat(source, "[icon2html(src, source)]<span class='notice'>Extinguisher refilled.</span>") playsound(chassis, 'sound/effects/refill.ogg', 50, TRUE, -6) else if(reagents.total_volume > 0) @@ -224,7 +225,7 @@ var/datum/reagents/R = new/datum/reagents(5) W.reagents = R R.my_atom = W - reagents.trans_to(W,1, transfered_by = chassis.occupant) + reagents.trans_to(W,1, transfered_by = source) for(var/b=0, b<4, b++) if(!W) return @@ -238,12 +239,12 @@ if(W.loc == my_target) break sleep(2) - return 1 + return ..() /obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info() return "[..()] \[[src.reagents.total_volume]\]" -/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/mecha/working/M as obj) +/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/vehicle/sealed/mecha/working/M as obj) if(..()) if(istype(M)) return 1 @@ -269,7 +270,7 @@ GLOB.rcd_list -= src return ..() -/obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/rcd/action(mob/source, atom/target, params) if(istype(target, /turf/open/space/transit))//>implying these are ever made -Sieve return @@ -283,53 +284,49 @@ if(0) if(iswallturf(target)) var/turf/closed/wall/W = target - occupant_message("<span class='notice'>Deconstructing [W]...</span>") - if(do_after_cooldown(W)) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Deconstructing [W]...</span>") + if(do_after_cooldown(W, source)) chassis.spark_system.start() W.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) playsound(W, 'sound/items/deconstruct.ogg', 50, TRUE) else if(isfloorturf(target)) var/turf/open/floor/F = target - occupant_message("<span class='notice'>Deconstructing [F]...</span>") - if(do_after_cooldown(target)) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Deconstructing [F]...</span>") + if(do_after_cooldown(target, source)) chassis.spark_system.start() F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) playsound(F, 'sound/items/deconstruct.ogg', 50, TRUE) else if (istype(target, /obj/machinery/door/airlock)) - occupant_message("<span class='notice'>Deconstructing [target]...</span>") - if(do_after_cooldown(target)) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Deconstructing [target]...</span>") + if(do_after_cooldown(target, source)) chassis.spark_system.start() qdel(target) playsound(target, 'sound/items/deconstruct.ogg', 50, TRUE) if(1) if(isspaceturf(target)) var/turf/open/space/S = target - occupant_message("<span class='notice'>Building Floor...</span>") - if(do_after_cooldown(S)) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Building Floor...</span>") + if(do_after_cooldown(S, source)) S.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) playsound(S, 'sound/items/deconstruct.ogg', 50, TRUE) chassis.spark_system.start() else if(isfloorturf(target)) var/turf/open/floor/F = target - occupant_message("<span class='notice'>Building Wall...</span>") - if(do_after_cooldown(F)) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Building Wall...</span>") + if(do_after_cooldown(F, source)) F.PlaceOnTop(/turf/closed/wall) playsound(F, 'sound/items/deconstruct.ogg', 50, TRUE) chassis.spark_system.start() if(2) if(isfloorturf(target)) - occupant_message("<span class='notice'>Building Airlock...</span>") - if(do_after_cooldown(target)) + to_chat(source, "[icon2html(src, source)]<span class='notice'>Building Airlock...</span>") + if(do_after_cooldown(target, source)) chassis.spark_system.start() var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) T.autoclose = TRUE playsound(target, 'sound/items/deconstruct.ogg', 50, TRUE) playsound(target, 'sound/effects/sparks2.ogg', 50, TRUE) - - - -/obj/item/mecha_parts/mecha_equipment/rcd/do_after_cooldown(atom/target) - . = ..() + return ..() /obj/item/mecha_parts/mecha_equipment/rcd/Topic(href,href_list) ..() @@ -337,13 +334,13 @@ mode = text2num(href_list["mode"]) switch(mode) if(0) - occupant_message("<span class='notice'>Switched RCD to Deconstruct.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>Switched RCD to Deconstruct.</span>") energy_drain = initial(energy_drain) if(1) - occupant_message("<span class='notice'>Switched RCD to Construct.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>Switched RCD to Construct.</span>") energy_drain = 2*initial(energy_drain) if(2) - occupant_message("<span class='notice'>Switched RCD to Construct Airlock.</span>") + to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)]<span class='notice'>Switched RCD to Construct Airlock.</span>") energy_drain = 2*initial(energy_drain) return @@ -357,17 +354,17 @@ icon_state = "ripleyupgrade" mech_flags = EXOSUIT_MODULE_RIPLEY -/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/mecha/working/ripley/M) - if(M.type != /obj/mecha/working/ripley) +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/can_attach(obj/vehicle/sealed/mecha/working/ripley/M) + if(M.type != /obj/vehicle/sealed/mecha/working/ripley) to_chat(loc, "<span class='warning'>This conversion kit can only be applied to APLU MK-I models.</span>") return FALSE if(M.cargo.len) to_chat(loc, "<span class='warning'>[M]'s cargo hold must be empty before this conversion kit can be applied.</span>") return FALSE - if(!M.maint_access) //non-removable upgrade, so lets make sure the pilot or owner has their say. + if(!(M.mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)) //non-removable upgrade, so lets make sure the pilot or owner has their say. to_chat(loc, "<span class='warning'>[M] must have maintenance protocols active in order to allow this conversion kit.</span>") return FALSE - if(M.occupant) //We're actualy making a new mech and swapping things over, it might get weird if players are involved + if(LAZYLEN(M.occupants)) //We're actualy making a new mech and swapping things over, it might get weird if players are involved to_chat(loc, "<span class='warning'>[M] must be unoccupied before this conversion kit can be applied.</span>") return FALSE if(!M.cell) //Turns out things break if the cell is missing @@ -375,8 +372,8 @@ return FALSE return TRUE -/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/mecha/M) - var/obj/mecha/working/ripley/mkii/N = new /obj/mecha/working/ripley/mkii(get_turf(M),1) +/obj/item/mecha_parts/mecha_equipment/ripleyupgrade/attach(obj/vehicle/sealed/mecha/M) + var/obj/vehicle/sealed/mecha/working/ripley/mkii/N = new /obj/vehicle/sealed/mecha/working/ripley/mkii(get_turf(M),1) if(!N) return QDEL_NULL(N.cell) @@ -399,11 +396,10 @@ if(istype(E, /obj/item/mecha_parts/concealed_weapon_bay)) //why is the bay not just a variable change who did this E.forceMove(N) for(var/obj/item/mecha_parts/mecha_equipment/E in M.equipment) //Move the equipment over... - E.detach() + E.detach(M) E.attach(N) - M.equipment -= E N.dna_lock = M.dna_lock - N.maint_access = M.maint_access + N.mecha_flags = M.mecha_flags N.strafe = M.strafe N.obj_integrity = M.obj_integrity //This is not a repair tool if (M.name != "\improper APLU MK-I \"Ripley\"") diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm similarity index 100% rename from code/game/mecha/equipment/weapons/mecha_ammo.dm rename to code/modules/vehicles/mecha/equipment/weapons/mecha_ammo.dm diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm similarity index 83% rename from code/game/mecha/equipment/weapons/weapons.dm rename to code/modules/vehicles/mecha/equipment/weapons/weapons.dm index 554dd2895f4..f9e2933a75a 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm @@ -6,75 +6,56 @@ var/fire_sound var/projectiles_per_shot = 1 var/variance = 0 - var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter + var/randomspread = FALSE //use random spread for machineguns, instead of shotgun scatter var/projectile_delay = 0 var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect //the visual effect appearing when the weapon is fired. var/kickback = TRUE //Will using this weapon in no grav push mecha back. mech_flags = EXOSUIT_MODULE_COMBAT -/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/vehicle/sealed/mecha/M) if(!..()) return FALSE - if(istype(M, /obj/mecha/combat)) + if(istype(M, /obj/vehicle/sealed/mecha/combat)) return TRUE if((locate(/obj/item/mecha_parts/concealed_weapon_bay) in M.contents) && !(locate(/obj/item/mecha_parts/mecha_equipment/weapon) in M.equipment)) return TRUE return FALSE -/obj/item/mecha_parts/mecha_equipment/weapon/proc/get_shot_amount() - return projectiles_per_shot - -/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) +/obj/item/mecha_parts/mecha_equipment/weapon/action(mob/source, atom/target, params) if(!action_checks(target)) - return 0 - - var/turf/curloc = get_turf(chassis) - var/turf/targloc = get_turf(target) - if (!targloc || !istype(targloc) || !curloc) - return 0 - if (targloc == curloc) - return 0 - - set_ready_state(0) - for(var/i=1 to get_shot_amount()) - var/obj/projectile/A = new projectile(curloc) - A.firer = chassis.occupant - A.original = target - if(!A.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), chassis.dir) - + return FALSE + var/newtonian_target = turn(chassis.dir,180) + . = ..()//start the cooldown early because of sleeps + for(var/i in 1 to projectiles_per_shot) + if(energy_drain && !chassis.has_charge(energy_drain))//in case we run out of energy mid-burst, such as emp + break var/spread = 0 if(variance) if(randomspread) spread = round((rand() - 0.5) * variance) else spread = round((i / projectiles_per_shot - 0.5) * variance) - A.preparePixelProjectile(target, chassis.occupant, params, spread) + + var/obj/projectile/A = new projectile(get_turf(src)) + A.preparePixelProjectile(target, source, params, spread) A.fire() + if(!A.suppressed && firing_effect_type) + new firing_effect_type(get_turf(src), chassis.dir) playsound(chassis, fire_sound, 50, TRUE) sleep(max(0, projectile_delay)) - if(kickback) - chassis.newtonian_move(turn(chassis.dir,180)) + if(kickback) + chassis.newtonian_move(newtonian_target) chassis.log_message("Fired from [src.name], targeting [target].", LOG_MECHA) - return 1 - + return ..() //Base energy weapon type /obj/item/mecha_parts/mecha_equipment/weapon/energy name = "general energy weapon" firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy -/obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount() - return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot) - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() - set_ready_state(0) - chassis.use_power(energy_drain*get_shot_amount()) - addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown) - /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 name = "\improper CH-PS \"Immolator\" laser" @@ -145,12 +126,12 @@ fire_sound = 'sound/weapons/plasma_cutter.ogg' harmful = TRUE -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/vehicle/sealed/mecha/M) if(..()) //combat mech - return 1 - else if(M.equipment.len < M.max_equip && istype(M)) - return 1 - return 0 + return TRUE + else if(LAZYLEN(M.equipment) < M.max_equip) + return TRUE + return FALSE /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser name = "\improper PBT \"Pacifier\" mounted taser" @@ -172,17 +153,19 @@ kickback = FALSE mech_flags = EXOSUIT_MODULE_HONK -/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 +/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/vehicle/sealed/mecha/mecha) + . = ..() + if(!.) + return + if(!istype(mecha, /obj/vehicle/sealed/mecha/combat/honker)) + return FALSE -/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params) + +/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(mob/source, atom/target, params) if(!action_checks(target)) return playsound(chassis, 'sound/items/airhorn.ogg', 100, TRUE) - chassis.occupant_message("<font color='red' size='5'>HONK</font>") + to_chat(source, "[icon2html(src, source)]<font color='red' size='5'>HONK</font>") for(var/mob/living/carbon/M in ohearers(6, chassis)) if(!M.can_hear()) continue @@ -204,9 +187,9 @@ log_message("Honked from [src.name]. HONK!", LOG_MECHA) var/turf/T = get_turf(src) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Mecha Honker in [ADMIN_VERBOSEJMP(T)]") - log_game("[key_name(chassis.occupant)] used a Mecha Honker in [AREACOORD(T)]") - return 1 + message_admins("[ADMIN_LOOKUPFLW(source)] used a Mecha Honker in [ADMIN_VERBOSEJMP(T)]") + log_game("[key_name(source)] used a Mecha Honker in [AREACOORD(T)]") + return ..() //Base ballistic weapon type @@ -220,15 +203,12 @@ var/disabledreload //For weapons with no cache (like the rockets) which are reloaded by hand var/ammo_type -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_shot_amount() - return min(projectiles, projectiles_per_shot) - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(target) if(!..()) - return 0 + return FALSE if(projectiles <= 0) - return 0 - return 1 + return FALSE + return TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() return "[..()] \[[src.projectiles][projectiles_cache_max &&!projectile_energy_cost?"/[projectiles_cache]":""]\][!disabledreload &&(src.projectiles < initial(src.projectiles))?" - <a href='?src=[REF(src)];rearm=1'>Rearm</a>":null]" @@ -254,7 +234,7 @@ projectiles = projectiles + projectiles_cache projectiles_cache = 0 - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) + send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info()) log_message("Rearmed [src.name].", LOG_MECHA) return TRUE @@ -270,11 +250,11 @@ src.rearm() return -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(mob/source, atom/target, params) if(..()) - projectiles -= get_shot_amount() - send_byjax(chassis.occupant,"exosuit.browser","[REF(src)]",src.get_equip_info()) - return 1 + projectiles -= projectiles_per_shot + send_byjax(chassis.occupants,"exosuit.browser","[REF(src)]",src.get_equip_info()) + return ..() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine @@ -344,9 +324,6 @@ harmful = TRUE ammo_type = "missiles_he" -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/spacecops - projectiles = 420 - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching name = "\improper BRM-6 missile rack" desc = "A weapon for combat exosuits. Launches low-explosive breaching missiles designed to explode only when striking a sturdy target." @@ -367,19 +344,19 @@ var/missile_range = 30 var/diags_first = FALSE -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(mob/source, atom/target, params) if(!action_checks(target)) return var/obj/O = new projectile(chassis.loc) playsound(chassis, fire_sound, 50, TRUE) log_message("Launched a [O.name] from [name], targeting [target].", LOG_MECHA) projectiles-- - proj_init(O) - O.throw_at(target, missile_range, missile_speed, chassis.occupant, FALSE, diagonals_first = diags_first) - return 1 + proj_init(O, source) + O.throw_at(target, missile_range, missile_speed, source, FALSE, diagonals_first = diags_first) + return TRUE //used for projectile initilisation (priming flashbang) and additional logging -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(obj/O) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(obj/O, mob/user) return @@ -397,10 +374,10 @@ var/det_time = 20 ammo_type = "flashbang" -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(obj/item/grenade/flashbang/F) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(obj/item/grenade/flashbang/F, mob/user) var/turf/T = get_turf(src) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] fired a [src] in [ADMIN_VERBOSEJMP(T)]") - log_game("[key_name(chassis.occupant)] fired a [src] in [AREACOORD(T)]") + message_admins("[ADMIN_LOOKUPFLW(user)] fired a [F] in [ADMIN_VERBOSEJMP(T)]") + log_game("[key_name(user)] fired a [F] in [AREACOORD(T)]") addtimer(CALLBACK(F, /obj/item/grenade/flashbang.proc/prime), det_time) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze @@ -426,7 +403,7 @@ equip_cooldown = 20 mech_flags = EXOSUIT_MODULE_HONK -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/vehicle/sealed/mecha/combat/honker/M) if(..()) if(istype(M)) return 1 @@ -444,7 +421,7 @@ equip_cooldown = 10 mech_flags = EXOSUIT_MODULE_HONK -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/vehicle/sealed/mecha/combat/honker/M) if(..()) if(istype(M)) return 1 @@ -475,7 +452,7 @@ var/can_toggle_lethal = TRUE mech_flags = EXOSUIT_MODULE_HONK -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/mecha/combat/honker/M) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/vehicle/sealed/mecha/combat/honker/M) if(..()) if(istype(M)) return 1 @@ -495,14 +472,14 @@ if(href_list["lethalPunch"]) harmful = !harmful if(harmful) - chassis?.occupant_message("<span class='warning'>Lethal Fisting Enabled.</span>") + chassis?.to_chat(usr, "[icon2html(src, usr)]<span class='warning'>Lethal Fisting Enabled.</span>") else - chassis?.occupant_message("<span class='warning'>Lethal Fisting Disabled.</span>") + chassis?.to_chat(usr, "[icon2html(src, usr)]<span class='warning'>Lethal Fisting Disabled.</span>") -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(target) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(mob/source, atom/target, params) . = ..() if(.) - chassis.occupant_message("<font color='red' size='5'>HONK</font>") + to_chat(usr, "[icon2html(src, usr)]<font color='red' size='5'>HONK</font>") /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/proj_init(obj/item/punching_glove/PG) if(!istype(PG)) diff --git a/code/game/mecha/mech_bay.dm b/code/modules/vehicles/mecha/mech_bay.dm similarity index 97% rename from code/game/mecha/mech_bay.dm rename to code/modules/vehicles/mecha/mech_bay.dm index 707ecda6177..8648de53fb8 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/modules/vehicles/mecha/mech_bay.dm @@ -19,7 +19,7 @@ icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_port" circuit = /obj/item/circuitboard/machine/mech_recharger - var/obj/mecha/recharging_mech + var/obj/vehicle/sealed/mecha/recharging_mech var/obj/machinery/computer/mech_bay_power_console/recharge_console var/max_charge = 50 var/on = FALSE @@ -53,7 +53,7 @@ if(machine_stat & NOPOWER || !recharge_console) return if(!recharging_mech) - recharging_mech = locate(/obj/mecha) in recharging_turf + recharging_mech = locate(/obj/vehicle/sealed/mecha) in recharging_turf if(recharging_mech) recharge_console.update_icon() if(recharging_mech && recharging_mech.cell) diff --git a/code/game/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm similarity index 100% rename from code/game/mecha/mech_fabricator.dm rename to code/modules/vehicles/mecha/mech_fabricator.dm diff --git a/code/modules/vehicles/mecha/mech_melee_attack.dm b/code/modules/vehicles/mecha/mech_melee_attack.dm new file mode 100644 index 00000000000..fbbe472a9c2 --- /dev/null +++ b/code/modules/vehicles/mecha/mech_melee_attack.dm @@ -0,0 +1,117 @@ +///Called when a mech melee attacks an atom +/atom/proc/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker) + return + +/turf/closed/wall/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker) + mecha_attacker.do_attack_animation(src) + switch(mecha_attacker.damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + mecha_attacker.visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", \ + "<span class='danger'>You hit [src]!</span>", null, COMBAT_MESSAGE_RANGE) + if(prob(hardness + mecha_attacker.force) && mecha_attacker.force > 20) + dismantle_wall(1) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) + else + add_dent(WALL_DENT_HIT) + if(BURN) + playsound(src, 'sound/items/welder.ogg', 100, TRUE) + if(TOX) + playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) + return FALSE + +/obj/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker) + mecha_attacker.do_attack_animation(src) + var/play_soundeffect = 0 + var/mech_damtype = mecha_attacker.damtype + if(mecha_attacker.selected) + mech_damtype = mecha_attacker.selected.damtype + play_soundeffect = 1 + else + switch(mecha_attacker.damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + if(BURN) + playsound(src, 'sound/items/welder.ogg', 50, TRUE) + if(TOX) + playsound(src, 'sound/effects/spray2.ogg', 50, TRUE) + return 0 + else + return 0 + mecha_attacker.visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", "<span class='danger'>You hit [src]!</span>", null, COMBAT_MESSAGE_RANGE) + return take_damage(mecha_attacker.force * 3, mech_damtype, "melee", play_soundeffect, get_dir(src, mecha_attacker)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. + +/obj/structure/window/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker) + if(!can_be_reached()) + return + return ..() + +/mob/living/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/user) + if(user.a_intent == INTENT_HARM) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>") + return + mecha_attacker.do_attack_animation(src) + if(mecha_attacker.damtype == "brute") + step_away(src, mecha_attacker, 15) + switch(mecha_attacker.damtype) + if(BRUTE) + Unconscious(20) + take_overall_damage(rand(mecha_attacker.force/2, mecha_attacker.force)) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + if(BURN) + take_overall_damage(0, rand(mecha_attacker.force * 0.5, mecha_attacker.force)) + playsound(src, 'sound/items/welder.ogg', 50, TRUE) + if(TOX) + mecha_attacker.mech_toxin_damage(src) + else + return + updatehealth() + visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", \ + "<span class='userdanger'>[mecha_attacker.name] hits you!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, mecha_attacker) + to_chat(mecha_attacker, "<span class='danger'>You hit [src]!</span>") + log_combat(user, src, "attacked", mecha_attacker, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(mecha_attacker.damtype)])") + else + step_away(src, mecha_attacker) + log_combat(user, src, "pushed", mecha_attacker) + visible_message("<span class='warning'>[mecha_attacker] pushes [src] out of the way.</span>", \ + "<span class='warning'>[mecha_attacker] pushes you out of the way.</span>", "<span class='hear'>You hear aggressive shuffling!</span>", 5, list(mecha_attacker)) + to_chat(mecha_attacker, "<span class='danger'>You push [src] out of the way.</span>") + +/mob/living/carbon/human/mech_melee_attack(obj/vehicle/sealed/mecha/mecha_attacker, mob/user) + if(user.a_intent == INTENT_HARM) + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, "<span class='warning'>You don't want to harm other living beings!</span>") + return + mecha_attacker.do_attack_animation(src) + if(mecha_attacker.damtype == BRUTE) + step_away(src, mecha_attacker, 15) + var/obj/item/bodypart/temp = get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_CHEST, BODY_ZONE_HEAD)) + if(temp) + var/update = 0 + var/dmg = rand(mecha_attacker.force * 0.5, mecha_attacker.force) + switch(mecha_attacker.damtype) + if(BRUTE) + if(mecha_attacker.force > 35) // durand and other heavy mechas + Unconscious(20) + else if(mecha_attacker.force > 20 && !IsKnockdown()) // lightweight mechas like gygax + Knockdown(40) + update |= temp.receive_damage(dmg, 0) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + if(FIRE) + update |= temp.receive_damage(0, dmg) + playsound(src, 'sound/items/welder.ogg', 50, TRUE) + if(TOX) + mecha_attacker.mech_toxin_damage(src) + else + return + if(update) + update_damage_overlays() + updatehealth() + + visible_message("<span class='danger'>[mecha_attacker.name] hits [src]!</span>", \ + "<span class='userdanger'>[mecha_attacker.name] hits you!</span>", "<span class='hear'>You hear a sickening sound of flesh hitting flesh!</span>", COMBAT_MESSAGE_RANGE, list(mecha_attacker)) + to_chat(mecha_attacker, "<span class='danger'>You hit [src]!</span>") + log_combat(user, src, "attacked", mecha_attacker, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(mecha_attacker.damtype)])") + else + return ..() diff --git a/code/modules/vehicles/mecha/mecha_actions.dm b/code/modules/vehicles/mecha/mecha_actions.dm new file mode 100644 index 00000000000..003fbb4984b --- /dev/null +++ b/code/modules/vehicles/mecha/mecha_actions.dm @@ -0,0 +1,238 @@ +//////////////////////MECHA ACTIONS\\\\\\\\\\\\\\\\\\\\\ + +/obj/vehicle/sealed/mecha/generate_action_type() + . = ..() + if(istype(., /datum/action/vehicle/sealed/mecha)) + var/datum/action/vehicle/sealed/mecha/mecha = . + mecha.chassis = src + + +/datum/action/vehicle/sealed/mecha + icon_icon = 'icons/mob/actions/actions_mecha.dmi' + var/obj/vehicle/sealed/mecha/chassis + +/datum/action/vehicle/sealed/mecha/Destroy() + chassis = null + return ..() + +/datum/action/vehicle/sealed/mecha/mech_eject + name = "Eject From Mech" + button_icon_state = "mech_eject" + +/datum/action/vehicle/sealed/mecha/mech_eject/Trigger() + if(!owner) + return + if(!chassis || !(owner in chassis.occupants)) + return + chassis.container_resist_act(owner) + +/datum/action/vehicle/sealed/mecha/mech_toggle_internals + name = "Toggle Internal Airtank Usage" + button_icon_state = "mech_internals_off" + +/datum/action/vehicle/sealed/mecha/mech_toggle_internals/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + chassis.use_internal_tank = !chassis.use_internal_tank + button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]" + to_chat(chassis.occupants, "[icon2html(chassis, owner)]<span class='notice'>Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].</span>") + chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].", LOG_MECHA) + UpdateButtonIcon() + +/datum/action/vehicle/sealed/mecha/mech_cycle_equip + name = "Cycle Equipment" + button_icon_state = "mech_cycle_equip_off" + +/datum/action/vehicle/sealed/mecha/mech_cycle_equip/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + + var/list/available_equipment = list() + for(var/e in chassis.equipment) + var/obj/item/mecha_parts/mecha_equipment/equipment = e + if(equipment.selectable) + available_equipment += equipment + + if(available_equipment.len == 0) + to_chat(owner, "[icon2html(chassis, owner)]<span class='warning'>No equipment available!</span>") + return + if(!chassis.selected) + chassis.selected = available_equipment[1] + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>You select [chassis.selected].</span>") + send_byjax(chassis.occupants,"exosuit.browser","eq_list",chassis.get_equipment_list()) + button_icon_state = "mech_cycle_equip_on" + UpdateButtonIcon() + return + var/number = 0 + for(var/equipment in available_equipment) + number++ + if(equipment != chassis.selected) + continue + if(available_equipment.len == number) + chassis.selected = null + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>You switch to no equipment.</span>") + button_icon_state = "mech_cycle_equip_off" + else + chassis.selected = available_equipment[number+1] + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>You switch to [chassis.selected].</span>") + button_icon_state = "mech_cycle_equip_on" + send_byjax(chassis.occupants,"exosuit.browser","eq_list",chassis.get_equipment_list()) + UpdateButtonIcon() + return + + +/datum/action/vehicle/sealed/mecha/mech_toggle_lights + name = "Toggle Lights" + button_icon_state = "mech_lights_off" + +/datum/action/vehicle/sealed/mecha/mech_toggle_lights/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + if(!(chassis.mecha_flags & HAS_LIGHTS)) + to_chat(owner, "<span class='warning'>This mechs lights are destroyed!</span>") + return + chassis.mecha_flags ^= LIGHTS_ON + if(chassis.mecha_flags & LIGHTS_ON) + button_icon_state = "mech_lights_on" + else + button_icon_state = "mech_lights_off" + chassis.set_light_on(chassis.mecha_flags & LIGHTS_ON) + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>Toggled lights [(chassis.mecha_flags & LIGHTS_ON)?"on":"off"].</span>") + chassis.log_message("Toggled lights [(chassis.mecha_flags & LIGHTS_ON)?"on":"off"].", LOG_MECHA) + UpdateButtonIcon() + +/datum/action/vehicle/sealed/mecha/mech_view_stats + name = "View Stats" + button_icon_state = "mech_view_stats" + +/datum/action/vehicle/sealed/mecha/mech_view_stats/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + var/datum/browser/popup = new(owner , "exosuit") + popup.set_content(chassis.get_stats_html(owner)) + popup.open() + + +/datum/action/vehicle/sealed/mecha/strafe + name = "Toggle Strafing. Disabled when Alt is held." + button_icon_state = "strafe" + +/datum/action/vehicle/sealed/mecha/strafe/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + + chassis.toggle_strafe() + +/obj/vehicle/sealed/mecha/AltClick(mob/living/user) + if((user in occupants) && user.canUseTopic(src)) + toggle_strafe() + +/obj/vehicle/sealed/mecha/proc/toggle_strafe() + strafe = !strafe + + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>Toggled strafing mode [strafe?"on":"off"].</span>") + log_message("Toggled strafing mode [strafe?"on":"off"].", LOG_MECHA) + + for(var/occupant in occupants) + var/datum/action/action = LAZYACCESSASSOC(occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/strafe) + action?.UpdateButtonIcon() + +//////////////////////////////////////// Specific Ability Actions /////////////////////////////////////////////// +//Need to be granted by the mech type, Not default abilities. + +/datum/action/vehicle/sealed/mecha/mech_defense_mode + name = "Toggle an energy shield that blocks all attacks from the faced direction at a heavy power cost." + button_icon_state = "mech_defense_mode_off" + +/datum/action/vehicle/sealed/mecha/mech_defense_mode/Trigger(forced_state = FALSE) + SEND_SIGNAL(chassis, COMSIG_MECHA_ACTION_TRIGGER, owner, args) //Signal sent to the mech, to be handed to the shield. See durand.dm for more details + +/datum/action/vehicle/sealed/mecha/mech_overload_mode + name = "Toggle leg actuators overload" + button_icon_state = "mech_overload_off" + +/datum/action/vehicle/sealed/mecha/mech_overload_mode/Trigger(forced_state = null) + if(!owner || !chassis || !(owner in chassis.occupants)) + return + if(!isnull(forced_state)) + chassis.leg_overload_mode = forced_state + else + chassis.leg_overload_mode = !chassis.leg_overload_mode + button_icon_state = "mech_overload_[chassis.leg_overload_mode ? "on" : "off"]" + chassis.log_message("Toggled leg actuators overload.", LOG_MECHA) + if(!chassis.leg_overload_mode) + chassis.movedelay = min(1, round(chassis.movedelay * 0.5)) + chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff) + to_chat(owner, "[icon2html(chassis, owner)]<span class='danger'>You enable leg actuators overload.</span>") + else + chassis.movedelay = initial(chassis.movedelay) + chassis.step_energy_drain = chassis.normal_step_energy_drain + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>You disable leg actuators overload.</span>") + UpdateButtonIcon() + +/datum/action/vehicle/sealed/mecha/mech_smoke + name = "Smoke" + button_icon_state = "mech_smoke" + +/datum/action/vehicle/sealed/mecha/mech_smoke/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_MECHA_SMOKE) && chassis.smoke_charges>0) + chassis.smoke_system.start() + chassis.smoke_charges-- + TIMER_COOLDOWN_START(src, COOLDOWN_MECHA_SMOKE, chassis.smoke_cooldown) + + +/datum/action/vehicle/sealed/mecha/mech_zoom + name = "Zoom" + button_icon_state = "mech_zoom_off" + +/datum/action/vehicle/sealed/mecha/mech_zoom/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + if(owner.client) + chassis.zoom_mode = !chassis.zoom_mode + button_icon_state = "mech_zoom_[chassis.zoom_mode ? "on" : "off"]" + chassis.log_message("Toggled zoom mode.", LOG_MECHA) + to_chat(owner, "[icon2html(chassis, owner)]<font color='[chassis.zoom_mode?"blue":"red"]'>Zoom mode [chassis.zoom_mode?"en":"dis"]abled.</font>") + if(chassis.zoom_mode) + owner.client.view_size.setTo(4.5) + SEND_SOUND(owner, sound('sound/mecha/imag_enh.ogg',volume=50)) + else + owner.client.view_size.resetToDefault() //Let's not let this stack shall we? + UpdateButtonIcon() + +/datum/action/vehicle/sealed/mecha/mech_switch_damtype + name = "Reconfigure arm microtool arrays" + button_icon_state = "mech_damtype_brute" + +/datum/action/vehicle/sealed/mecha/mech_switch_damtype/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + var/new_damtype + switch(chassis.damtype) + if("tox") + new_damtype = "brute" + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>Your exosuit's hands form into fists.</span>") + if("brute") + new_damtype = "fire" + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>A torch tip extends from your exosuit's hand, glowing red.</span>") + if("fire") + new_damtype = "tox" + to_chat(owner, "[icon2html(chassis, owner)]<span class='notice'>A bone-chillingly thick plasteel needle protracts from the exosuit's palm.</span>") + chassis.damtype = new_damtype + button_icon_state = "mech_damtype_[new_damtype]" + playsound(chassis, 'sound/mecha/mechmove01.ogg', 50, TRUE) + UpdateButtonIcon() + +/datum/action/vehicle/sealed/mecha/mech_toggle_phasing + name = "Toggle Phasing" + button_icon_state = "mech_phasing_off" + +/datum/action/vehicle/sealed/mecha/mech_toggle_phasing/Trigger() + if(!owner || !chassis || !(owner in chassis.occupants)) + return + chassis.phasing = !chassis.phasing + button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]" + to_chat(owner, "[icon2html(chassis, owner)]<font color=\"[chassis.phasing?"#00f\">En":"#f00\">Dis"]abled phasing.</font>") + UpdateButtonIcon() diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/modules/vehicles/mecha/mecha_construction_paths.dm similarity index 99% rename from code/game/mecha/mecha_construction_paths.dm rename to code/modules/vehicles/mecha/mecha_construction_paths.dm index 63362080b60..348b2a8a7a7 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/modules/vehicles/mecha/mecha_construction_paths.dm @@ -28,7 +28,7 @@ if(!result) return // Remove default mech power cell, as we replace it with a new one. - var/obj/mecha/M = new result(drop_location()) + var/obj/vehicle/sealed/mecha/M = new result(drop_location()) QDEL_NULL(M.cell) QDEL_NULL(M.scanmod) QDEL_NULL(M.capacitor) @@ -264,7 +264,7 @@ ) /datum/component/construction/mecha/ripley - result = /obj/mecha/working/ripley + result = /obj/vehicle/sealed/mecha/working/ripley base_icon = "ripley" circuit_control = /obj/item/circuitboard/mecha/ripley/main @@ -407,7 +407,7 @@ ) /datum/component/construction/mecha/gygax - result = /obj/mecha/combat/gygax + result = /obj/vehicle/sealed/mecha/combat/gygax base_icon = "gygax" circuit_control = /obj/item/circuitboard/mecha/gygax/main @@ -547,7 +547,7 @@ ) /datum/component/construction/mecha/clarke - result = /obj/mecha/working/clarke + result = /obj/vehicle/sealed/mecha/working/clarke base_icon = "clarke" circuit_control = /obj/item/circuitboard/mecha/clarke/main @@ -715,7 +715,7 @@ ) /datum/component/construction/mecha/honker - result = /obj/mecha/combat/honker + result = /obj/vehicle/sealed/mecha/combat/honker steps = list( list( "key" = /obj/item/bikehorn @@ -829,7 +829,7 @@ ) /datum/component/construction/mecha/durand - result = /obj/mecha/combat/durand + result = /obj/vehicle/sealed/mecha/combat/durand base_icon = "durand" circuit_control = /obj/item/circuitboard/mecha/durand/main @@ -971,7 +971,7 @@ ) /datum/component/construction/mecha/phazon - result = /obj/mecha/combat/phazon + result = /obj/vehicle/sealed/mecha/combat/phazon base_icon = "phazon" circuit_control = /obj/item/circuitboard/mecha/phazon/main @@ -1216,7 +1216,7 @@ ) /datum/component/construction/mecha/odysseus - result = /obj/mecha/medical/odysseus + result = /obj/vehicle/sealed/mecha/medical/odysseus base_icon = "odysseus" circuit_control = /obj/item/circuitboard/mecha/odysseus/main diff --git a/code/game/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm similarity index 85% rename from code/game/mecha/mecha_control_console.dm rename to code/modules/vehicles/mecha/mecha_control_console.dm index 50d18c6fda7..346cd920031 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/modules/vehicles/mecha/mecha_control_console.dm @@ -16,27 +16,27 @@ var/list/data = list() var/list/trackerlist = list() - for(var/obj/mecha/MC in GLOB.mechas_list) + for(var/obj/vehicle/sealed/mecha/MC in GLOB.mechas_list) trackerlist += MC.trackers data["mechs"] = list() for(var/obj/item/mecha_parts/mecha_tracking/MT in trackerlist) if(!MT.chassis) continue - var/obj/mecha/M = MT.chassis + var/obj/vehicle/sealed/mecha/M = MT.chassis var/list/mech_data = list( name = M.name, integrity = round((M.obj_integrity / M.max_integrity) * 100), charge = M.cell ? round(M.cell.percent()) : null, airtank = M.internal_tank ? M.return_pressure() : null, - pilot = M.occupant, + pilot = M.return_drivers(), location = get_area_name(M, TRUE), active_equipment = M.selected, emp_recharging = MT.recharging, tracker_ref = REF(MT) ) - if(istype(M, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/RM = M + if(istype(M, /obj/vehicle/sealed/mecha/working/ripley)) + var/obj/vehicle/sealed/mecha/working/ripley/RM = M mech_data += list( cargo_space = round((RM.cargo.len / RM.cargo_capacity) * 100) ) @@ -55,20 +55,20 @@ if(!istype(MT)) return var/message = stripped_input(usr, "Input message", "Transmit message") - var/obj/mecha/M = MT.chassis + var/obj/vehicle/sealed/mecha/M = MT.chassis if(trim(message) && M) - M.occupant_message(message) + to_chat(M.occupants, message) to_chat(usr, "<span class='notice'>Message sent.</span>") . = TRUE if("shock") var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["tracker_ref"]) if(!istype(MT)) return - var/obj/mecha/M = MT.chassis + var/obj/vehicle/sealed/mecha/M = MT.chassis if(M) MT.shock() - log_game("[key_name(usr)] has activated remote EMP on exosuit [M], located at [loc_name(M)], which is currently [M.occupant? "being piloted by [key_name(M.occupant)]." : "without a pilot."] ") - message_admins("[key_name_admin(usr)][ADMIN_FLW(usr)] has activated remote EMP on exosuit [M][ADMIN_JMP(M)], which is currently [M.occupant ? "being piloted by [key_name_admin(M.occupant)][ADMIN_FLW(M.occupant)]." : "without a pilot."] ") + log_game("[key_name(usr)] has activated remote EMP on exosuit [M], located at [loc_name(M)], which [M.occupants ? "has the occupants [M.occupants]." : "without a pilot."] ") + message_admins("[key_name_admin(usr)][ADMIN_FLW(usr)] has activated remote EMP on exosuit [M][ADMIN_JMP(M)], which is currently [M.occupants ? "occupied by [M.occupants][ADMIN_FLW(M)]." : "without a pilot."] ") . = TRUE /obj/item/mecha_parts/mecha_tracking @@ -82,7 +82,7 @@ /// Cooldown variable for EMP pulsing var/recharging = FALSE /// The Mecha that this tracking beacon is attached to - var/obj/mecha/chassis + var/obj/vehicle/sealed/mecha/chassis /** * Returns a html formatted string describing attached mech status @@ -96,11 +96,11 @@ <b>Integrity:</b> [round((chassis.obj_integrity/chassis.max_integrity * 100), 0.01)]%<br> <b>Cell Charge:</b> [isnull(cell_charge) ? "Not Found":"[chassis.cell.percent()]%"]<br> <b>Airtank:</b> [chassis.internal_tank ? "[round(chassis.return_pressure(), 0.01)]" : "Not Equipped"] kPa<br> - <b>Pilot:</b> [chassis.occupant || "None"]<br> + <b>Pilot:</b> [chassis.return_drivers() || "None"]<br> <b>Location:</b> [get_area_name(chassis, TRUE) || "Unknown"]<br> <b>Active Equipment:</b> [chassis.selected || "None"]"} - if(istype(chassis, /obj/mecha/working/ripley)) - var/obj/mecha/working/ripley/RM = chassis + if(istype(chassis, /obj/vehicle/sealed/mecha/working/ripley)) + var/obj/vehicle/sealed/mecha/working/ripley/RM = chassis answer += "<br><b>Used Cargo Space:</b> [round((RM.cargo.len / RM.cargo_capacity * 100), 0.01)]%" return answer @@ -117,7 +117,7 @@ chassis = null return ..() -/obj/item/mecha_parts/mecha_tracking/try_attach_part(mob/user, obj/mecha/M) +/obj/item/mecha_parts/mecha_tracking/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) if(!..()) return M.trackers += src diff --git a/code/game/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm similarity index 77% rename from code/game/mecha/mecha_defense.dm rename to code/modules/vehicles/mecha/mecha_defense.dm index 142647c45a5..04123fedac1 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -1,4 +1,4 @@ -/obj/mecha/proc/get_armour_facing(relative_dir) +/obj/vehicle/sealed/mecha/proc/get_armour_facing(relative_dir) switch(relative_dir) if(180) // BACKSTAB! return facing_modifiers[MECHA_BACK_ARMOUR] @@ -6,7 +6,7 @@ return facing_modifiers[MECHA_FRONT_ARMOUR] return facing_modifiers[MECHA_SIDE_ARMOUR] //if its not a front hit or back hit then assume its from the side -/obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) +/obj/vehicle/sealed/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(. && obj_integrity > 0) spark_system.start() @@ -18,10 +18,10 @@ else check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT)) if(. >= 5 || prob(33)) - occupant_message("<span class='userdanger'>Taking damage!</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='userdanger'>Taking damage!</span>") log_message("Took [damage_amount] points of damage. Damage type: [damage_type]", LOG_MECHA) -/obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) +/obj/vehicle/sealed/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) . = ..() if(!damage_amount) return 0 @@ -51,7 +51,7 @@ if(.) . *= booster_damage_modifier -/obj/mecha/attack_hand(mob/living/user) +/obj/vehicle/sealed/mecha/attack_hand(mob/living/user) . = ..() if(.) return @@ -61,15 +61,15 @@ user.visible_message("<span class='danger'>[user] hits [name]. Nothing happens.</span>", null, null, COMBAT_MESSAGE_RANGE) log_message("Attack by hand/paw. Attacker - [user].", LOG_MECHA, color="red") -/obj/mecha/attack_paw(mob/user as mob) +/obj/vehicle/sealed/mecha/attack_paw(mob/user as mob) return attack_hand(user) -/obj/mecha/attack_alien(mob/living/user) +/obj/vehicle/sealed/mecha/attack_alien(mob/living/user) log_message("Attack by alien. Attacker - [user].", LOG_MECHA, color="red") playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE) attack_generic(user, 15, BRUTE, MELEE, 0) -/obj/mecha/attack_animal(mob/living/simple_animal/user) +/obj/vehicle/sealed/mecha/attack_animal(mob/living/simple_animal/user) log_message("Attack by simple animal. Attacker - [user].", LOG_MECHA, color="red") if(!user.melee_damage_upper && !user.obj_damage) user.emote("custom", message = "[user.friendly_verb_continuous] [src].") @@ -88,41 +88,43 @@ return 1 -/obj/mecha/hulk_damage() +/obj/vehicle/sealed/mecha/hulk_damage() return 15 -/obj/mecha/attack_hulk(mob/living/carbon/human/user) +/obj/vehicle/sealed/mecha/attack_hulk(mob/living/carbon/human/user) . = ..() if(.) log_message("Attack by hulk. Attacker - [user].", LOG_MECHA, color="red") log_combat(user, src, "punched", "hulk powers") -/obj/mecha/blob_act(obj/structure/blob/B) +/obj/vehicle/sealed/mecha/blob_act(obj/structure/blob/B) log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") take_damage(30, BRUTE, MELEE, 0, get_dir(src, B)) -/obj/mecha/attack_tk() +/obj/vehicle/sealed/mecha/attack_tk() return -/obj/mecha/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) //wrapper +/obj/vehicle/sealed/mecha/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) //wrapper log_message("Hit by [AM].", LOG_MECHA, color="red") . = ..() -/obj/mecha/bullet_act(obj/projectile/Proj) //wrapper - if (!enclosed && occupant && !silicon_pilot && !Proj.force_hit && (Proj.def_zone == BODY_ZONE_HEAD || Proj.def_zone == BODY_ZONE_CHEST)) //allows bullets to hit the pilot of open-canopy mechs - occupant.bullet_act(Proj) //If the sides are open, the occupant can be hit +/obj/vehicle/sealed/mecha/bullet_act(obj/projectile/Proj) //wrapper + if(!enclosed && LAZYLEN(occupants) && !(mecha_flags & SILICON_PILOT) && !Proj.force_hit && (Proj.def_zone == BODY_ZONE_HEAD || Proj.def_zone == BODY_ZONE_CHEST)) //allows bullets to hit the pilot of open-canopy mechs + for(var/m in occupants) + var/mob/living/hitmob = m + hitmob.bullet_act(Proj) //If the sides are open, the occupant can be hit return BULLET_ACT_HIT log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).", LOG_MECHA, color="red") . = ..() -/obj/mecha/ex_act(severity, target) +/obj/vehicle/sealed/mecha/ex_act(severity, target) log_message("Affected by explosion of severity: [severity].", LOG_MECHA, color="red") if(prob(deflect_chance)) severity++ log_message("Armor saved, changing severity to [severity]", LOG_MECHA) . = ..() -/obj/mecha/contents_explosion(severity, target) +/obj/vehicle/sealed/mecha/contents_explosion(severity, target) severity++ for(var/X in equipment) var/obj/item/mecha_parts/mecha_equipment/ME = X @@ -142,16 +144,17 @@ SSexplosions.med_mov_atom += MT if(EXPLODE_LIGHT) SSexplosions.low_mov_atom += MT - if(occupant) + for(var/Z in occupants) + var/mob/living/occupant = Z occupant.ex_act(severity,target) -/obj/mecha/handle_atom_del(atom/A) - if(A == occupant) - occupant = null +/obj/vehicle/sealed/mecha/handle_atom_del(atom/A) + if(A in occupants) + LAZYREMOVE(occupants, A) icon_state = initial(icon_state)+"-open" setDir(dir_in) -/obj/mecha/emp_act(severity) +/obj/vehicle/sealed/mecha/emp_act(severity) . = ..() if (. & EMP_PROTECT_SELF) return @@ -160,20 +163,22 @@ take_damage(30 / severity, BURN, ENERGY, 1) log_message("EMP detected", LOG_MECHA, color="red") - if(istype(src, /obj/mecha/combat)) + if(istype(src, /obj/vehicle/sealed/mecha/combat)) mouse_pointer = 'icons/effects/mouse_pointers/mecha_mouse-disable.dmi' - occupant?.update_mouse_pointer() - if(!equipment_disabled && occupant) //prevent spamming this message with back-to-back EMPs - to_chat(occupant, "<span=danger>Error -- Connection to equipment control unit has been lost.</span>") - addtimer(CALLBACK(src, /obj/mecha/proc/restore_equipment), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + for(var/occus in occupants) + var/mob/living/occupant = occus + occupant.update_mouse_pointer() + if(!equipment_disabled && occupants) //prevent spamming this message with back-to-back EMPs + to_chat(occupants, "<span=danger>Error -- Connection to equipment control unit has been lost.</span>") + addtimer(CALLBACK(src, /obj/vehicle/sealed/mecha/proc/restore_equipment), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) equipment_disabled = 1 -/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/vehicle/sealed/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature>max_temperature) log_message("Exposed to dangerous temperature.", LOG_MECHA, color="red") take_damage(5, BURN, 0, 1) -/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/vehicle/sealed/mecha/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/mmi)) if(mmi_move_inside(W,user)) @@ -187,7 +192,7 @@ return if(W.GetID()) - if(add_req_access || maint_access) + if((mecha_flags & ADDING_ACCESS_POSSIBLE) || (mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)) if(internals_access_allowed(user)) var/obj/item/card/id/id_card if(istype(W, /obj/item/card/id)) @@ -261,7 +266,7 @@ log_message("Attacked by [W]. Attacker - [user]", LOG_MECHA) return ..() -/obj/mecha/wrench_act(mob/living/user, obj/item/I) +/obj/vehicle/sealed/mecha/wrench_act(mob/living/user, obj/item/I) ..() . = TRUE if(construction_state == MECHA_SECURE_BOLTS) @@ -272,7 +277,7 @@ construction_state = MECHA_SECURE_BOLTS to_chat(user, "<span class='notice'>You tighten the securing bolts.</span>") -/obj/mecha/crowbar_act(mob/living/user, obj/item/I) +/obj/vehicle/sealed/mecha/crowbar_act(mob/living/user, obj/item/I) ..() . = TRUE if(construction_state == MECHA_LOOSE_BOLTS) @@ -283,7 +288,7 @@ construction_state = MECHA_LOOSE_BOLTS to_chat(user, "<span class='notice'>You close the hatch to the power unit.</span>") -/obj/mecha/screwdriver_act(mob/living/user, obj/item/I) +/obj/vehicle/sealed/mecha/screwdriver_act(mob/living/user, obj/item/I) ..() . = TRUE if(internal_damage & MECHA_INT_TEMP_CONTROL) @@ -291,7 +296,7 @@ to_chat(user, "<span class='notice'>You repair the damaged temperature controller.</span>") return -/obj/mecha/welder_act(mob/living/user, obj/item/W) +/obj/vehicle/sealed/mecha/welder_act(mob/living/user, obj/item/W) . = ..() if(user.a_intent == INTENT_HARM) return @@ -312,7 +317,7 @@ return to_chat(user, "<span class='warning'>The [name] is at full integrity!</span>") -/obj/mecha/proc/mech_toxin_damage(mob/living/target) +/obj/vehicle/sealed/mecha/proc/mech_toxin_damage(mob/living/target) playsound(src, 'sound/effects/spray2.ogg', 50, TRUE) if(target.reagents) if(target.reagents.get_reagent_amount(/datum/reagent/cryptobiolin) + force < force*2) @@ -321,15 +326,15 @@ target.reagents.add_reagent(/datum/reagent/toxin, force/2.5) -/obj/mecha/mech_melee_attack(obj/mecha/M) +/obj/vehicle/sealed/mecha/mech_melee_attack(obj/vehicle/sealed/mecha/M, mob/user) if(!has_charge(melee_energy_drain)) - return 0 + return NONE use_power(melee_energy_drain) if(M.damtype == BRUTE || M.damtype == BURN) - log_combat(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + log_combat(user, src, "attacked", M, "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") . = ..() -/obj/mecha/proc/full_repair(charge_cell) +/obj/vehicle/sealed/mecha/proc/full_repair(charge_cell) obj_integrity = max_integrity if(cell && charge_cell) cell.charge = cell.maxcharge @@ -344,10 +349,10 @@ if(internal_damage & MECHA_INT_CONTROL_LOST) clearInternalDamage(MECHA_INT_CONTROL_LOST) -/obj/mecha/narsie_act() +/obj/vehicle/sealed/mecha/narsie_act() emp_act(EMP_HEAVY) -/obj/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) +/obj/vehicle/sealed/mecha/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!no_effect) if(selected) used_item = selected @@ -359,12 +364,16 @@ visual_effect_icon = ATTACK_EFFECT_MECHTOXIN ..() -/obj/mecha/obj_destruction() +/obj/vehicle/sealed/mecha/obj_destruction() if(wreckage) var/mob/living/silicon/ai/AI - if(isAI(occupant)) - AI = occupant - occupant = null + for(var/crew in occupants) + if(isAI(crew)) + if(AI) + var/mob/living/silicon/ai/unlucky_ais = crew + unlucky_ais.gib() + continue + AI = crew var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI) for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) if(E.salvageable && prob(30)) diff --git a/code/game/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm similarity index 98% rename from code/game/mecha/mecha_parts.dm rename to code/modules/vehicles/mecha/mecha_parts.dm index a79be7c6a0f..2b43fdae653 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -9,14 +9,14 @@ w_class = WEIGHT_CLASS_GIGANTIC flags_1 = CONDUCT_1 -/obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/mecha/M) //For attaching parts to a finished mech +/obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) //For attaching parts to a finished mech if(!user.transferItemToLoc(src, M)) to_chat(user, "<span class='warning'>\The [src] is stuck to your hand, you cannot put it in \the [M]!</span>") return FALSE user.visible_message("<span class='notice'>[user] attaches [src] to [M].</span>", "<span class='notice'>You attach [src] to [M].</span>") return TRUE -/obj/item/mecha_parts/part/try_attach_part(mob/user, obj/mecha/M) +/obj/item/mecha_parts/part/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M) return /obj/item/mecha_parts/chassis diff --git a/code/game/mecha/mecha_topic.dm b/code/modules/vehicles/mecha/mecha_topic.dm similarity index 73% rename from code/game/mecha/mecha_topic.dm rename to code/modules/vehicles/mecha/mecha_topic.dm index ef4a5edb83b..f614cc23425 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/modules/vehicles/mecha/mecha_topic.dm @@ -3,7 +3,7 @@ ///// Rendering stats window /////// //////////////////////////////////// -/obj/mecha/proc/get_stats_html() +/obj/vehicle/sealed/mecha/proc/get_stats_html(mob/user) . = {"<html> <head> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'> @@ -36,7 +36,7 @@ </head> <body> <div id='content'> - [get_stats_part()] + [get_stats_part(user)] </div></div> <div id='eq_list'> [get_equipment_list()] @@ -52,7 +52,7 @@ </html>"} ///Returns the status of the mech. -/obj/mecha/proc/get_stats_part() +/obj/vehicle/sealed/mecha/proc/get_stats_part(mob/user) var/integrity = obj_integrity/max_integrity*100 var/cell_charge = get_charge() var/datum/gas_mixture/int_tank_air = 0 @@ -74,20 +74,20 @@ <b>Cabin pressure: </b>[internal_tank?"[cabin_pressure>WARNING_HIGH_PRESSURE ? "<span class='danger'>[cabin_pressure]</span>": cabin_pressure]kPa":"N/A"]<br> <b>Cabin temperature: </b> [internal_tank?"[return_temperature()]°K|[return_temperature() - T0C]°C":"N/A"]<br> [dna_lock?"<b>DNA-locked:</b><br> <span style='font-size:10px;letter-spacing:-1px;'>[dna_lock]</span> \[<a href='?src=[REF(src)];reset_dna=1'>Reset</a>\]<br>":""]<br>"} - . += "[get_actions()]<br>" + . += "[get_actions(user)]<br>" ///Returns HTML for mech actions. Ideally, this proc would be empty for the base mecha. Segmented for easy refactoring. -/obj/mecha/proc/get_actions() +/obj/vehicle/sealed/mecha/proc/get_actions(mob/user) . = "" - . += "[defense_action.owner ? "<b>Defense Mode: </b> [defense_mode ? "Enabled" : "Disabled"]<br>" : ""]" - . += "[overload_action.owner ? "<b>Leg Actuators Overload: </b> [leg_overload_mode ? "Enabled" : "Disabled"]<br>" : ""]" - . += "[smoke_action.owner ? "<b>Smoke: </b> [smoke]<br>" : ""]" - . += "[zoom_action.owner ? "<b>Zoom: </b> [zoom_mode ? "Enabled" : "Disabled"]<br>" : ""]" - . += "[switch_damtype_action.owner ? "<b>Damtype: </b> [damtype]<br>" : ""]" - . += "[phasing_action.owner ? "<b>Phase Modulator: </b> [phasing ? "Enabled" : "Disabled"]<br>" : ""]" + . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_defense_mode) ? "<b>Defense Mode: </b> [defense_mode ? "Enabled" : "Disabled"]<br>" : ""]" + . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_overload_mode) ? "<b>Leg Actuators Overload: </b> [leg_overload_mode ? "Enabled" : "Disabled"]<br>" : ""]" + . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_smoke) ? "<b>Smoke Charges remaining: </b> [smoke_charges]<br>" : ""]" + . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_zoom) ? "<b>Zoom: </b> [zoom_mode ? "Enabled" : "Disabled"]<br>" : ""]" + . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_switch_damtype) ? "<b>Damtype: </b> [damtype]<br>" : ""]" + . += "[LAZYACCESSASSOC(occupant_actions, user, /datum/action/vehicle/sealed/mecha/mech_toggle_phasing) ? "<b>Phase Modulator: </b> [phasing ? "Enabled" : "Disabled"]<br>" : ""]" ///HTML for internal damage. -/obj/mecha/proc/report_internal_damage() +/obj/vehicle/sealed/mecha/proc/report_internal_damage() . = "" var/list/dam_reports = list( "[MECHA_INT_FIRE]" = "<span class='userdanger'>INTERNAL FIRE</span>", @@ -105,8 +105,8 @@ . += "<span class='userdanger'>DANGEROUSLY HIGH CABIN PRESSURE</span><br />" ///HTML for list of equipment. -/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html - if(!equipment.len) +/obj/vehicle/sealed/mecha/proc/get_equipment_list() //outputs mecha equipment list in html + if(!LAZYLEN(equipment)) return . = "<b>Equipment:</b><div style=\"margin-left: 15px;\">" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) @@ -114,7 +114,7 @@ . += "</div>" ///HTML for commands. -/obj/mecha/proc/get_commands() +/obj/vehicle/sealed/mecha/proc/get_commands() . = {" <div class='wr'> <div class='header'>Electronics</div> @@ -137,8 +137,8 @@ <div class='wr'> <div class='header'>Permissions & Logging</div> <div class='links'> - <a href='?src=[REF(src)];toggle_id_upload=1'><span id='t_id_upload'>[add_req_access?"L":"Unl"]ock ID upload panel</span></a><br> - <a href='?src=[REF(src)];toggle_maint_access=1'><span id='t_maint_access'>[maint_access?"Forbid":"Permit"] maintenance protocols</span></a><br> + <a href='?src=[REF(src)];toggle_id_upload=1'><span id='t_id_upload'>[(mecha_flags & ADDING_ACCESS_POSSIBLE)?"L":"Unl"]ock ID upload panel</span></a><br> + <a href='?src=[REF(src)];toggle_maint_access=1'><span id='t_maint_access'>[(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"Forbid":"Permit"] maintenance protocols</span></a><br> [internal_tank?"<a href='?src=[REF(src)];toggle_port_connection=1'><span id='t_port_connection'>[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port</span></a><br>":""] <a href='?src=[REF(src)];dna_lock=1'>DNA-lock</a><br> <a href='?src=[REF(src)];change_name=1'>Change exosuit name</a> @@ -146,20 +146,19 @@ </div>"} -/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu +/obj/vehicle/sealed/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu . = {" <div class='wr'> <div class='header'>Equipment</div> <div class='links'>"} - if(equipment.len) - for(var/X in equipment) - var/obj/item/mecha_parts/mecha_equipment/W = X - . += "[W.name] [W.detachable?"<a href='?src=[REF(W)];detach=1'>Detach</a><br>":"\[Non-removable\]<br>"]" - . += {"<b>Available equipment slots:</b> [max_equip-equipment.len] + for(var/e in equipment) + var/obj/item/mecha_parts/mecha_equipment/equipment = e + . += "[equipment.name] [equipment.detachable ? "<a href='?src=[REF(equipment)];detach=1'>Detach</a><br>" : "\[Non-removable\]<br>"]" + . += {"<b>Available equipment slots:</b> [max_equip-LAZYLEN(equipment)] </div> </div>"} -/obj/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user) +/obj/vehicle/sealed/mecha/proc/output_access_dialog(obj/item/card/id/id_card, mob/user) if(!id_card || !user) return . = {"<html> @@ -191,7 +190,7 @@ onclose(user, "exosuit_add_access") -/obj/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user) +/obj/vehicle/sealed/mecha/proc/output_maintenance_dialog(obj/item/card/id/id_card,mob/user) if(!id_card || !user) return . = {"<html> @@ -203,8 +202,8 @@ </style> </head> <body> - [add_req_access?"<a href='?src=[REF(src)];req_access=1;id_card=[REF(id_card)];user=[REF(user)]'>Edit operation keycodes</a>":null] - [maint_access?"<a href='?src=[REF(src)];maint_access=1;id_card=[REF(id_card)];user=[REF(user)]'>[(construction_state > MECHA_LOCKED) ? "Terminate" : "Initiate"] maintenance protocol</a>":null] + [(mecha_flags & ADDING_ACCESS_POSSIBLE)?"<a href='?src=[REF(src)];req_access=1;id_card=[REF(id_card)];user=[REF(user)]'>Edit operation keycodes</a>":null] + [(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"<a href='?src=[REF(src)];maint_access=1;id_card=[REF(id_card)];user=[REF(user)]'>[(construction_state > MECHA_LOCKED) ? "Terminate" : "Initiate"] maintenance protocol</a>":null] [(construction_state == MECHA_OPEN_HATCH) ?"--------------------</br>":null] [(construction_state == MECHA_OPEN_HATCH) ?"[cell?"<a href='?src=[REF(src)];drop_cell=1;id_card=[REF(id_card)];user=[REF(user)]'>Drop power cell</a>":"No cell installed</br>"]":null] [(construction_state == MECHA_OPEN_HATCH) ?"[scanmod?"<a href='?src=[REF(src)];drop_scanmod=1;id_card=[REF(id_card)];user=[REF(user)]'>Drop scanning module</a>":"No scanning module installed</br>"]":null] @@ -223,7 +222,7 @@ ///// Topic ///// ///////////////// -/obj/mecha/Topic(href, href_list) +/obj/vehicle/sealed/mecha/Topic(href, href_list) ..() if(!usr) @@ -244,13 +243,13 @@ return if(href_list["req_access"]) - if(!add_req_access) + if(!(mecha_flags & ADDING_ACCESS_POSSIBLE)) return output_access_dialog(id_card,usr) return if(href_list["maint_access"]) - if(!maint_access) + if(!(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)) return if(construction_state == MECHA_LOCKED) construction_state = MECHA_SECURE_BOLTS @@ -280,14 +279,14 @@ return if(href_list["add_req_access"]) - if(!add_req_access) + if(!(mecha_flags & ADDING_ACCESS_POSSIBLE)) return operation_req_access += text2num(href_list["add_req_access"]) output_access_dialog(id_card,usr) return if(href_list["del_req_access"]) - if(!add_req_access) + if(!(mecha_flags & ADDING_ACCESS_POSSIBLE)) return operation_req_access -= text2num(href_list["del_req_access"]) output_access_dialog(id_card, usr) @@ -296,7 +295,7 @@ //Here ID access stuff goes to die. if(href_list["finish_req_access"]) - add_req_access = 0 + mecha_flags &= ~ADDING_ACCESS_POSSIBLE usr << browse(null,"window=exosuit_add_access") return @@ -310,7 +309,7 @@ return //Start of all internal topic stuff. - if(usr != occupant) + if(!locate(usr) in occupants) return if(href_list["update_content"]) @@ -323,7 +322,7 @@ if(!equip || !equip.selectable) return selected = equip - occupant_message("<span class='notice'>You switch to [equip].</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>You switch to [equip].</span>") visible_message("<span class='notice'>[src] raises [equip].</span>") send_byjax(usr, "exosuit.browser", "eq_list", get_equipment_list()) return @@ -350,53 +349,54 @@ //Changes the exosuit name. if(href_list["change_name"]) var/userinput = stripped_input(usr, "Choose a new exosuit name.", "Rename exosuit", "", MAX_NAME_LEN) - if(!userinput || usr != occupant || usr.incapacitated()) + if(!userinput || !locate(usr) in occupants || usr.incapacitated()) return name = userinput return //Toggles ID upload. if (href_list["toggle_id_upload"]) - add_req_access = !add_req_access - send_byjax(usr,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") + mecha_flags ^= ADDING_ACCESS_POSSIBLE + send_byjax(usr,"exosuit.browser","t_id_upload","[(mecha_flags & ADDING_ACCESS_POSSIBLE)?"L":"Unl"]ock ID upload panel") return //Toggles main access. if(href_list["toggle_maint_access"]) if(construction_state) - occupant_message("<span class='danger'>Maintenance protocols in effect</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='danger'>Maintenance protocols in effect</span>") return - maint_access = !maint_access - send_byjax(usr,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") + mecha_flags ^= ADDING_MAINT_ACCESS_POSSIBLE + send_byjax(usr,"exosuit.browser","t_maint_access","[(mecha_flags & ADDING_MAINT_ACCESS_POSSIBLE)?"Forbid":"Permit"] maintenance protocols") return //Toggles connection port. if (href_list["toggle_port_connection"]) if(internal_tank.connected_port) if(internal_tank.disconnect()) - occupant_message("<span class='notice'>Disconnected from the air system port.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>Disconnected from the air system port.</span>") log_message("Disconnected from gas port.", LOG_MECHA) else - occupant_message("<span class='warning'>Unable to disconnect from the air system port!</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Unable to disconnect from the air system port!</span>") return else var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate() in loc if(internal_tank.connect(possible_port)) - occupant_message("<span class='notice'>Connected to the air system port.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>Connected to the air system port.</span>") log_message("Connected to gas port.", LOG_MECHA) else - occupant_message("<span class='warning'>Unable to connect with air system port!</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Unable to connect with air system port!</span>") return - send_byjax(occupant,"exosuit.browser","t_port_connection","[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port") + send_byjax(occupants,"exosuit.browser","t_port_connection","[internal_tank.connected_port?"Disconnect from":"Connect to"] gas port") return //Turns on the DNA lock if(href_list["dna_lock"]) - if(!iscarbon(occupant) || !occupant.dna) - occupant_message("<span class='notice'>You feel a prick as the needle takes your DNA sample.</span>") + var/mob/living/carbon/user = usr + if(!istype(user) || !user.dna) + to_chat(user, "[icon2html(src, occupants)]<span class='notice'>You can't create a DNA lock with no DNA!.</span>") return - dna_lock = occupant.dna.unique_enzymes - occupant_message("<span class='notice'>You feel a prick as the needle takes your DNA sample.</span>") + dna_lock = user.dna.unique_enzymes + to_chat(user, "[icon2html(src, occupants)]<span class='notice'>You feel a prick as the needle takes your DNA sample.</span>") return //Resets the DNA lock @@ -406,16 +406,16 @@ //Repairs internal damage if(href_list["repair_int_control_lost"]) - occupant_message("<span class='notice'>Recalibrating coordination system...</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>Recalibrating coordination system...</span>") log_message("Recalibration of coordination system started.", LOG_MECHA) addtimer(CALLBACK(src, .proc/stationary_repair, loc), 100, TIMER_UNIQUE) ///Repairs internal damage if the mech hasn't moved. -/obj/mecha/proc/stationary_repair(location) +/obj/vehicle/sealed/mecha/proc/stationary_repair(location) if(location == loc) clearInternalDamage(MECHA_INT_CONTROL_LOST) - occupant_message("<span class='notice'>Recalibration successful.</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>Recalibration successful.</span>") log_message("Recalibration of coordination system finished with 0 errors.", LOG_MECHA) else - occupant_message("<span class='warning'>Recalibration failed!</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='warning'>Recalibration failed!</span>") log_message("Recalibration of coordination system failed with 1 error.", LOG_MECHA, color="red") diff --git a/code/game/mecha/mecha_wreckage.dm b/code/modules/vehicles/mecha/mecha_wreckage.dm similarity index 100% rename from code/game/mecha/mecha_wreckage.dm rename to code/modules/vehicles/mecha/mecha_wreckage.dm diff --git a/code/game/mecha/medical/odysseus.dm b/code/modules/vehicles/mecha/medical/odysseus.dm similarity index 59% rename from code/game/mecha/medical/odysseus.dm rename to code/modules/vehicles/mecha/medical/odysseus.dm index 27e139c84ab..1991d683af1 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/modules/vehicles/mecha/medical/odysseus.dm @@ -1,29 +1,31 @@ -/obj/mecha/medical/odysseus +/obj/vehicle/sealed/mecha/medical/odysseus desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)." name = "\improper Odysseus" icon_state = "odysseus" - step_in = 2 + allow_diagonal_movement = TRUE + movedelay = 2 max_temperature = 15000 max_integrity = 120 wreckage = /obj/structure/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 step_energy_drain = 6 + internals_req_access = list(ACCESS_MECH_SCIENCE, ACCESS_MECH_MEDICAL) -/obj/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) +/obj/vehicle/sealed/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) . = ..() if(.) var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] hud.add_hud_to(H) -/obj/mecha/medical/odysseus/go_out() - if(isliving(occupant)) - var/mob/living/L = occupant +/obj/vehicle/sealed/mecha/medical/odysseus/remove_occupant(mob/M) + if(isliving(M)) + var/mob/living/L = M var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] hud.remove_hud_from(L) - ..() + return ..() -/obj/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/M, mob/user) +/obj/vehicle/sealed/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/M, mob/user) . = ..() if(.) var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] diff --git a/code/game/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm similarity index 79% rename from code/game/mecha/working/clarke.dm rename to code/modules/vehicles/mecha/working/clarke.dm index 07ae1e62d3e..25e782ca96c 100644 --- a/code/game/mecha/working/clarke.dm +++ b/code/modules/vehicles/mecha/working/clarke.dm @@ -1,11 +1,11 @@ ///Lavaproof, fireproof, fast mech with low armor and higher energy consumption, cannot strafe and has an internal ore box. -/obj/mecha/working/clarke +/obj/vehicle/sealed/mecha/working/clarke desc = "Combining man and machine for a better, stronger engineer. Can even resist lava!" name = "\improper Clarke" icon_state = "clarke" max_temperature = 65000 max_integrity = 200 - step_in = 1.25 + movedelay = 1.25 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 deflect_chance = 10 @@ -14,34 +14,34 @@ max_equip = 7 wreckage = /obj/structure/mecha_wreckage/clarke enter_delay = 40 - canstrafe = FALSE + mecha_flags = ADDING_ACCESS_POSSIBLE | IS_ENCLOSED /// Handles an internal ore box for Clarke var/obj/structure/ore_box/box -/obj/mecha/working/clarke/Initialize() +/obj/vehicle/sealed/mecha/working/clarke/Initialize() . = ..() box = new /obj/structure/ore_box(src) var/obj/item/mecha_parts/mecha_equipment/orebox_manager/ME = new(src) ME.attach(src) -/obj/mecha/working/clarke/Destroy() +/obj/vehicle/sealed/mecha/working/clarke/Destroy() box.dump_box_contents() return ..() -/obj/mecha/working/clarke/moved_inside(mob/living/carbon/human/H) +/obj/vehicle/sealed/mecha/working/clarke/moved_inside(mob/living/carbon/human/H) . = ..() if(.) var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED] hud.add_hud_to(H) -/obj/mecha/working/clarke/go_out() - if(isliving(occupant)) - var/mob/living/L = occupant +/obj/vehicle/sealed/mecha/working/clarke/remove_occupant(mob/M) + if(isliving(M)) + var/mob/living/L = M var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED] hud.remove_hud_from(L) return ..() -/obj/mecha/working/clarke/mmi_moved_inside(obj/item/mmi/M, mob/user) +/obj/vehicle/sealed/mecha/working/clarke/mmi_moved_inside(obj/item/mmi/M, mob/user) . = ..() if(.) var/datum/atom_hud/hud = GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED] @@ -60,11 +60,11 @@ detachable = FALSE salvageable = FALSE /// Var to avoid istype checking every time the topic button is pressed. This will only work inside Clarke mechs. - var/obj/mecha/working/clarke/hostmech + var/obj/vehicle/sealed/mecha/working/clarke/hostmech -/obj/item/mecha_parts/mecha_equipment/orebox_manager/attach(obj/mecha/M) +/obj/item/mecha_parts/mecha_equipment/orebox_manager/attach(obj/vehicle/sealed/mecha/M) . = ..() - if(istype(M, /obj/mecha/working/clarke)) + if(istype(M, /obj/vehicle/sealed/mecha/working/clarke)) hostmech = M /obj/item/mecha_parts/mecha_equipment/orebox_manager/detach() diff --git a/code/game/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm similarity index 79% rename from code/game/mecha/working/ripley.dm rename to code/modules/vehicles/mecha/working/ripley.dm index 3dc9531adae..3cc13ab6883 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/modules/vehicles/mecha/working/ripley.dm @@ -1,9 +1,9 @@ -/obj/mecha/working/ripley +/obj/vehicle/sealed/mecha/working/ripley desc = "Autonomous Power Loader Unit MK-I. Designed primarily around heavy lifting, the Ripley can be outfitted with utility equipment to fill a number of roles." name = "\improper APLU MK-I \"Ripley\"" icon_state = "ripley" silicon_icon_state = "ripley-empty" - step_in = 1.5 //Move speed, lower is faster. + movedelay = 1.5 //Move speed, lower is faster. /// How fast the mech is in low pressure var/fast_pressure_step_in = 1.5 /// How fast the mech is in normal pressure @@ -26,42 +26,42 @@ /// How much things Ripley can carry in their Cargo Compartment var/cargo_capacity = 15 -/obj/mecha/working/ripley/Move() +/obj/vehicle/sealed/mecha/working/ripley/Move() . = ..() update_pressure() -/obj/mecha/working/ripley/go_out() +/obj/vehicle/sealed/mecha/working/ripley/mob_exit(mob/M, silent, forced) ..() update_icon() -/obj/mecha/working/ripley/moved_inside(mob/living/carbon/human/H) +/obj/vehicle/sealed/mecha/working/ripley/moved_inside(mob/living/carbon/human/H) ..() update_icon() -/obj/mecha/working/ripley/check_for_internal_damage(list/possible_int_damage,ignore_threshold=null) +/obj/vehicle/sealed/mecha/working/ripley/check_for_internal_damage(list/possible_int_damage, ignore_threshold = FALSE) if (!enclosed) possible_int_damage -= (MECHA_INT_TEMP_CONTROL + MECHA_INT_TANK_BREACH) //if we don't even have an air tank, these two doesn't make a ton of sense. . = ..() -/obj/mecha/working/ripley/Initialize() +/obj/vehicle/sealed/mecha/working/ripley/Initialize() . = ..() AddComponent(/datum/component/armor_plate,3,/obj/item/stack/sheet/animalhide/goliath_hide,list(MELEE = 10, BULLET = 5, LASER = 5)) -/obj/mecha/working/ripley/Destroy() +/obj/vehicle/sealed/mecha/working/ripley/Destroy() for(var/atom/movable/A in cargo) A.forceMove(drop_location()) step_rand(A) cargo.Cut() return ..() -/obj/mecha/working/ripley/mkii +/obj/vehicle/sealed/mecha/working/ripley/mkii desc = "Autonomous Power Loader Unit MK-II. This prototype Ripley is refitted with a pressurized cabin, trading its prior speed for atmospheric protection and armor." name = "\improper APLU MK-II \"Ripley\"" icon_state = "ripleymkii" fast_pressure_step_in = 2 //step_in while in low pressure conditions slow_pressure_step_in = 4 //step_in while in normal pressure conditions - step_in = 4 + movedelay = 4 max_temperature = 30000 max_integrity = 250 armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100) @@ -69,47 +69,45 @@ enclosed = TRUE enter_delay = 40 silicon_icon_state = null - opacity = TRUE -/obj/mecha/working/ripley/deathripley +/obj/vehicle/sealed/mecha/working/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" name = "\improper DEATH-RIPLEY" icon_state = "deathripley" fast_pressure_step_in = 2 //step_in while in low pressure conditions slow_pressure_step_in = 3 //step_in while in normal pressure conditions - step_in = 4 + movedelay = 4 lights_power = 7 wreckage = /obj/structure/mecha_wreckage/ripley/deathripley step_energy_drain = 0 enclosed = TRUE enter_delay = 40 silicon_icon_state = null - opacity = TRUE -/obj/mecha/working/ripley/deathripley/Initialize() +/obj/vehicle/sealed/mecha/working/ripley/deathripley/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill ME.attach(src) -/obj/mecha/working/ripley/deathripley/real +/obj/vehicle/sealed/mecha/working/ripley/deathripley/real desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE. FOR REAL" -/obj/mecha/working/ripley/deathripley/real/Initialize() +/obj/vehicle/sealed/mecha/working/ripley/deathripley/real/Initialize() . = ..() for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) E.detach() qdel(E) - equipment.Cut() + LAZYCLEARLIST(equipment) var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/real ME.attach(src) -/obj/mecha/working/ripley/mining +/obj/vehicle/sealed/mecha/working/ripley/mining desc = "An old, dusty mining Ripley." name = "\improper APLU \"Miner\"" obj_integrity = 75 //Low starting health -/obj/mecha/working/ripley/mining/Initialize() +/obj/vehicle/sealed/mecha/working/ripley/mining/Initialize() . = ..() if(cell) cell.charge = FLOOR(cell.charge * 0.25, 1) //Starts at very low charge @@ -137,24 +135,24 @@ var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new scanner.attach(src) -/obj/mecha/working/ripley/Exit(atom/movable/O) +/obj/vehicle/sealed/mecha/working/ripley/Exit(atom/movable/O) if(O in cargo) return 0 return ..() -/obj/mecha/working/ripley/Topic(href, href_list) +/obj/vehicle/sealed/mecha/working/ripley/Topic(href, href_list) ..() if(href_list["drop_from_cargo"]) var/obj/O = locate(href_list["drop_from_cargo"]) in cargo if(O) - occupant_message("<span class='notice'>You unload [O].</span>") + to_chat(occupants, "[icon2html(src, occupants)]<span class='notice'>You unload [O].</span>") O.forceMove(drop_location()) cargo -= O log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]", LOG_MECHA) return -/obj/mecha/working/ripley/contents_explosion(severity, target) +/obj/vehicle/sealed/mecha/working/ripley/contents_explosion(severity, target) for(var/X in cargo) var/obj/O = X if(prob(30/severity)) @@ -162,7 +160,7 @@ O.forceMove(drop_location()) . = ..() -/obj/mecha/working/ripley/get_stats_part() +/obj/vehicle/sealed/mecha/working/ripley/get_stats_part() var/output = ..() output += "<b>Cargo Compartment Contents:</b><div style=\"margin-left: 15px;\">" if(cargo.len) @@ -173,7 +171,7 @@ output += "</div>" return output -/obj/mecha/working/ripley/relay_container_resist_act(mob/living/user, obj/O) +/obj/vehicle/sealed/mecha/working/ripley/relay_container_resist_act(mob/living/user, obj/O) to_chat(user, "<span class='notice'>You lean on the back of [O] and start pushing so it falls out of [src].</span>") if(do_after(user, 300, target = O)) if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src ) @@ -184,20 +182,21 @@ else if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. to_chat(user, "<span class='warning'>You fail to push [O] out of [src]!</span>") + /** * Makes the mecha go faster and halves the mecha drill cooldown if in Lavaland pressure. * * Checks for Lavaland pressure, if that works out the mech's speed is equal to fast_pressure_step_in and the cooldown for the mecha drill is halved. If not it uses slow_pressure_step_in and drill cooldown is normal. */ -/obj/mecha/working/ripley/proc/update_pressure() +/obj/vehicle/sealed/mecha/working/ripley/proc/update_pressure() var/turf/T = get_turf(loc) if(lavaland_equipment_pressure_check(T)) - step_in = fast_pressure_step_in + movedelay = fast_pressure_step_in for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) drill.equip_cooldown = initial(drill.equip_cooldown) * 0.5 else - step_in = slow_pressure_step_in + movedelay = slow_pressure_step_in for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) drill.equip_cooldown = initial(drill.equip_cooldown) diff --git a/code/game/mecha/working/working.dm b/code/modules/vehicles/mecha/working/working.dm similarity index 84% rename from code/game/mecha/working/working.dm rename to code/modules/vehicles/mecha/working/working.dm index 51213bd110b..5d6a8537152 100644 --- a/code/game/mecha/working/working.dm +++ b/code/modules/vehicles/mecha/working/working.dm @@ -1,7 +1,7 @@ -/obj/mecha/working +/obj/vehicle/sealed/mecha/working internal_damage_threshold = 60 -/obj/mecha/working/Move() +/obj/vehicle/sealed/mecha/working/Move() . = ..() if(.) collect_ore() @@ -11,7 +11,7 @@ * * Checks for a hydraulic clamp or ore box manager and if it finds an ore box inside them puts ore in the ore box. */ -/obj/mecha/working/proc/collect_ore() +/obj/vehicle/sealed/mecha/working/proc/collect_ore() if((locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment) || (locate(/obj/item/mecha_parts/mecha_equipment/orebox_manager) in equipment)) var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in contents if(ore_box) diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 6751ddfe358..e3a019427bf 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -50,10 +50,12 @@ mob_exit(M, silent, randomstep) /obj/vehicle/sealed/proc/mob_exit(mob/M, silent = FALSE, randomstep = FALSE) + SIGNAL_HANDLER if(!istype(M)) return FALSE remove_occupant(M) - M.forceMove(exit_location(M)) + if(!isAI(M))//This is the ONE mob we dont want to be moved to the vehicle that should be handeled when used + M.forceMove(exit_location(M)) if(randomstep) var/turf/target_turf = get_step(exit_location(M), pick(GLOB.cardinals)) M.throw_at(target_turf, 5, 10) diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index cbb64694286..0e2b9893cfc 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -89,7 +89,7 @@ occupant_actions -= M return TRUE -//ACTION DATUMS +/////////////ACTION DATUMS\\\\\\\\\ /datum/action/vehicle check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUN | AB_CHECK_CONSCIOUS diff --git a/tgstation.dme b/tgstation.dme index 814ef3a7c2a..ff25aca2330 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -884,37 +884,6 @@ #include "code\game\machinery\telecomms\machines\receiver.dm" #include "code\game\machinery\telecomms\machines\relay.dm" #include "code\game\machinery\telecomms\machines\server.dm" -#include "code\game\mecha\mech_bay.dm" -#include "code\game\mecha\mech_fabricator.dm" -#include "code\game\mecha\mecha.dm" -#include "code\game\mecha\mecha_actions.dm" -#include "code\game\mecha\mecha_construction_paths.dm" -#include "code\game\mecha\mecha_control_console.dm" -#include "code\game\mecha\mecha_defense.dm" -#include "code\game\mecha\mecha_parts.dm" -#include "code\game\mecha\mecha_topic.dm" -#include "code\game\mecha\mecha_wreckage.dm" -#include "code\game\mecha\combat\combat.dm" -#include "code\game\mecha\combat\durand.dm" -#include "code\game\mecha\combat\five_stars.dm" -#include "code\game\mecha\combat\gygax.dm" -#include "code\game\mecha\combat\honker.dm" -#include "code\game\mecha\combat\marauder.dm" -#include "code\game\mecha\combat\phazon.dm" -#include "code\game\mecha\combat\reticence.dm" -#include "code\game\mecha\equipment\mecha_equipment.dm" -#include "code\game\mecha\equipment\tools\medical_tools.dm" -#include "code\game\mecha\equipment\tools\mining_tools.dm" -#include "code\game\mecha\equipment\tools\other_tools.dm" -#include "code\game\mecha\equipment\tools\weapon_bay.dm" -#include "code\game\mecha\equipment\tools\work_tools.dm" -#include "code\game\mecha\equipment\weapons\mecha_ammo.dm" -#include "code\game\mecha\equipment\weapons\weapons.dm" -#include "code\game\mecha\medical\medical.dm" -#include "code\game\mecha\medical\odysseus.dm" -#include "code\game\mecha\working\clarke.dm" -#include "code\game\mecha\working\ripley.dm" -#include "code\game\mecha\working\working.dm" #include "code\game\objects\buckling.dm" #include "code\game\objects\empulse.dm" #include "code\game\objects\items.dm" @@ -3201,6 +3170,36 @@ #include "code\modules\vehicles\wheelchair.dm" #include "code\modules\vehicles\cars\car.dm" #include "code\modules\vehicles\cars\clowncar.dm" +#include "code\modules\vehicles\mecha\_mecha.dm" +#include "code\modules\vehicles\mecha\mech_bay.dm" +#include "code\modules\vehicles\mecha\mech_fabricator.dm" +#include "code\modules\vehicles\mecha\mech_melee_attack.dm" +#include "code\modules\vehicles\mecha\mecha_actions.dm" +#include "code\modules\vehicles\mecha\mecha_construction_paths.dm" +#include "code\modules\vehicles\mecha\mecha_control_console.dm" +#include "code\modules\vehicles\mecha\mecha_defense.dm" +#include "code\modules\vehicles\mecha\mecha_parts.dm" +#include "code\modules\vehicles\mecha\mecha_topic.dm" +#include "code\modules\vehicles\mecha\mecha_wreckage.dm" +#include "code\modules\vehicles\mecha\combat\combat.dm" +#include "code\modules\vehicles\mecha\combat\durand.dm" +#include "code\modules\vehicles\mecha\combat\gygax.dm" +#include "code\modules\vehicles\mecha\combat\honker.dm" +#include "code\modules\vehicles\mecha\combat\marauder.dm" +#include "code\modules\vehicles\mecha\combat\phazon.dm" +#include "code\modules\vehicles\mecha\combat\reticence.dm" +#include "code\modules\vehicles\mecha\equipment\mecha_equipment.dm" +#include "code\modules\vehicles\mecha\equipment\tools\medical_tools.dm" +#include "code\modules\vehicles\mecha\equipment\tools\mining_tools.dm" +#include "code\modules\vehicles\mecha\equipment\tools\other_tools.dm" +#include "code\modules\vehicles\mecha\equipment\tools\weapon_bay.dm" +#include "code\modules\vehicles\mecha\equipment\tools\work_tools.dm" +#include "code\modules\vehicles\mecha\equipment\weapons\mecha_ammo.dm" +#include "code\modules\vehicles\mecha\equipment\weapons\weapons.dm" +#include "code\modules\vehicles\mecha\medical\odysseus.dm" +#include "code\modules\vehicles\mecha\working\clarke.dm" +#include "code\modules\vehicles\mecha\working\ripley.dm" +#include "code\modules\vehicles\mecha\working\working.dm" #include "code\modules\vending\_vending.dm" #include "code\modules\vending\assist.dm" #include "code\modules\vending\autodrobe.dm" From 515ea1b6b2563c45e8a922616ae54587233d52ae Mon Sep 17 00:00:00 2001 From: tgstation-server <tgstation-server@tgstation13.org> Date: Sat, 29 Aug 2020 19:33:52 -0700 Subject: [PATCH 33/40] Automatic changelog generation for PR #52902 [ci skip] --- html/changelogs/AutoChangeLog-pr-52902.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-52902.yml diff --git a/html/changelogs/AutoChangeLog-pr-52902.yml b/html/changelogs/AutoChangeLog-pr-52902.yml new file mode 100644 index 00000000000..54e180e53ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-52902.yml @@ -0,0 +1,4 @@ +author: "TiviPlus" +delete-after: True +changes: + - refactor: "Mech refactor" From 89b4e01680a8b01f278bbfaf120870473a984ffd Mon Sep 17 00:00:00 2001 From: Tad Hardesty <tad@platymuus.com> Date: Sat, 29 Aug 2020 19:51:42 -0700 Subject: [PATCH 34/40] Fix various issues with browser statpanel (#53263) * Keep tab buttons in view when scrolled down * Unfocus tab buttons after click so scrollbar keeps working * Fix some subsystem stat entries * Improve key passthrough * Fix runtimes from nulls in AI connected_robot list * Add missing info in MC tab for global/config/etc. * Fix #53298 by including turf in alt-click menu --- .../configuration/configuration.dm | 9 ++- code/controllers/controller.dm | 2 +- code/controllers/failsafe.dm | 8 +-- code/controllers/globals.dm | 8 +-- code/controllers/master.dm | 9 +-- code/controllers/subsystem/profiler.dm | 2 +- code/controllers/subsystem/runechat.dm | 3 +- code/controllers/subsystem/statpanel.dm | 14 +++-- code/datums/wires/robot.dm | 4 +- code/game/machinery/transformer.dm | 2 +- code/game/objects/items/robot/robot_parts.dm | 8 +-- code/modules/admin/verbs/borgpanel.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 22 ++++--- .../mob/living/silicon/robot/robot_defense.dm | 2 +- html/statbrowser.html | 60 +++++++++++-------- 15 files changed, 85 insertions(+), 72 deletions(-) diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index eb4c75312bc..827ffd6eac4 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -52,7 +52,7 @@ LoadMOTD() LoadPolicy() LoadChatFilter() - + if (Master) Master.OnConfigLoad() @@ -186,10 +186,9 @@ var/list/banned_edits = list(NAMEOF(src, entries_by_type), NAMEOF(src, entries), NAMEOF(src, directory)) return !(var_name in banned_edits) && ..() -/datum/controller/configuration/stat_entry() - if(!statclick) - statclick = new/obj/effect/statclick/debug(null, "Edit", src) - stat("[name]:", statclick) +/datum/controller/configuration/stat_entry(msg) + msg = "Edit" + return msg /datum/controller/configuration/proc/Get(entry_type) var/datum/config_entry/E = entry_type diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm index c9d5f1e5650..1f0a01a072c 100644 --- a/code/controllers/controller.dm +++ b/code/controllers/controller.dm @@ -16,4 +16,4 @@ /datum/controller/proc/Recover() -/datum/controller/proc/stat_entry() +/datum/controller/proc/stat_entry(msg) diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 75d5cb22daf..f90cebd5ba1 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -95,8 +95,6 @@ GLOBAL_REAL(Failsafe, /datum/controller/failsafe) /datum/controller/failsafe/proc/defcon_pretty() return defcon -/datum/controller/failsafe/stat_entry() - if(!statclick) - statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - - stat("Failsafe Controller:", statclick.update("Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])")) +/datum/controller/failsafe/stat_entry(msg) + msg = "Defcon: [defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])" + return msg diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index 714f22f38de..21f022acfd0 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -25,11 +25,9 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) SHOULD_CALL_PARENT(FALSE) return QDEL_HINT_IWILLGC -/datum/controller/global_vars/stat_entry() - if(!statclick) - statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - - stat("Globals:", statclick.update("Edit")) +/datum/controller/global_vars/stat_entry(msg) + msg = "Edit" + return msg /datum/controller/global_vars/vv_edit_var(var_name, var_value) if(gvars_datum_protected_varlist[var_name]) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index b3a94cf1718..3ec5045a881 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -601,12 +601,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new skip_ticks = 1 -/datum/controller/master/stat_entry() - if(!statclick) - statclick = new/obj/effect/statclick/debug(null, "Initializing...", src) - - stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)") - stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration]) (TickLimit: [round(Master.current_ticklimit, 0.1)])")) +/datum/controller/master/stat_entry(msg) + msg = "(TickRate:[Master.processing]) (Iteration:[Master.iteration]) (TickLimit: [round(Master.current_ticklimit, 0.1)])" + return msg /datum/controller/master/StartLoadingMap() diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm index b3e972bdef4..7533e9663ff 100644 --- a/code/controllers/subsystem/profiler.dm +++ b/code/controllers/subsystem/profiler.dm @@ -12,7 +12,7 @@ SUBSYSTEM_DEF(profiler) /datum/controller/subsystem/profiler/stat_entry(msg) msg += "F:[round(fetch_cost,1)]ms" msg += "|W:[round(write_cost,1)]ms" - ..(msg) + return msg /datum/controller/subsystem/profiler/Initialize() if(CONFIG_GET(flag/auto_profile)) diff --git a/code/controllers/subsystem/runechat.dm b/code/controllers/subsystem/runechat.dm index 22cc7254278..f590674bde2 100644 --- a/code/controllers/subsystem/runechat.dm +++ b/code/controllers/subsystem/runechat.dm @@ -40,7 +40,8 @@ SUBSYSTEM_DEF(runechat) bucket_resolution = world.tick_lag /datum/controller/subsystem/runechat/stat_entry(msg) - ..("ActMsgs:[bucket_count] SecQueue:[length(second_queue)]") + msg = "ActMsgs:[bucket_count] SecQueue:[length(second_queue)]" + return msg /datum/controller/subsystem/runechat/fire(resumed = FALSE) // Store local references to datum vars as it is faster to access them this way diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 60ab051456e..720b13dfcd4 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -32,11 +32,11 @@ SUBSYSTEM_DEF(statpanels) list("CPU:", world.cpu), list("Instances:", "[num2text(world.contents.len, 10)]"), list("World Time:", "[world.time]"), - list("Globals:", "Edit", "\ref[GLOB]"), - list("[config]:", "Edit", "\ref[config]"), - list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))"), - list("Master Controller:", Master ? "(TickRate:[Master.processing]) (Iteration:[Master.iteration])" : "ERROR", "\ref[Master]"), - list("Failsafe Controller:", Failsafe ? "Defcon: [Failsafe.defcon_pretty()] (Interval: [Failsafe.processing_interval] | Iteration: [Failsafe.master_iteration])" : "ERROR", "\ref[Failsafe]"), + list("Globals:", GLOB.stat_entry(), "\ref[GLOB]"), + list("[config]:", config.stat_entry(), "\ref[config]"), + list("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)"), + list("Master Controller:", Master.stat_entry(), "\ref[Master]"), + list("Failsafe Controller:", Failsafe.stat_entry(), "\ref[Failsafe]"), list("","") ) for(var/ss in Master.subsystems) @@ -94,6 +94,10 @@ SUBSYSTEM_DEF(statpanels) if(!target_image.loc || target_image.loc.loc != target_mob.listed_turf || !target_image.override) continue overrides += target_image.loc + if(!(REF(target_mob.listed_turf) in cached_images)) + target << browse_rsc(getFlatIcon(target_mob.listed_turf, no_anim = TRUE), "[REF(target_mob.listed_turf)].png") + cached_images += REF(target_mob.listed_turf) + turfitems[++turfitems.len] = list("[target_mob.listed_turf]", REF(target_mob.listed_turf), "[REF(target_mob.listed_turf)].png") for(var/tc in target_mob.listed_turf) var/atom/movable/turf_content = tc if(turf_content.mouse_opacity == MOUSE_OPACITY_TRANSPARENT) diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index 871f33e585e..7927ffe1266 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -39,7 +39,7 @@ new_ai = select_active_ai(R, R.z) R.notify_ai(DISCONNECT) if(new_ai && (new_ai != R.connected_ai)) - R.connected_ai = new_ai + R.set_connected_ai(new_ai) if(R.shell) R.undeploy() //If this borg is an AI shell, disconnect the controlling AI and assign ti to a new AI R.notify_ai(AI_SHELL) @@ -68,7 +68,7 @@ R.notify_ai(DISCONNECT) if(R.shell) R.undeploy() - R.connected_ai = null + R.set_connected_ai(null) if(WIRE_LAWSYNC) // Cut the law wire, and the borg will no longer receive law updates from its AI. Repair and it will re-sync. if(mend) if(!R.emagged) diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 794d886e64d..5cb65ab29a5 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -96,7 +96,7 @@ // So he can't jump out the gate right away. R.SetLockdown() if(masterAI) - R.connected_ai = masterAI + R.set_connected_ai(masterAI) R.lawsync() R.lawupdate = 1 addtimer(CALLBACK(src, .proc/unlock_new_robot, R), 50) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 1e1db65be32..4cbea15b7bb 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -267,11 +267,11 @@ O.locked = panel_locked if(!aisync) lawsync = FALSE - O.connected_ai = null + O.set_connected_ai(null) else O.notify_ai(NEW_BORG) if(forced_ai) - O.connected_ai = forced_ai + O.set_connected_ai(forced_ai) if(!lawsync) O.lawupdate = FALSE if(M.laws.id == DEFAULT_AI_LAWID) @@ -324,10 +324,10 @@ if(!aisync) lawsync = FALSE - O.connected_ai = null + O.set_connected_ai(null) else if(forced_ai) - O.connected_ai = forced_ai + O.set_connected_ai(forced_ai) O.notify_ai(AI_SHELL) if(!lawsync) O.lawupdate = FALSE diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 03f5ad9a79e..e23742cde1b 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -199,7 +199,7 @@ borg.notify_ai(DISCONNECT) if(borg.shell) borg.undeploy() - borg.connected_ai = newai + borg.set_connected_ai(newai) borg.notify_ai(TRUE) message_admins("[key_name_admin(user)] slaved [ADMIN_LOOKUPFLW(borg)] to the AI [ADMIN_LOOKUPFLW(newai)].") log_admin("[key_name(user)] slaved [key_name(borg)] to the AI [key_name(newai)].") @@ -207,7 +207,7 @@ borg.notify_ai(DISCONNECT) if(borg.shell) borg.undeploy() - borg.connected_ai = null + borg.set_connected_ai(null) message_admins("[key_name_admin(user)] freed [ADMIN_LOOKUPFLW(borg)] from being slaved to an AI.") log_admin("[key_name(user)] freed [key_name(borg)] from being slaved to an AI.") if (borg.lawupdate) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c767ba88aa6..58b4ddf8656 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -181,7 +181,7 @@ stack_trace("Borg MMI lacked a brainmob") mmi = null if(connected_ai) - connected_ai.connected_robots -= src + set_connected_ai(null) if(shell) GLOB.available_ai_shells -= src else @@ -461,9 +461,7 @@ gib() /mob/living/silicon/robot/proc/UnlinkSelf() - if(src.connected_ai) - connected_ai.connected_robots -= src - src.connected_ai = null + set_connected_ai(null) lawupdate = FALSE set_lockcharge(FALSE) scrambledcodes = TRUE @@ -956,7 +954,7 @@ builtInCamera.c_tag = real_name //update the camera name too mainframe = AI deployed = TRUE - connected_ai = mainframe + set_connected_ai(mainframe) mainframe.connected_robots |= src lawupdate = TRUE lawsync() @@ -1069,9 +1067,8 @@ /mob/living/silicon/robot/proc/TryConnectToAI() - connected_ai = select_active_ai_with_fewest_borgs(z) + set_connected_ai(select_active_ai_with_fewest_borgs(z)) if(connected_ai) - connected_ai.connected_robots += src lawsync() lawupdate = TRUE return TRUE @@ -1092,3 +1089,14 @@ cell.charge = min(cell.charge + amount, cell.maxcharge) if(repairs) heal_bodypart_damage(repairs, repairs - 1) + +/mob/living/silicon/robot/proc/set_connected_ai(new_ai) + if(connected_ai == new_ai) + return + . = connected_ai + connected_ai = new_ai + if(.) + var/mob/living/silicon/ai/old_ai = . + old_ai.connected_robots -= src + if(connected_ai) + connected_ai.connected_robots |= src diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 952514addad..37dbb56358e 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -341,7 +341,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real SetEmagged(1) SetStun(60) //Borgs were getting into trouble because they would attack the emagger before the new laws were shown lawupdate = FALSE - connected_ai = null + set_connected_ai(null) message_admins("[ADMIN_LOOKUPFLW(user)] emagged cyborg [ADMIN_LOOKUPFLW(src)]. Laws overridden.") log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") var/time = time2text(world.realtime,"hh:mm:ss") diff --git a/html/statbrowser.html b/html/statbrowser.html index f8d6df48dea..db582457869 100644 --- a/html/statbrowser.html +++ b/html/statbrowser.html @@ -9,8 +9,8 @@ body { font-family: Verdana, Geneva, Tahoma, sans-serif; font-size: 12px !important; - margin: 5px !important; - padding: 2px !important; + margin: 0 !important; + padding: 0 !important; } body.dark { background-color: #131313; @@ -19,11 +19,18 @@ body.dark { #menu { background-color: white; + position: fixed; + padding: 7px; + width: 100%; } .dark #menu { background-color: #131313; } +#statcontent { + padding: 0 7px 7px 7px; +} + a { color: black; text-decoration: none @@ -142,6 +149,7 @@ li a:hover:not(.active) { </head> <body> <ul id="menu" class="button-container"></ul> +<div id="under_menu"></div> <div id="statcontent"></div> <script> // Polyfills and compatibility ------------------------------------------------ @@ -173,10 +181,14 @@ if (window.location) { if(e.which) { if(!anti_spam[e.which]) { anti_spam[e.which] = true; - var href = "?__keydown=" + e.which; - if(e.ctrlKey === false) href += "&ctrlKey=0" - else if(e.ctrlKey === true) href += "&ctrlKey=1" - window.location.href = href; + var key = String.fromCharCode(e.which); + if(key == "t") + window.location.href = "byond://winset?command=Say" + else if(key == "o") + window.location.href = "byond://winset?command=OOC" + else if(key == "m") + window.location.href = "byond://winset?command=Me" + window.location.href = "byond://winset?command=keyDown " + key; } } }); @@ -187,10 +199,8 @@ if (window.location) { return; if(e.which) { anti_spam[e.which] = false; - var href = "?__keyup=" + e.which; - if(e.ctrlKey === false) href += "&ctrlKey=0" - else if(e.ctrlKey === true) href += "&ctrlKey=1" - window.location.href = href; + var key = String.fromCharCode(e.which); + window.location.href = "byond://winset?command=keyUp " + key; } }); } @@ -220,6 +230,7 @@ var permanent_tabs = []; // tabs that won't be cleared by wipes var turfcontents = []; var turfname = ""; var menu = document.querySelector('#menu'); +var under_menu = document.querySelector('#under_menu'); function createStatusTab(name) { if(document.getElementById(name) || name.trim() == "") @@ -227,7 +238,10 @@ function createStatusTab(name) { if(!verb_tabs.includes(name) && !permanent_tabs.includes(name)) return; var B = document.createElement("BUTTON"); - B.onclick = function() {tab_change(name)}; + B.onclick = function() { + tab_change(name); + this.blur(); + }; B.id = name; B[textContentKey] = name; B.className = "button"; @@ -241,6 +255,7 @@ function createStatusTab(name) { } //END ORDERING menu.appendChild(B); + under_menu.style.height = menu.clientHeight + 'px'; } function removeStatusTab(name) { @@ -252,10 +267,15 @@ function removeStatusTab(name) { } } menu.removeChild(document.getElementById(name)); + under_menu.style.height = menu.clientHeight + 'px'; if(document.getElementById(name)) // repeat for duplicates removeStatusTab(name); } +window.onresize = function () { + under_menu.style.height = menu.clientHeight + 'px'; +} + function addPermanentTab(name) { if(!permanent_tabs.includes(name)) permanent_tabs.push(name); @@ -276,21 +296,6 @@ function checkStatusTab() { if(!verb_tabs.includes(menu.children[i].id) && !permanent_tabs.includes(menu.children[i].id)) removeStatusTab(menu.children[i].id); } -function add_verb(v) { - var to_add = JSON.parse(v); - var cat = ""; - cat = to_add[0]; - if(verb_tabs.includes(cat)){ // we have the category already - verbs.push(to_add); // add it to verb list and we done - } else if(cat.trim() != "") { // we don't have the category - verb_tabs.push(cat); - verbs.push(to_add); // add verb - createStatusTab(cat); // create the category - } - if(current_tab == cat) { - draw_verbs(cat); // redraw if we added a verb to the tab we're currently in - } -} function remove_verb(v) { var verb_to_remove = v; // to_remove = [verb:category, verb:name] for(var i = verbs.length - 1; i >= 0; i--){ @@ -345,6 +350,9 @@ function add_verb_list(v) { for(var i = 0; i < to_add.length; i++) { var part = to_add[i]; if(verb_tabs.includes(part[0])){ + if(verbs.includes(part)){ + continue; + } verbs.push(part); if(current_tab == part[0]) { draw_verbs(part[0]); // redraw if we added a verb to the tab we're currently in From 37f849fb17014f689346f7a9a49fab5f5562cf18 Mon Sep 17 00:00:00 2001 From: Ghilker <42839747+Ghilker@users.noreply.github.com> Date: Sun, 30 Aug 2020 04:56:40 +0200 Subject: [PATCH 35/40] ZK-Lambda-Class Remade (#52941) This PR adds the crystal invasion event, a new event involving the Supermatter and the monsters from within. When the event starts there will be a message from centcomm announcing it, then the supermatter explode leaving a destabilized crystal that emits radiations and harmful gases; after a bit portals will spawn around the station, that will produce a number of monsters each. there are 4 types of waves and 4 types of portals The waves are: Small, Medium, Big, Huge (each have different kind of portals that can spawn and different amounts too) The portals are the same types of the waves, they differ from each other for the number of monsters that can spawn and the kind of monsters that can spawn (bigger portals spawn stronger monsters) To end the event the players should stabilize the crystal by destroying the portals (for now are indestructible and they are disabled by using an anomaly neutralizer, might change that) and collecting otherworld crystals; then those crystals are to be put in the crystal stabilizer, an item unlockable in the tech tree. After this just inject the destabilized crystal with it and the remaining portals will close on their own (the spawned monsters will still remain tho so you have to slay them) All the numbers are mostly eyeballed and could change if requested/with feedbacks --- code/datums/materials/basemats.dm | 11 + code/modules/events/crystal_event.dm | 517 ++++++++++++++++++ code/modules/power/supermatter/supermatter.dm | 8 + code/modules/research/designs/tool_designs.dm | 10 + code/modules/research/techweb/all_nodes.dm | 2 +- icons/mob/simple_human.dmi | Bin 102922 -> 102178 bytes icons/obj/stack_objects.dmi | Bin 49122 -> 49450 bytes icons/obj/supermatter.dmi | Bin 26039 -> 26587 bytes tgstation.dme | 1 + 9 files changed, 548 insertions(+), 1 deletion(-) create mode 100644 code/modules/events/crystal_event.dm diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index ef79c9f9cad..77b154f2017 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -347,6 +347,17 @@ Unless you know what you're doing, only use the first three numbers. They're in M.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7) return TRUE +/datum/material/otherworld_crystal + name = "Otherworld Crystal" + desc = "An unkown crystal from an unkown dimension" + color = COLOR_YELLOW + strength_modifier = 0.95 + categories = list(MAT_CATEGORY_RIGID = TRUE) + sheet_type = /obj/item/stack/sheet/otherworld_crystal + value_per_unit = 0.25 + beauty_modifier = 0.4 + alpha = 150 + //I don't like sand. It's coarse, and rough, and irritating, and it gets everywhere. /datum/material/sand name = "sand" diff --git a/code/modules/events/crystal_event.dm b/code/modules/events/crystal_event.dm new file mode 100644 index 00000000000..1b822e38bda --- /dev/null +++ b/code/modules/events/crystal_event.dm @@ -0,0 +1,517 @@ +GLOBAL_LIST_INIT(crystal_invasion_waves, list( + "small wave" = list( + /obj/structure/crystal_portal/small=4, + /obj/structure/crystal_portal/medium=1 + ), + "medium wave" = list( + /obj/structure/crystal_portal/small=4, + /obj/structure/crystal_portal/medium=3, + /obj/structure/crystal_portal/big=1 + ), + "big wave" = list( + /obj/structure/crystal_portal/small=5, + /obj/structure/crystal_portal/medium=3, + /obj/structure/crystal_portal/big=2, + /obj/structure/crystal_portal/huge=1 + ), + "huge wave" = list( + /obj/structure/crystal_portal/small=7, + /obj/structure/crystal_portal/medium=5, + /obj/structure/crystal_portal/big=3, + /obj/structure/crystal_portal/huge=2 + ), + )) +GLOBAL_LIST_EMPTY(crystal_portals) + +/* +This section is for the event controller +*/ +/datum/round_event_control/crystal_invasion + name = "Crystal Invasion" + typepath = /datum/round_event/crystal_invasion + weight = 8 + min_players = 35 + max_occurrences = 1 + earliest_start = 25 MINUTES + +/datum/round_event/crystal_invasion + startWhen = 10 + announceWhen = 1 + endWhen = 25 MINUTES + ///Is the name of the wave, used to check wich wave will be generated + var/wave_name + ///Max number of portals that can spawn per type of wave + var/portal_numbers + ///Check if this is the first wave or not + var/spawned = FALSE + ///Store the destabilized crystal + var/obj/machinery/destabilized_crystal/dest_crystal + ///Check if the event will end badly + var/is_zk_scenario = TRUE + +/datum/round_event/crystal_invasion/start() + choose_wave_type() + +/datum/round_event/crystal_invasion/announce(fake) + priority_announce("WARNING - Destabilization of the Supermatter Crystal Matrix detected, please stand by waiting further instructions", "Alert") + sound_to_playing_players('sound/misc/notice1.ogg') + +///Choose the type of the wave +/datum/round_event/crystal_invasion/proc/choose_wave_type() + if(!wave_name) + wave_name = pickweight(list( + "small wave" = 35, + "medium wave" = 45, + "big wave" = 15, + "huge wave" = 5)) + switch(wave_name) + if("small wave") + portal_numbers = rand(9, 11) + if("medium wave") + portal_numbers = rand(8, 12) + if("big wave") + portal_numbers = rand(9, 13) + if("huge wave") + portal_numbers = rand(11, 15) + else + kill() + CRASH("Wave name of [wave_name] not recognised.") + + var/list/sm_crystal = list() + for(var/obj/machinery/power/supermatter_crystal/temp in GLOB.machines) + if(istype(temp, /obj/machinery/power/supermatter_crystal/shard)) + continue + sm_crystal += temp + if(sm_crystal == null) + log_game("No engine found, killing the crystal invasion event.") + kill() + return + var/obj/machinery/power/supermatter_crystal/crystal = pick(sm_crystal) + dest_crystal = crystal.destabilize(portal_numbers) + RegisterSignal(dest_crystal, COMSIG_PARENT_QDELETING, .proc/on_dest_crystal_qdel) + + priority_announce("WARNING - Numerous energy fluctuations have been detected from your Supermatter; we estimate a [wave_name] of crystalline creatures \ + coming from \[REDACTED]; there will be [portal_numbers] portals spread around the station that you must close. Harvest a \[REDACTED] \ + anomaly from a portal by using the anomaly neutralizer, place it inside a crystal stabilizer, and inject it into your Supermatter to stop a ZK-Lambda-Class Cosmic Fragmentation Scenario from occurring.", "Alert") + sound_to_playing_players('sound/misc/notice1.ogg') + + addtimer(CALLBACK(src, .proc/spawn_portals), 10 SECONDS) + +///Pick a location from the generic_event_spawns list that are present on the maps and call the spawn anomaly and portal procs +/datum/round_event/crystal_invasion/proc/spawn_portals() + var/list/spawners = list() + for(var/es in GLOB.generic_event_spawns) + var/obj/effect/landmark/event_spawn/temp = es + if(is_station_level(temp.z)) + spawners += temp + for(var/i in 1 to portal_numbers) + spawn_portal(GLOB.crystal_invasion_waves[wave_name], spawners) + for(var/i in 1 to 6) + spawn_anomaly(spawners) + + addtimer(CALLBACK(src, .proc/more_portals, GLOB.crystal_invasion_waves[wave_name]), 15 MINUTES) + +///Spawn an anomaly randomly in a different location than spawn_portal() +/datum/round_event/crystal_invasion/proc/spawn_anomaly(list/spawners) + if(!spawners.len) + CRASH("No landmarks on the station map, aborting") + var/obj/spawner = pick(spawners) + new/obj/effect/anomaly/flux(spawner.loc) + +///Spawn one portal in a random location choosen from the generic_event_spawns list +/datum/round_event/crystal_invasion/proc/spawn_portal(list/wave_type, list/spawners) + if(!spawners.len) + CRASH("No landmarks on the station map, aborting") + var/pick_portal = pickweight(wave_type) + var/obj/spawner = pick(spawners) + new pick_portal(spawner.loc) + +///If after 10 minutes the crystal is not stabilized more portals are spawned and the event progress further +/datum/round_event/crystal_invasion/proc/more_portals() + priority_announce("WARNING - Detected another spike from the destabilized crystal. More portals are spawning all around the station, the next spike could \ + cause a \[REDACTED] class event we assume you have 10 more minutes before total crystal annihilation", "Alert") + sound_to_playing_players('sound/misc/notice1.ogg') + var/list/spawners = list() + for(var/es in GLOB.generic_event_spawns) + var/obj/effect/landmark/event_spawn/temp = es + if(is_station_level(temp.z)) + spawners += temp + for(var/i in 1 to rand(10, 15)) + spawn_portal(GLOB.crystal_invasion_waves["small wave"], spawners) + +/datum/round_event/crystal_invasion/tick() + if(dest_crystal == null) + processing = FALSE + message_admins("Deleted Destabilized crystal, aborting") + kill() + if(dest_crystal.is_stabilized == TRUE) + processing = FALSE + is_zk_scenario = FALSE + end() + +/datum/round_event/crystal_invasion/end() + if(is_zk_scenario == TRUE) + processing = FALSE + zk_event_announcement() + else + restore() + kill() + +///This proc announces that the event is concluding with the worst scenario +/datum/round_event/crystal_invasion/proc/zk_event_announcement() + dest_crystal.active = FALSE + priority_announce("WARNING - The crystal has reached critical instability point. ZK-Event inbound, please do not panic, anyone who panics will \ + be terminated on the spot. Have a nice day", "Alert") + sound_to_playing_players('sound/machines/alarm.ogg') + addtimer(CALLBACK(src, .proc/do_zk_event), 10 SECONDS) + +///This proc actually manages the end of the event +/datum/round_event/crystal_invasion/proc/do_zk_event() + var/list/spawners = list() + for(var/es in GLOB.generic_event_spawns) + var/obj/effect/landmark/event_spawn/temp = es + if(is_station_level(temp.z)) + spawners += temp + for(var/i in 1 to rand(15, 25)) + spawn_portal(GLOB.crystal_invasion_waves["huge wave"], spawners) + explosion(dest_crystal.loc, 15, 26, 33, 35, 1, 1) //a bit smaller than max supermatter explosion + priority_announce("WARNING - Portal are appearing everywhere, you failed to contain the event. You people should feel ashamed of yourselves!","Alarm") + QDEL_NULL(dest_crystal) + +///Restore the Destabilized Crystal as it was before +/datum/round_event/crystal_invasion/proc/restore() + priority_announce("The Crystal has been restored and is now stable again, your sector of space is now safe from the ZK-Lambda-Class Scenario, \ + kill the remaining crystal monsters and go back to work") + sound_to_playing_players('sound/misc/notice2.ogg') + var/turf/loc_turf = get_turf(dest_crystal.loc) + new/obj/machinery/power/supermatter_crystal(loc_turf) + for(var/Portal in GLOB.crystal_portals) + qdel(Portal) + QDEL_NULL(dest_crystal) + +///Handle the dest_crystal var to be null if the destabilized crystal is deleted by a badmin before the end of the event +/datum/round_event/crystal_invasion/proc/on_dest_crystal_qdel() + UnregisterSignal(dest_crystal, COMSIG_PARENT_QDELETING) + processing = FALSE + dest_crystal = null + kill() + +/* +This section is for the destabilized SM +*/ +/obj/machinery/destabilized_crystal + name = "destabilized crystal" + desc = "A strangely translucent and iridescent crystal." + icon = 'icons/obj/supermatter.dmi' + icon_state = "psy" + density = TRUE + anchored = TRUE + flags_1 = PREVENT_CONTENTS_EXPLOSION_1 + light_range = 4 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + ///If not active the crystal will not emit radiations and gases + var/active = TRUE + ///Check if the crew managed to stop the ZK-class event by stabilizing the crystal + var/is_stabilized = FALSE + +/obj/machinery/destabilized_crystal/process() + if(!active) + return + if(prob(75)) + radiation_pulse(src, 250, 6) + var/turf/loc_turf = loc + var/datum/gas_mixture/env = loc_turf.return_air() + var/datum/gas_mixture/removed + var/gasefficency = 0.5 + removed = env.remove(gasefficency * env.total_moles()) + removed.assert_gases(/datum/gas/bz, /datum/gas/miasma) + removed.gases[/datum/gas/bz][MOLES] += 15.5 + removed.gases[/datum/gas/miasma][MOLES] += 5.5 + env.merge(removed) + air_update_turf() + +/obj/machinery/destabilized_crystal/attackby(obj/item/W, mob/living/user, params) + if(!istype(user)) + return + if(istype(W, /obj/item/crystal_stabilizer)) + var/obj/item/crystal_stabilizer/injector = W + if(!injector.filled) + to_chat(user, "<span class='notice'>\The [W] is empty!</span>") + return + to_chat(user, "<span class='notice'>You carefully begin injecting \the [src] with \the [W]... take care not to move untill all the steps are finished!</span>") + if(!W.use_tool(src, user, 5 SECONDS, volume = 100)) + return + to_chat(user, "<span class='notice'>Seems that \the [src] internal resonance is fading with the fluid!</span>") + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 35, TRUE) + if(!W.use_tool(src, user, 6.5 SECONDS, volume = 100)) + return + to_chat(user, "<span class='notice'>The [src] is reacting violently with the fluid!</span>") + fire_nuclear_particle() + radiation_pulse(src, 2500, 6) + if(!W.use_tool(src, user, 7.5 SECONDS, volume = 100)) + return + to_chat(user, "<span class='notice'>The [src] has been restored and restabilized!</span>") + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 35, TRUE) + injector.filled = FALSE + active = FALSE + is_stabilized = TRUE + +/* +This section is for the crystal stabilizer item and the crystal from the closed portals +*/ +/obj/item/crystal_stabilizer + name = "Supermatter Stabilizer" + desc = "Used when the Supermatter Matrix is starting to reach the destruction point." + icon = 'icons/obj/supermatter.dmi' + icon_state = "stabilizer" + slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_HUGE + ///The stabilizer is one use only + var/filled = FALSE + +/obj/item/crystal_stabilizer/examine(user) + . = ..() + if(!filled) + . += "<span class='notice'>The [src] is empty.</span>" + else + . += "<span class='notice'>The [src] is full and can be used to stabilize the Supermatter.</span>" + +/obj/item/crystal_stabilizer/attackby(obj/item/W, mob/living/user, params) + . = ..() + if((W.item_flags & ABSTRACT) || !istype(user)) + return + if(istype(W, /obj/item/stack/sheet/otherworld_crystal)) + if(filled) + return + to_chat(user, "<span class='notice'>You refill the [src]</span>") + playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) + filled = TRUE + qdel(W) + +/obj/item/stack/sheet/otherworld_crystal + name = "Otherworld Crystals" + icon_state = "otherworld-crystal" + singular_name = "Otherworld Crystal" + icon = 'icons/obj/stack_objects.dmi' + material_type = /datum/material/otherworld_crystal + +/* +This section is for the crystal portals variations +*/ +/obj/structure/crystal_portal + name = "crystal portal" + desc = "this shouldn't be here" + icon = 'icons/effects/effects.dmi' + icon_state = "anom" + color = COLOR_SILVER + anchored = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF + ///Max amount of mobs that a portal can spawn in any given time + var/max_mobs = 5 + ///Spawn time between each mobs + var/spawn_time = 1000 + ///Type of mob that the portal will spawn, if more than one type in the list will choose randomly + var/mob_types = list(/mob/living/simple_animal/hostile/carp) + ///Fluff text for each mob spawned + var/spawn_text = "emerges from" + ///Affiliation to a faction, used to stop mobs from destroying their portals (unused for now) + var/faction = list("hostile") + ///Spawner component + var/spawner_type = /datum/component/spawner + ///This var check if the portal has been closed by a player with a neutralizer + var/closed = FALSE + +/obj/structure/crystal_portal/Initialize() + . = ..() + AddComponent(spawner_type, mob_types, spawn_time, faction, spawn_text, max_mobs) + GLOB.crystal_portals += src + mob_types = typelist("crystal_portal mob_types", mob_types) + faction = typelist("crystal_portal faction", faction) + +/obj/structure/crystal_portal/Destroy() + GLOB.crystal_portals -= src + if(!closed) + switch(name) + if("Small Portal") + explosion(loc, 0,1,3) + if("Medium Portal") + explosion(loc, 0,3,5) + if("Big Portal") + explosion(loc, 1,3,5) + if("Huge Portal") + explosion(loc, 2,5,7) + new/obj/item/stack/sheet/otherworld_crystal(loc) + return ..() + +/obj/structure/crystal_portal/attack_animal(mob/living/simple_animal/M) + if(faction_check(faction, M.faction, FALSE) && !M.client) + return ..() + +/obj/structure/crystal_portal/attackby(obj/item/W, mob/living/user, params) + if((W.item_flags & ABSTRACT) || !istype(user)) + return + if(istype(W, /obj/item/anomaly_neutralizer)) + to_chat(user, "<span class='notice'>You start closing \the [src]...</span>") + if(W.use_tool(src, user, 5.5 SECONDS, volume = 100)) + to_chat(user, "<span class='notice'>You successfully close \the [src]!</span>") + closed = TRUE + qdel(src) + +/obj/structure/crystal_portal/small + name = "Small Portal" + desc = "A small portal to an unkown dimension!" + color = COLOR_BRIGHT_BLUE + max_mobs = 3 + spawn_time = 200 + mob_types = list( + /mob/living/simple_animal/hostile/crystal_monster/minion, + /mob/living/simple_animal/hostile/crystal_monster/thug + ) + +/obj/structure/crystal_portal/medium + name = "Medium Portal" + desc = "A medium portal to an unkown dimension!" + color = COLOR_GREEN + max_mobs = 5 + spawn_time = 180 + mob_types = list( + /mob/living/simple_animal/hostile/crystal_monster/minion, + /mob/living/simple_animal/hostile/crystal_monster/thug, + /mob/living/simple_animal/hostile/crystal_monster/recruit + ) + +/obj/structure/crystal_portal/big + name = "Big Portal" + desc = "A big portal to an unkown dimension!" + color = COLOR_RED + max_mobs = 8 + spawn_time = 160 + mob_types = list( + /mob/living/simple_animal/hostile/crystal_monster/minion, + /mob/living/simple_animal/hostile/crystal_monster/thug, + /mob/living/simple_animal/hostile/crystal_monster/recruit, + /mob/living/simple_animal/hostile/crystal_monster/killer + ) + +/obj/structure/crystal_portal/huge + name = "Huge Portal" + desc = "A huge portal to an unkown dimension!" + color = COLOR_BLACK + max_mobs = 12 + spawn_time = 140 + mob_types = list( + /mob/living/simple_animal/hostile/crystal_monster/minion, + /mob/living/simple_animal/hostile/crystal_monster/thug, + /mob/living/simple_animal/hostile/crystal_monster/recruit, + /mob/living/simple_animal/hostile/crystal_monster/killer, + /mob/living/simple_animal/hostile/crystal_monster/boss, + ) + +/* +This section is for the crystal monsters variations +*/ +/mob/living/simple_animal/hostile/crystal_monster + name = "crystal monster" + desc = "A monster made of crystals similar to the Supermatter ones." + icon = 'icons/mob/simple_human.dmi' + icon_state = "crystal_minion" + icon_living = "crystal_minion" + icon_dead = "crystal_minion" + gender = NEUTER + mob_biotypes = MOB_MINERAL|MOB_HUMANOID + turns_per_move = 5 + speak_emote = list("resonates") + emote_see = list("resonates") + a_intent = INTENT_HARM + maxHealth = 25 + health = 25 + speed = 1.2 + harm_intent_damage = 2.5 + melee_damage_lower = 5 + melee_damage_upper = 5 + minbodytemp = 0 + maxbodytemp = 1500 + healable = 0 //they're crystals how would bruise packs help them?? + attack_verb_continuous = "smashes" + attack_verb_simple = "smash" + attack_sound = 'sound/effects/supermatter.ogg' + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 10 + robust_searching = 1 + stat_attack = UNCONSCIOUS + faction = list("crystal") + see_in_dark = 8 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + deathmessage = "collapses into dust!" + del_on_death = 1 + footstep_type = FOOTSTEP_MOB_SHOE + +/mob/living/simple_animal/hostile/crystal_monster/minion + name = "crystal minion" + desc = "A monster made of crystals similar to the Supermatter ones." + icon = 'icons/mob/simple_human.dmi' + icon_state = "crystal_minion" + icon_living = "crystal_minion" + icon_dead = "crystal_minion" + maxHealth = 40 + health = 40 + speed = 1.5 + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 10 + +/mob/living/simple_animal/hostile/crystal_monster/thug + name = "crystal thug" + desc = "A monster made of crystals similar to the Supermatter ones." + icon = 'icons/mob/simple_human.dmi' + icon_state = "crystal_thug" + icon_living = "crystal_thug" + icon_dead = "crystal_thug" + maxHealth = 50 + health = 50 + speed = 1.3 + harm_intent_damage = 9 + melee_damage_lower = 15 + melee_damage_upper = 20 + +/mob/living/simple_animal/hostile/crystal_monster/recruit + name = "crystal recruit" + desc = "A monster made of crystals similar to the Supermatter ones." + icon = 'icons/mob/simple_human.dmi' + icon_state = "crystal_recruit" + icon_living = "crystal_recruit" + icon_dead = "crystal_recruit" + maxHealth = 65 + health = 65 + speed = 1.2 + harm_intent_damage = 11 + melee_damage_lower = 20 + melee_damage_upper = 35 + +/mob/living/simple_animal/hostile/crystal_monster/killer + name = "crystal killer" + desc = "A monster made of crystals similar to the Supermatter ones." + icon = 'icons/mob/simple_human.dmi' + icon_state = "crystal_killer" + icon_living = "crystal_killer" + icon_dead = "crystal_killer" + maxHealth = 80 + health = 80 + speed = 1.2 + harm_intent_damage = 13 + melee_damage_lower = 30 + melee_damage_upper = 45 + +/mob/living/simple_animal/hostile/crystal_monster/boss + name = "crystal boss" + desc = "A monster made of crystals similar to the Supermatter ones." + icon = 'icons/mob/simple_human.dmi' + icon_state = "crystal_boss" + icon_living = "crystal_boss" + icon_dead = "crystal_boss" + maxHealth = 150 + health = 150 + speed = 1 + harm_intent_damage = 15 + melee_damage_lower = 45 + melee_damage_upper = 65 diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 529239546f4..d0e2f516379 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -1178,6 +1178,14 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) targets_hit = targets_hit.Copy() //Pass by ref begone supermatter_zap(target, new_range, zap_str, zap_flags, targets_hit) +/obj/machinery/power/supermatter_crystal/proc/destabilize(portal_numbers) + var/turf/turf_loc = get_turf(src) + if(!turf_loc) + return + explosion(turf_loc,0,round(portal_numbers/5),round(portal_numbers),1,1,1) + . = new/obj/machinery/destabilized_crystal(turf_loc) + qdel(src) + /obj/overlay/psy icon = 'icons/obj/supermatter.dmi' icon_state = "psy" diff --git a/code/modules/research/designs/tool_designs.dm b/code/modules/research/designs/tool_designs.dm index 9c9a7240658..1b0a48167c9 100644 --- a/code/modules/research/designs/tool_designs.dm +++ b/code/modules/research/designs/tool_designs.dm @@ -113,6 +113,16 @@ category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_SERVICE +/datum/design/crystal_stabilizer + name = "Supermatter Matrix Stabilizer" + desc = "A tool that is used to restore the stability of the Crystal Matrix by injecting it with the anomaly liquid" + id = "crystal_stabilizer" + build_path = /obj/item/crystal_stabilizer + build_type = PROTOLATHE + materials = list(/datum/material/iron = 3000, /datum/material/glass = 4500, /datum/material/silver = 2500) + category = list("Tool Designs") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING + /datum/design/plumbing_rcd_sci name = "Research Plumbing Constructor" id = "plumbing_rcd_sci" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 169091f9d9d..9423cabdef2 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -153,7 +153,7 @@ display_name = "Anomaly Research" description = "Unlock the potential of the mysterious anomalies that appear on station." prereq_ids = list("adv_engi", "practical_bluespace") - design_ids = list("reactive_armour", "anomaly_neutralizer") + design_ids = list("reactive_armour", "anomaly_neutralizer", "crystal_stabilizer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) /datum/techweb_node/high_efficiency diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi index bc10335e5ee07b97f73d804bb8948f296cae82f7..056b998009d9563241ac14a7fd7719ed99ad63ad 100644 GIT binary patch literal 102178 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%0A6ue9uem&0+Au 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 G;Qs@qb`E6# literal 102922 zcmXtg1y~$Su<hXP?iwJtyL*CLAh-rda1z|zA%Ort?h-r%cXti$F2Q|)1>SJqz2CRX z&U8=r?$lIQovJ!bq`ImC1}Z5k000>86lFC50H*Wxjf@Dk@V#kt1y2IKwDrEqTDe-d z*gAc+b#wp#kBq{f6AnR=*x?iB_+)KqMVeKHq$=A|CV?@Wo&8TKnYr@W?MP`6_Rj8q z>4xso7oR=_6nd=t9><$|FYIR@ywj(9U*qXHRvT^CNL1*-a#^mhcq1x~4VTZ<w?*r? zkuI0TH=W4T$1tIfMfxtu+;<>hTyvSaza$fuYKL6#`g_G;4C-PU^#KwsN`LSnr{Qh- zTnYBy_xV4_DQfIlzMzxkmf2cj;Dlljk5D43gl6HL!}CsWP5_7OLU6L2CFf!p*IaJ$ z$3xoDqF>azbdt>59tdJuA;^ir!YhS(1pbKGb!pKJ>iN=n=P(2bVeggjYP_`?&A;ey zYQX6h2Of!A)t1$MxAzEg&ti8wedHAA^Imwj6_KvoEXR5la?0i|1IbLI-)peSQgh$S zc`k0Mk!|j%aZT&vN<95hF@Id~?H!t6Y+-t4*bAeF{@c~79--;460&p^>*eA@)g_3~ zCa-5Dlc-f^milntX9U`+iju?ZqGkY~2Hwd^X?tWG8+rO@=`8s<q&vK8o@B!aW&e{@ z|L4zSP?FqR5oAJa1nu&T2p;My7}`oY_Q9NBZa-AI8w)LbbxG!+D7&a2>5t7RnoLI2 zDoaJS=>^^scLOI)ZSVe0@2<^gWUX^_(7SuDd8?j!US_$j-EoFse?|IHLcqYtU-X=Q zI2YO+xwdn5;{DRL=uG4ezAo00i$q|VBK4&*l4K-FKWi8yFPFh?9FV~FkK^$D;w_6d zb#&HxUMmmA>9J^}8ox&)sxW@(V0>Py&TW7&s%0qylFUE5dwSs5+1Yc}*S(I|rtA;w zpIb~dbafTT$;pWyp4W#R|E^)Wo&|NRPVvAO<Prkl{L`m3=0QtRQ{O41m#x`OMP{X} zA))=x1$8?qXLkvFYGa*6-^yzCN=YEQk7Abo)B0r>@x+ueVOUg%52Re8{hy(9VFL+o z6B$#_CDt_&k;+Yb0+TQOpG!$LmN~61;mz5j%*|#>G$P{S`Uj#LdgkYeHa9ota_oDk z@bPC@p#E+J1qIlEpdVBaMvv>kaW~~_<6r6ge+A^`mzlgXwDey&=`~m)>RPei&7k7q z3KNG~VVEA1H=WF32UR*L1%0|pop2tHFSvNnEn4>28dwn0ufV)zta$VOMZE;o#q`h@ z{LS3%Lq~a+9ak3u#Ns}wL${kf;hUN99Wa2#y#jhXjqgJvji3hrY<v&7V0t?k81K(? z=SOYJ=BZ9khDl%X#;5WE@PW!)cwWAPN5YacUc-n1Mc~y#cZxAHKYxdMHvE%?t)44A zYaBs3KEmKu=q~Z6feh>E(jVKzgPW`$Kcs2t=v3+pi;L;Fxu==4awee^Zh`OfK433J zER$3P^UmZ=eREpgX6D)4w+&y(80CNTTB0_<<yC@(54d_yBBH>n7_9evWb$n}?9>Tv zW4MHI#fQv>LXp{EWFEIe?;G%kpkv_q0k^^NPT@$UR~;Savl<lA=(LGDC(0*-?+2uE zd&1hPK|j1);o13II71-e=GRFGdFL;ePn724a`q6>dwPJH;|#G~!c7|gc_@)Fkt6#N zW_)_io}cn>(*%b<Dcfg(ot>e?p#&Nk>XZ?c`jK6i#^&a&y|MH>_h8j5(f_WG=CS<z z{Ky3WupJi2BK1}j#TjkN_VM{d2;}_!jSJ+=AHe{jp`lFd?EN(s1MvIo92|^5LUuM* zrfPVuOt{M<yGi?~@5ID}f~hGr(Am=?!zt3cb2bTQr~D+)6Dg@gXLlMq=_^1Ayi-R; zT-b#LTwJ*kY&}XbXmZO-R&0>XnmYNf3v!e3;9NKJ_wSO@&xSrmFRvg1h7=1VRj!Zs z{NP1_^d&dzx!ADEX6$~}6Mo|-WPJZ{@Nn?qj=yyTelUP>zZ18={ZdEJx*dXa^URde z1cB-N=kFH;h5Ag9ZcJ$ras~zlhPYhFC77_Adj&fBy|AwN-WdUse<uJuH+&!=DG5HG zO9_2gM7nA|zrCGOKEFn{@vx<dGdgg1_<h`8{qys4Q%y}xWC9{);S>%N{(DMd;s|j1 z-u`~nhh@CP4jCADeKO}IWC2S3kOhobMNg^jHl<G|8*vk%wmoMpr*g1BgYms}3Tmi- zRw+g~gtyy;C_iDVrvr1H><^)P3;&-1qvS7c<Gw+QrtE$sheGF<$+_AVor|^E=@B`^ z8z%FH@THLds2J&O<{5WC)A^O14jk0nMRku2=$f>}nv6q3V$UeJaHOd5^z9Mm378q? zDvhFb8QU-c>Xe`h{mcBk%ZuFE&oDW$3)dgqnSgTgCt*V)BmMSRoS$EA+8kj4W|p$* z!<4!_mkS&+vXLE%HC6I()&5>;j@Fw^)K)0ubL-8J{Oc$F{7la6C0FmbA?q*|$8gm# zQB0(iv7`>y;~K1t8H0A8r_o+VKA>6d|A(VUB^@z`M1rjhW@EI?WbKJQ!@*dxnxyHh znP_NKZo(q1n8jzlO;MO7sQt*8-XO~$-f@IkWjtRx!QDgT;*bcvff2J_NVmZivmSc> z#oDp#?}jU!<N=Gl*k->>bV7==hLb~7#y1&kavY1x@Zb(C$#h|C)EPK<pspF&c#YfA zx`3LMmhkg896+xRu3#hDczHWSK`wMWB+)AXV0jNDWPT4iI0%>9EFK(J>;gq<e!bw$ z<$ZgVfvsgzM^I8S8QEVo`<W(X<f0$z%f(7t)wYSmpC}U@9fDiRHbubn`I@-PFZ?>q zhl~j#t*4{&2Hz^>RgNA{H^~z49Zz-_skg(0O1nBYJgMFb-i9r6URwhSa&ia{LxDeQ zvk@mBj5Rc17+KEofU#H=!UlJwlW|zSfi%7^!~o|9-EHCRsIP4pl{}T;37pOH`DNeP z^6&SfhS#F|v)|yo)*7sSrtTenzG&U}FZ#b9TcQVU<5Ex015GIo`{YUZ`(|Tle9A5^ zzikrDxYNZFY8{Z-&-`#x+$AE@6+UcVo-%%~Y`{?o0B+m=-taSIymo-%+&Ep-Wz`2N zwr;D4sE~l9&*<mZm@=jP005bfj!%y$Acm&TRrKE+-4ouKbY#V=9DRuH_kZq|3!4}t z$~un0uN3V?WV-?nfFf!1>RswvdSWFbrv``B?gFHgsCUtQEYFc!TjuygM06Y+Se~Aq zOw7z%#>@5gM|DFIU*;<j?#KGJ#9d*|PPqU{Ki5OP3$%<Z<Q!j&oX0*``@7gr9TNG* z@jtd&9qQUL2_>1CrfDp&Wtp2&zD8K3NU(d-VV-%U<NfXtS(7)s>=(J5yee_3cc)~F zdC+&eeCKP=ri(l@G(=BBBb5|R<FRM{saiz{lux5Q0RaIr?N6s>&#oQ4^=}+M#v}Z6 zH@;rM7BTq8dAm96)i-(HhSnd~mu!iEJ_?<ntM%$XaIHF5fuDJ*0h?Ej`VFK&BfI*8 zYM<KZ#~dG=g6`UjzJXlz>+qBYbgMMGni8QT+uxhJY{Ak~>z3%)*t*axpUZdC9sd5H zIAqFZ>v6g!ad?_0q`mz2<_%i6vTf??22!~!IL&*Jug})008W=3Mdb|sVDR0;taW+g zC3ctRadI%sKX4H`rrC7f@J$~6o;=wO8?U~;9vu)wkK>sF!n>Rq9{Xe!PW;>}=MN=4 zK=170d6#%{O7*Z%&u?Mk8ovA;*#wblKzt-};Ta8sf>hYOkpd>b6{YM#d$?t=QEn+i zW}utWd&^e#;m>%xGKX{TX{G^8L^{Fls#prjuD6>x-NW@^a1?62H!C;y4;W>!jlvhN z(h-ZClfZQ`ACH0MRC@0WmSAflbb=cs$jF^HGC`NX+LMICW7))W=oNNf8qB-<b&tE3 zMoxI~%S(riS?d>CW{JLtO|B5s%HMJUy{Nu6SiJN>OVyV@WAmcc2fx$7R3~!AQHUUx zCS{`j+uStUx+k#C>~?2V-G(%*BY%n(^8fIG5LJhCG(9oE7b$UbT^HurFZcdFClCTm zR+&fu0WB>e4gT9bRB&|6Bpc)4+ANL}JA41Z{{sK+ryBwh5s~Y1Zz{t38tZi$TpY@o z)90A-BRx*X<Ps==jmwSf^6`k(qb--PsYw?mX9SvwD=Cb3*?n|sXyN!Q?o&}eR^C&* zee$j;tL-^6WP)59S!@TrKI_;1IA8Y9q3oZZ+l|n1c(G#DDf~&^ym@0NBr7k^y|>x{ zIDzsKBb4$o0vITNKa7x`64!+I5AUGtlr~uis-0~=N%X9?Vf|S`O?4!)Abn06!i#9} zri$i~d<(XLmMbq5CUyDZpd3Y=z_MpxqM3HE4~}q8@{lTQ0y7i)WUUl3X?wSxDHxmD z1%ph99|}6UYqa?NIJR+N1Rz5ag+|(a3n`#+LA~7fkxn_2Q`N~&sUE2ChX=H1paV(n zo5GQtMmQ2tBAHtEa58Jq=SBW*0nbZIcJ%Fe6Muq27LSQ`8OyHLkBVw)j=FFlpn8>{ zhHS!R$Mv+5UWcF9?XgJjiISQa7O-+#dA?qQmV_Etz>Oy^E>7sUGBAMjV^~=+=u<j! z$d8Id_GqdXaxV;5gGSxS<GGZ3HyrLxARv7vY+GB^r)<o5_2jt?Z|R6K8GbA*eWt%x zo<@r7367CRD1IB1*HXlKVB&vH?q|Uu?nV9_+ywbgEg*OOkW2ci!Fm8``Oe}cQaK6V zcsFRHZ(}!K2U=+kHuzNgN&pw9Z5#DzcxmOV{G*$JBwEW6>o305grMNYC@e7iTqC+1 z9ndC8gXckA;$2?auBc-H-R$?2lyDtyBKM)I?QPZ7+_GDCd1GVBKl*HI`YpI)^|u)i z&GeF3X>(9Sy?>1m0gBI(&KfwPt5zAs42Tjy+`wO>Fodg5b&G2R&zJ}a9D*^Kbcn2? zb{CB>Xjs8DuDm!|^Pd*+lvY!Wy1=!n+|L&Ddfv_kkhu>y*S8+<19_3uz`;+Hgt8w~ z9#1T)9yUZwbt0f)^hx%#IP5T%2F)Vn&*1xSDbGi5AgouQnUp90WrEnmOyXrFt;XSq z1C?L@fqdDAh22iGcXbsS=eHLwJ2_z<MV%epew#hGA*()`WcR4j%hA(|*lsUPV|FTf zxe~RTQH}qLH-dybpkRKDAE(1{{bS&K_6rM;qh2VL`#yO81FJ&!il-Peni7<3u2OdT zi(`+|1Jdcw>!szq^K==8M6>lSOMvrj{Bi^8#xItE$$rwr(~Z-ZP&fJ@&_7s&@y~VY z=*EG)*gS$jC^H7*!y_gGI8I9Oc+owgpg3!wRIA**!}c#j^nm@+9~6V<E2<3PZ>Wc* z`y#lx?6Z+V5&&_GJmmh~c?g+Fc*rqGRV66*us&eU9{>b*k(A+n!${8FV(B+bP1O;L zD6~GOH1hwa(Hl0tfG$vq@z0R1k$a;@W}JGP5JwrxH0RI}(zp`~+Q$tV>kWpw!0`pv znO(LZR8`}(Sbo~UJE)BX>sJ}&F301R-)c5wpriYmvBBW$iTEZ|SEZZt2YZm+qIVL# z5&XO6g?prIO0|i?<)3U@Dc8FsaVb=n)csE{kgJa|5wV-3k4T@C`~L8~?A@*lEKrUJ zv?2l-$YKrVO-%nIOCx)XWJeE-yN=(8K(*zSyvF@~qvy7;d~g3o3tq9xFdXpQ{_Kga z-<%~<&xjXzx`XoUD<*<|*%?!sf$ZnL#rt~YUhL6c_#Ls*%dG&=sl-vUn7#BD02Gy# zWzEgQYo%HY+4rEqh!~&m7F5sEb9yWnX0}~QMmOr$??!1L5J-+%w)pwQMVIfypW8lR z?N5@L|3&J;Hslzt^PI(-zl0(d8LFMX-yl>3V<($Yp2e4qB*E7DBW}tJT<hPfQ>l!< zhz60^f^*~Tx9e{T9vkS;eeK9V8C!PK5SHA@^@UQQ-CaCqzlL@h%`Rks@~sxmaVb&% z-81MgR=C<L@}vhM|D+mIv%#g2gn`Q#z1-_Y>=vyj!4*jW07$DS`hKL2OF)#&J9&*Q zc*-+G8evR{VSzGZU#v$p%T)4_2~|48Q!*Y@g*fuA3&##K%2X}_Ir%pY6Atra>Mw3E z?e87w+xq*ZDPL~MK8;0lY!75lppKj98U%wHA67L@_M;nCc92|df1l1&68m)~I&%y4 zU+i6QJVmsJbq!PV^HlR+D|TsnSr=|)Ii>fIm(4LA9v<kxz6<bCFzKY2%G#m74upYQ z$}X7JdDUz5Xw2X)o8E_;@<v7mhP=x9IaxS}F%3bn*_4^sDQaCWR<(5FmwEQ%rMhUm zzSGMFGUS(Av`D>2|NRY{QHwT;o!k$kF?sJ5d|X<I<JFGC)#8ZqOQs16a_4pge<EW> z{=#)C=c@~?aqSH}o7k-D&GoRK7XoZ7l-L3qjIsH}cPqjT6O1o;-Og4}6>Qm}m?@S$ z0>w_APmn=_4Oz2baXPXU-F~ETSWAgg%+?p}kP?i0diN#r{#ccnNgJQTurVYjNAlD= zTigNiynqrWVeqE~<+rWwR`51b!@2+H%Dc(Ydx^D|T2qwf{O~^P&|<QzkJr==>!VWZ z0qQI5|G^c$P}{97rX|oY*-%q@?%;6u&k_**aHn%nl~3u7H$Q|PDo@KLpdHPbMwhYp z`R(A~;`3q`{5R&2H~YbK5zjS;xp8=LS|A`ZlT3^?%&>`mG-i^@Up(6Vc__{`J(>zI zlt_r#QM-i!5aAzOA5Rd{a3=PP=hgJ<NpaX}fxf*4ODq5{_nxbk4=px<hWe^_z$wx8 zH3~SWyT2Q4kh7Vh;^##TMJVs-x@$(4r$gt9bvmO9ua}<iG;DD@kp@jXDjHhTRp<^C zp$O{tU?i9IQi#U$_2?I)J;!-CAHN><(M%jHM+yGMhP-w@I0vstx^7Ac<Ft}~3&r8H zH9l3Ip_)^P-^cy4YfM4y4)k5GAh5B%CUmI>Y4z-cD6ENR>jD~P6tsA`fTy;7kI_=? zz5hY<w)by_!o$ib_h~8!MdWS-?+t&wH@zFL@BqK@wKvE)wd%GL>4qP&H4uK!jDx>t z<h7Tx>X(!)(Qku!B`B!`z4oE0zRw18Njk?=LG3WPE8g#DM4py<v|#%CDQ#_SZ9Wv5 zDs}h`4i1_&)A`|p%gfTzlGEVfMy8e-0qi%mJKo$Z1pv^?^3}-cBn11HKcMlyxYkkM zp#u)q0{LBC^Sx+Ij@4p8l$HY-!Ia9KKgP(oB-b94z25p@6A{hdny>bDJU_wQc?K9p zy-63SAL+O|kfY_5KsYgObsS}isT2&P&7Uq1Nqv5cjhigmm4k#=eg5RmDajuC+uwhs z)tTZhmc+_DAG`6Z5W#8I)8v9(xY#46nc}q~J|SUVbv1UdH0;Ipf9us>_6ITq`02gq z$1~a@`ag*@df)aGj+6#n3h?v0LVeVq`}_CUuNsbEe%m(u%cWSPTH-c9_lh0kP$d2A z{H)8rI&p8}k7#SdDYS2LR_8~EDs&XK5h}3IFK)exjb~6oq}Xva;r#6?NVmhQ6_+)G zt;O9TbT7Zu=}v=|W1BoBBRYAgZ#BK~93xk%YRqME>yM?7pAkV|1rFC_a>>Tid_|CR zDXL4g?Z7<HjtGnzT?#kEM^R#+TH75@mA?-R=OzS{$FHzj!^T=L6DRJDyOO(txkPC& zV&}uKhdK`#d}8P0wxqpC+3C;vrxETF$Iu8(KW-_HV~W3IzRs%G6hSZrj<o=jPGU?b zgujBwInm(?{h8)kZ&gR;sy3;J`%z3RWtj{!Ppa><5#a!Xm6buw%t{4`5H<$~`utte z{OvH@X~X#I7;<zHZg?a$6B()J`3$zR*7{e+H<c+@$+ijln#M>#^kGjBBK9b@qlwg8 z-PAaBFyLhn<sAlRI<WQp)b*jY?LsE$ms0g!UrOkvz?aDsyR`*&iB8mh36r-p(&y=~ zR<<2#PQ_j88X%4r;9lH$ws-~uz^!UGqELU<V|~|_MC(BdJX0kU`K>wqSa7-{=cGn9 z5MPTczt#>>xE(#(vS`$fHf`{-`SK;VVxG3JKQTSV<=@O(^k^$N0WK~a?oxb-?3S2K zO|}&y^3Br^Sh}V4`6KRW9oi<b@6n+6d(cWv1COSgL;M#C#xB9(9m6y>1q(_LJK!ht znfCXnNol2G^pAhP3R)3+H2?d^`2D&g**f|b{;@-`%e72gnx|&d4n}V(pX2%VlX>ua zqql$FFiV|4PMYQ%2>l*vy18%T1M)Z?&oZc5nD7tk-ljBR_$+%x1s7LsjtLN2ymYZG zK(mQ*H8bgEMoK41CW~{CyWo(Vw^B5QqXOQ4i?e&4h+gn_LR<5(;M&KLL#K=>?CXn2 zzk&tkS~fcXYKL(&J$=KNh_2x8$;n~D>D)0{LIjTOHN;ojGRUT$ztQ~D!C6}G`^{fF zzVTZrDk=3qA=sCLbnywG(|2I$S*D_rnohB<_MA7Hd@QSIkki*EeP|roSk@G%yQyCh z5+jhf`ZD?D@m41%J{=u22qhH_yZ>yiDti<kF45PXA&P3YLM#3+PlBH$a6`{jH|tk5 zZ2^EJO#k#M777b=9(%^)a)e@?cD(p?LE7-eQ^n3STpmA2wLrhNOhSDu3yY<h6SqN) z;v`1bYkb1jW%u=c`fgSdnv!=CBABZVImNdm{tP<bYasz*^jBO|z%BH9+I#QYM_3a$ z;DeL7{7QIdCpCIBMW|7WTi4`o-0&7_6YyyU)wld?)~sADhDJt4uIvzt`|B=0VJ4c9 zm6g$abL&3|GQ6%4sQ((yZ`M2L!T&heqgJyP@r77D6~lhf{`zNVrv?MkuyC`>yjgi= z*yti$*guynw&czw^B&%waVhpFHXw&hL&~6E6>u&Y4H#dD8OZV={kOaxN$UsXv{&?7 zs8w6U^Fo7`sNwep!m-l{IVwN?gmtg_s9qMGqkcVbh-Z@fv2QPXl&KEM6f3C+2Jm^j zRj`CVBFGZIAm~>~#Q<|*r^cw3mU`!5=0y#g#=`!>Eo#MZnTme9!$ctrE8|Rc;g0LK z#SdCl+7;~5da|s)c{Bx|BO;Kc?N8VdG0~;Kr|Gcz0nT(}*MtoB;-a2PCC)+?Jyf8> z4KxB-UYFwRB%b=D-tjVF$bYvt3(q&3=N_<773R{nC-<pDV1NOE->W|q=Gx#am_*oX z&F}vT`tE5Jm|*n#TF7tuyr01Bxw@zFbK*>ksgNGoFXoZ<{kf+1Xb#&hnD7?aU%@Rl zBDSk7k*a%*Ld1ECN-JRpKbS|w4TMS&-5<dx>+=Bz;P4hPUHrT<Np^8}Ghy+ZH|ue* z=_#1)qJi(wj;Kh#M(n+AxzboF9ne9w!>s_1h$zL7xZSTpK#xn-#TT%CszlFEF44E} z$N&cntk1f2^eA(F-3<n_Y9telIxB%|erCj6F6iSg4?Mh~757-#8a@#*2JmFYtIQt8 z!>v8bLuihov9B4FU)h`W^Y4S3CZHsFR{LufkXtmfVEWGp&WTGKk5*5c|NccGxix%x zLj_Jp-X4c*cl*WL!+pZ)hw;|nw<cIgNNnMG0*|2jBl_3=JqPRH$cPAP9OIiorn>!* z=%~q{fi<&(a^+6my*R4GyQdnw(X7=kir_QL%cpXv3pPVWKKyN@Tj?VOPzyhp;rS_z z&}jHQ3$4CIa+Q^p#SXY>U0HqHC}mu<DuQe&*fY(4pnW5^z|I-9u%NfKIj;J&yDqU# zSy7)SSI{+U=6*2_ujVr9NB@5I%|gqg|J0;<_&-!Q@{_=&WKXJbUrQU#YLux$2fO#x z_wi2@#;8<M+%>Pssjn&iE>Bf@u6fGU&BTICN$BK)*z=V}aKQ0u4Gy?8ogY8IVETB& z>}#<{B?rZtZ~Y;$1Ys{_27ktOR!0QIRbjnROB!7&29*EnOP8Y{M#9j}`RxbEe2pGc zn=v_I_i=Qo<<(n=Q6>cdBr>RUKL=No^?v=?@war6T+Dz-zmUrv^Ct-d?6u7mss@7T zsguYSjrI9|Do33>63_7xh<XOeEFSut%mF@=kM6vCW`^5Hc~Mk=XwBPnpR2wBhE{;H z@&Zm4!mXFmp*{1}#$8zcnAbAEiX#Cvfe#`QlnR~uvzdvK6~aNe_|ZBteUt=H|HUHn zEffYbPPL@0A~0WU89~p;AiAgsF(fn|w-vp4#L<sRtWN|_bSOl?UHac1=4UK`pVM~+ zy{w?S#p9N&`wVfG<d@luEtmh)XQ{q;EYbwbPWo|nu`5#c!aw8Uu`#4H`pmpaQ0QXL z>gL(CS3qoKaFZR2&m{Hz>^O^T<^xtW*SFV9-fTNdb<M;2$<p+J@PehYUT&@~!=F!C zwu`qp+u=+N(weucA`RVBJRvQ2!t=-<AY~yc;-;8a)e*OAp{ODdv5UV6F}m4L(eIE$ z3f*f?vzMkmk^$E?R_Lx%8v?g(ZkSF^cJfAS>A}ff#<-DUX=$X?h|MD$e;^e?8vW;e z#HI*?OOqtOnz(b%%p<Af%*|=tPL@KYf)O|W&6e5U4i#u-2(herm6)Hq>jP)-Tx2HE zhMC5LL&Dg?*ZF0Tq8H~;rnCq!a0DQC6!B-wd+eT>i`jpYztW4FbA-<rK$Dh5;k&0F z2eC(v2v7sR)7(S&h}{1KF0rQ30RKLJ;q+QT{{*Vk&dvS{sz)t`vr%Shd4;)_u0fAy zfPO5YL*O_F1tNyk`eqEFG0j<HZpWBR#ZAajD5PkEcZ~<i>cEOD{+G+EDGI+XcqiR# zs>u@jmiNt*udw@vc!iMESvS7<GtPf4JKy$(e{u}2ytOBrzpa1KfUu!})kTv8u&D5# zSj#;27uKE`#}&rW73X8?;dl1fiSsMlT-tS&;#>R6!XoO{C1JtA=&uTtu$psnF%Xy0 z$@)Bkd%0tQ<wW_N7<#g(`IpH7wR=3LsD?xpca9AEsvU-Z@vDz$I-J{d!MhA>wx{Lw zgiN||=^67Y_vQFJ9;$oW>E}_%`0mphKTPqPks1}2(_bs@7yH3Y1E2tci(j5mfsM=E zk%d220)I&7=$wBnbaqKCgp4L-pFLgN-`7WWt!J@)`-V7<S33ux${s2Cn^!sB`7?UK zIL8zBpIJ@*<m6<82}gmxvML+@OJ==0VkTi{SP&H$X$H$!Au{@bcvsTeE-ar53j;yo z>wm2+oDHEbzr)yEbht&v2ZKH1G`Y;iXAgvlU37jQv{H542|Jg6r`cb@xxDbM!fR#& zkGAya;8t%HcK4UN_LVy<R~BOF{*McgNzin!*iq1+M`<o?U9uN4PQL8sk5M7d^5BvB z#;+YP_#!%9^4A4V?UVSmZkf|1*HvzZIp`2FDCPhOilyh^^_<*XoSs5`US3{Wv8%KL zXo^-9ctASMQ)LF)8ctR>{II^bt$HKXHn08Y)LgAvNn2!i|JlI)8Gjzn@P@?pXBwxE zjoHykEFyPVB`+bYi{_YI_M25Gg9>WhSj`r}Z~P=%5u9PDg=exu5UT^*g#?tG-V_Ja z{5gpqUeBTkOY<^hQU5pw2LuE@zo&Km9nN=Zq?4eU^!%MzFhYezVS7Bz{}F@7c?n(9 zDfmf-;pfnIueS)lg1$06(IM1=@snyvwJo1MxsY=g?aO$D-KQj&z~`XL^kond!4OJZ zk;bt7eZlY&b697t|NL}!bE07BA_Ua0H26bEA0DFI*LmS{b928h*PE`fs>1!K9Wk{Y zh$|V(q-zzhi(DrMjmr%2#^_SA-8!57>4@W>O0Q~GXI8=`V1pKW?TFRAfwR^P&)Cm` zEQrqBw7l{a1i?=jj_QQWERuMV5M9ibsYRKinLrB1$H9o@{CL`SkQJ^s)yEvAXLxPE z)Nx~#ZM}O{!B!K~+<83PORZQm=3eWJ#=GND#Yw~~y@Red<lbx!Vzx6mr1W7klh2Ph z66H!}T*W!4axC{c-jYEzT?&c>pRa8cboG|#JD8{k62L#3GI<)m*aK6#k?@Mgutf<~ z52=P&?IQg}Ty~IS5XI2F#0EGLM`(Tysf1`K`b8a=*TMs!6AB!GXo3kE8LWw(UR$1s z1+D;ma6Gjds~;|y1=>6oJU>BTHQd0=RNM|wSj(`zTs4G)q>3m&#v|w)$1Rtia@`&7 zTDtuQ*e73sKwPk{q)EDarY#Q9Mul#6@1Bu$=ek-jc3)>+F1n}0A#tnkL;f#ii;L7> z+!)~T_EUj{9&ZxPSTZx)$O|Z|1?O{A@fRDiC^bKJFM*i~E$_j7D*GOA-d9O7)JKHA z3JXpK$zpE?Wre?P&h!!!;3-z^?40b%BrL1E)N<S(P?}eP__y}%MWbV!<Ako0L%oYK z;%?ni`TSB3ZX~`yIk#*ak^DSUm+5(5rI}?=Lk=dYHVV&e6P-h%)*}{(MH|e8z%Cja zA$31yzh}50mD@)w<glrnf$ww*vYW-oXjFZmXEPr!Htcm}Nq&78k7pfJ*DZRjK9j#e z=!J8)?k@oXhn)3NUuoCddc=suQ!vl}r!D%VQ8_j4_S;-QWx#~Bon7HV%G&5?^dGJo zIcA!?#pyL)>(2pK4ZTh7Q8?}BB**ri*?PN`*SCK>I+#^R{!X<^p!!>%;G{P+G(JAu z(rH5=XQe5csU>DLy*}Qh&9am1U2A&+3NzJuusN|}=2x&MDF^^^W=MKo1E1umTZfiK zz$=MoD(dAwp0vghgG5f7n>vq|4UP{dZf$5s-Q(kNyu2$yLkiaMkB-~L^N7InO@3Y; zGEh)dq<?eg7&-sL*Ihb(3po1s4;c^?6uchpSzm^NHn#hBh=%OuzYyVKU@!=&OO;ki z#)3{;w`wbPfD!wf6$U?JHo-|lBdZxcOaON#WlU`BkaX}V`>~gY`Q^(;Giz&wt?g|g z=iFEhs?yTZn0se`d_QrpscT=CX+cLlFE1~mPL`9IIqKZ=zWyTR-9Pl^6PTicf`q|A z#nYBLxd;%#6o9-He*W9jV1J^#&F>d7k+B$XTgUN(5y;wP=pJV8aQW%k0&A7Su4B+S zXAx{17$DFct1kcOt5Y)Rf20flwPU*Rn-V{ti%Hr0;x#y~$J^$Kp<(rgCQ4c<Nna9j z=#^E;kzDj!oA_G&v_79&tc_&M=h{RH@X<kN7f*Q;byw$cVZO7!FH`X$y*GWft{_XJ zY*w8K9~m9J_x5DDWheCOPYG&j0GM1^vFkoNJdE7fFzvdB$ua5hqZbt=2iY2sn|YI5 zbtY3z;`0%X4%5q>p$v=wk2Pun5oW)EIEtQwseGEmp_~t8TwpB}{3<#Y7PP*;%%iB& z57eRr9oN@ifpXvi;ho*g>@1GByQL*PNZ&ZU-CYYUDdC=>rRKy2&bxomujrk`5+&2a z0I;xd8dfDI2iKIjMeR6ox442!N~6740I`FKitpp!UhgQRt?tN`A(%p8y7%AY4cX?l zKGzU}C-Uf2aVfeLxKAWLp0mu{=8$uKDA>HCis?bkZs<ftN=lk~vfKa%?6?SFQt=y| zT`$yFBs7H3N6?7-_!VkKHa80s$I8#l%>`k@N+XMkiOFs6(@98V<5B;o95$7&00(q; zcXK+d2wGZMMaspNm$Sx@31FI;9cy}MLxB(YS63}rVby<)a&~uj;Z4ybi~mYh&C_vm zCg4f68OMWyz+IS@^ziUN)<^O28~&b^71!A*d2r)(@KqQjaz*q{AQ_#82eA{;6Rw}d zb~M;S#8zIy3f_2_(cJ(QL!;fQ)6M4&G8S4$3Q?W*)*}~WU;b%)C>?;?p4&cu8KiL| zPTCsXPrYxaRKR4~JY)`^8KMLX5HT>eeg=EySIsvtNN_qv^nt%X(9Ui_LVRp&%#;}M z&t04u@xszlUQG=S$S%t}hYJV}hTC`69JJ&P2@UNU8&lym7H3k^(<A;}Tf2Ph?&NeZ zeItAV<K^MOsqGVnNikeVJ$?9f^6)DV0NxL%0nxOeJYCmDQaCIQCUf&HwI=&@a}Ork zx@pa8tnWz6JaXE`)a;1`%-pILOb?$2R8sBh9y^>4aW5U#LYn{Jv#h6Ke6xKEp7n+* zrIbryi9}XJLh2e+&<8UY`unC-VUZ%)>_`xC6@*~v6t-6>&=Q0^ejV^zVrE6TyR%A~ z?${`j?^at83o6=eF5tqe*yF>gdF#Lc;vSFotcH!)K(*7Rw9onN@@pAhOAAjmyjDgH zy(a+26=4rk@{AAEU<U_>*TU#rl?lhMyT!@LPIXEF0fF)5<9AK&rD(kT{K=()>F5l1 zundTvUHQL=@q$}9hnI1vd>dg2tP|xZqVu7z$N8-kDt4wW91-JKz@LjT#fd<DqmY<u za#f%lW_Ti;@4ggc53)O|_MwIb<i>Pl+?Q(cqlAVW{*7!eiu+>7VoV;pPN|dQ@5Jfn ztsNLewCF(Hln8gt_f0WX+(?}(j*2g8;m=oZLNYdi^RF!!7QqmWeA#;*^$(@twKFid z24uYaeECI-n7vILyjO@@1A^2?58t?KR1&^D3H!ysfo(y8cXBGV6r|~CG&OaB;2^7? zTZM(o`u~D3s@kI(R(Pse^59+fM!PB_a9ek?0$*Dz3fc3VubfRjk<Q<|Gf`35x`my* z5F4(on?d+oM{07m8g0K^PxJK%k66g1poAaj1la*N%{M4^%k>ywFIt`c*iVtV*rg?s zuV2vB4cy3<e#}`Nf&fKN=+PElp*MmQIU6J$p~OXW4KJ$6{98$b=osV$fm{#0KMWu_ z2oxebha(A?8QB228=yo%c1zi1dPjL57O<qrH-H9!EF<~&ws~fLkac7V(uh<VXaCXK zD2cq}pE3XXDm<7;ZtA3+S5%5JIZLhhtMg)e0Eb=&XeOQE<?Grg2?4E(4x1RBbZ(U< z%GMqd85yE{K2DRBN(uiQ2-SQi*uDf!*@V2>^1bl(_k}r7{8=Zd%4C8LA045nuPRR8 zoME)qLtxn7dw6?W952-5iM?11#JyQtTO;1cgV&mHAv#P;sA5*I(Bg5a<1Yylq}4Vw z90kqFroXYzl=;)kL^Ow+?WLUV_q4R(5^d&%rFyRipR;)Epvy~_vQWB`+0QW~Jcy3= zOCdPvDSB<s3U<ap4gB`qAUCC%-ed0|8EF0=at#0U4Zq_2a?Zjy+&qbH!I8bJ$^e0= zD_3G=L)W){f<8A&@{amrelQujb`J|15XblP|M*3wzgJ12izIIigR9td41Ce;par|i zZt|#%{jZIl5g7V=KBu7EW3vAk&OFY~&*Z)@mXVf*^${PDxgRmH*z68v^1uHA@ktI3 z34zxJ4a7Wh2lc8w!K1a-R@W!V?@IsFjn+dn#U9yHX8t=a9zctACF0<&`}R%!r>@lD zW|R|0&hKBSql~4K?f$4*Manp#De-T$iX<PO-*RRb<bi#g#sSkk1ivnsXXa)%SNfv! zo-s2rGFa#Q-5E^3BJE|ZT~PU9uRg*poDQ6|KVoW@&V)=13>44*TOTOq!_x#8eu3uO z_Q%r}_HR9IAAw+N_D`b-#d&$KQU$oG0vum&T#Um0j-i1hq>_@7jd~3!LM@;BoGdEe zkAENYa$+TJLdr3i8>gnQcu?j1Jv>L$i)=-h*m#F|7eN}5RPF&*GiKJpmjA!wk40(D zJ*BnQ|LyEp%F4-^^@L%R{QA}19g2oSKoANxCT@q+=kDCv8@9P&+>Vdi)Svy`vpPGD zDVwj%-KmF&(bU~wB#12L=QShh%+98ATSdL|jMzkop%6)awP!jyIt$fia7D`h1^xQ> zSzCKv^3*bZ$;<geUh%<v6%~o_S0+HO{N?=IDI`2RA9U?`9+Daw8od(}STI!`1F=th z{QTzAJ44lVb)gj%Y@p{edn>Pw46;(=l{1A2zJ2?~#KI!u=_xclJq<EZ|4{+pfx5AA z-0$DqpjS8hH&bf#E7+kA#&~Ru5y%mk={BB@5chp>3c@FOtIF>Z1^PbNfbDX}BuRFQ z?Lfp(c>Qm(3#8HC-9r8+E}!t*$!|DYU*b2kG#`R)yg$v}2dT1+@;T+@=q;|65j0x` z`OS>NX?E{^n)+4m62!m3MRD67tmgfN(_z#^``NR%uNT`|yG!RZ<Ts)asX_CujpyVY zkM%gR`2gtSBk${AB&TQK)kMUYZ}>{WqHWfw2s%J-&xyW_fss1bk(h|*-a2WN3(ABZ z1Vd{RRXs1UQN1SPMcaEzI)+3gv9TCw>FG^1lDRF?_jhXB6tkcCm|0k+I{c4(LVo>X zZftCf(0@q^&MPTFuB@!gP(cla#l*yH^tpE_{+BZX+X(V)67d+~sA7Noz*S8srwK?J z0ckY@YR~4s{Xt?*-g!236At!|YJJYODwrR3&_um~?>mUwzABrQQ)hZ;@FYrH|G_px zS;$?fE2~~8tN>YSNWJs@9{FZDWepDWOg@h%4T_420rL5Q4GjW65)--Xmv}*7!Mb*t z&O|%7UtF8b=1UlzP0P!h<m09jXB~zkC@g5Y-Q*=o__-5$f8`8?ID^(oCVvWf4x%x6 zK@}?>9Erzhezw-OkV)6`Ptf~ymGvm0Q&JQtsH(<oz-;(jM90S3H#~C~+MK}Py@xN| zpP!rzC@NxrZ+)h8s5C+dIJw=9M}gf4QCGy-Nr4H~ujs$!6#+UeauFAnmtD8={~pSg z`h&k-HRR~%s753lL+qnyK^Hx=fCYA;kX@bG4`hlor8EH_@m@t`j<zmO;|%7>;cX}$ zHJP_lUlTjk5qh!;5~EB%ozeZtqbNBDJL<JDhD){kxxSLCv-*jvKA*!l-<kW{fno(O zih2KS{NFod?O(34r7;$e`t#6_iXhDS9&L~UnD#j0;^HP`WW>1ckJAVVk)WWUWMCVu zG{c*jnFTGGji2r9^`lU})apU;!H^w{SKE0JsEo}ynZ+sNF{dru<IuftkGpy!@#JtM z072J1beTTKi7c^K`Q-;+6BAIyV{vc^LZ<QY$U@=mAy(WU!*A4rH$&xRWZ=@$7g;3* z<}0_%vEShGUk6hqDq0|f2EDn+e;rWyT*^5+I~)1o#RpUW<<HuENm*IXWUh?JEWy(5 zG$|oPSZ}W^E0}%)0`MrGQ!^HF43oSM*PmaT(W43da1rgbOB+MvdZj_#DH$|ux<t?@ z9d`~~ycWzQwQ%)Y+R##E7Jn_@>^a?OI$1b^Zj`a!{Nf|*ZnMiSnlvMv94O?-+yrDa zG&&aD%8>Vk-5?De0Pq-9Wep9<L2_|eW22yQhT!+Qqn&r4%PKc)(&WVX4FdPu+gpY+ z^NVzgt{{Z-ySstD3MHqFP8j7>PMA80j`)en;Tr1+N)1wpC~(DczDm$qcemu}-uLwi zBuw&7aKOgdSv&$7A@Z=oUw@eL>d6AClUWG~PJ@Vx&XN+QJZ)w+RhQf##jb3eVNP^W zQBim@EM6jsI{jFyk>t8ke`a;_z^H7`Ck})9a*V1sUG*XCXd5|F!2p1mk8?C%g#;un z3eLgq8iJ4yoz3@hhM%U(@f@Z;{gs-mEGmggLk0@TzLa#Ek<A)HxdC}MLgGgppl9v` zYNKrKK|G6YJN0W{iM@~7C}~a>W81_<Vlt1<a>$-msrIA|?~26f_CUNV$=j8c6(?}1 zo$AHP!~N{6<s7>g2_l9jpRakJnRSPtIJvs^fT4!7^ARq%KO%bEz{DgT)Xfbr%6jbz zLBRvB-1?Lavmkt+{Dj5^>`52TAJP1LuOceeWEl7F-{;eo1mhh23Vs~ZG~3-fy%#7e zr;3V7=C5e>6z%^{d#C})DXk#$4*)ngH~>lcWJq9jQm{)q*tAghg$N`@Xc*ET#|$P) z_(+144F1EdZSMfk>)VS;2HcE;EuXyp5q#Woztc>0(lmg;(&Kl$d0l@LR|S+gV0AKr zB-|R)zBH}HakxzVn#hNho0T<YG+Tm-G!_xuZnIOb2CB)C%go`|3?!i1I2FWJy=eJs zRM{pKA7qOEI>)N``igxOrnsv{8(ROUoGnffP%6Mo$b__uPYM!}cZXxv10L@0X+XNN z<l{|tN{aOlrj}xJMV`zIao;p0Z-$f+HdOKxKYIs<{=>h;D&qnjRh3|#G4TGdI9m{> zysRuZJDaNV>Idcdk^fxz$JJb0IHlW9R#qR&UqEH(nV5*bdPqx4JO8UD@r{{0Zv@t3 z?^v$#2Ob_COf{{g3diKYKscVs=hs<4S^^VO{F|yUiBoyT?o{spip+JbS4{z7fvd9z zD7A<<ztkFfNojAZq~N&6Cu31bVamY<4JI32QgRVD^u@)+m7baJNC}ylV;Q2JxL~Rw z=)Ab7sD87!I>}$d=2=9l`0pn8_&;oJZG#^f$S4?o+e#_(xmw4GKYoB{M^h8mCKY&T z&DxqN)oQ$3^M=V$S*k56D&nW41we>EXg!`$;~}vMLm-9f_Yu71wN_6t@RnU$?t|oy z)>~I#zUo5*9FR>F2dNF4f5Z-!;7pRGe@{(~0FB2uT`gj3YpbAfTMfx~4LYa8_x#e* zA!o1%rnp}O{H9&@cCe@tUR8aYVRWx~9m0bh8aMVOUV@c&jv4CX;77E5HUw?~xN<po zYe(E~xe}X4hlLH0l94$dFL3el-`ZIrdQrHlb0l1*dy`6E7)ZOgaEm`2&?y#bW(YdN z7OQ3Aj*)F!I5i$JV<laIrZwSxA><%G9<<Uc7Flx9gfOOL>j41(6Fw>)4*XJ;e>>zY zKB~iF-YG5U$-#iOy4J$l09Ts&=ljir!7$$`NXLK#gb2_IM90EXkdy=%X|LOxqf=9f zL1N-Bm5+cOXz#zFNuR5qA9YRpJv+vkoEEEQN-HZX7kf6d27ugRuD%HzG<o>$ItV$K zrOvIcPFVJLzGIkbHiFEvv$D#1?eR4dX7>c)1g387N35)r1zk=du8H0;*juV)Lr?)z z%5eFCJTGQc_pM^%Vm;`|CMZK}urRzwxdE0du(=p}GC(v?*^+Vw^J`WvNUhs*Gn6Qz zrU)@MHkOzeKg4;vA18o->fgnb{5j-eI|DhEOdt*&9W`ir0I9vbUF>%kxKr#s6&2pI zNLR*7D3LLCx#7Q~qs^@?*d}E}Do01Rk6CG?<l;WW2nYz|9qK;#f7oH+;7|a3eEf~8 z35kIw*Zqy{Z8-4CK`U+$+gy8)GgDIs<i?)S#ft{P1O^gwnTNdFb}W4koI~{Jjldzs zCT3E6YH4nCvS^NrivyjLjD5x7Z-Z=B|8ZI9@W{yKzpWqzN>6xzg#iWzM(n{t&(JUi z0`b73As6%F9nTaQczS2>#|9_MV=FRi(rIHJjzH>Rd29X!)OeK;4smhHJ}{@WcX%0f zPJ?j|EG#CUX8FSC<iG1^$gA=&GK*?Q-AVqP{RD+3WO<I!)2S%Rh`XG?hVI%$*1}0b zw4Q$s3w~M&Sp<M*{-6KIbDce<k+C`2<6q4dhD?qbvE-56;Hw(*^0Twjen^6*LKg<W z=tkW!$t7};;NNK>XA|Sqf-=q79hd}z?{qs_VP+3Q(z{SnQL%6E)}Z~K<KN-8;%;F- zF^`lqVtIak&AaJ{wFh0)t$GE8Wc+pqH5AEqX+#vUzK^$?;3PY9`FL=D*r88P8k(9x zpmWI2&4mG>c2J5yCttfIm|Ei`jzz{o>j~(TEHG@1=<k<5UTa&P7D`a0kFdWGA08Qo zFMApO#S9vfbL)_4h{VtL2#$`9*wQ&uHjP&Yy^=J&Sf;MI(;sWNxVVUkM~hZRKL2;$ zY%@g*f_k0FTuwi+-rip9{bcCG-i?I+nyBH(NN{wtQpz?*i<nVFc7QNghXI-4Aqfdm z>g$Bgq{sGr($a`#AX8d#qP2g?EIHLcQT<FBOzn7j1IvAip>ge686eMrF-<xKMw2U_ z9LgDS9FxRvh7E?}VDjgC=6Bj(#1|*Iw8+R3hyzG%{3nQe>$M5UsHn7HGHRj8l@Zhb zi4VLn^_k16>9sXVnX5}qUJfh?Xu^PRQSg;qUmp_(3*HQ+xWsPlHTVAA-JOD~D^E~R z5d6h3B+(EY=>$2ds&U;{<rNUf2cw5|Uq(ADbW?pI;C$6xchmn_G>F5bf1|vdf0u1W zHUl&qdjnMdA>AWo^GEBtrLx)LzKx5W;9d>&Qf=@>oRr*eUshG60Jd+GX-jYJhEn-M zHLx%8)yrnJO&hsUn!lnfI<^M#1qSBL_=D!;>fxx0hsfYJ^pEZfsIr5@!~ZUO^VzL} z7HiM2YibjzCp|F02%+(lM8NX?NkxF+9+Q{w@3N+QS;vx4`M+NIa7T`>8~*O618r<< z@OjD5Gf&=W#Z9rlE98#LwQVdxo~~4E{*;ORw)r5Htc@@`yGWX6UqC{^=DdZh6#1jb z8`3s~_6=07X93GWY)vDhSa5ILCnpcVi_2S(q73>+6cEAj^YgEKJpv=3#0gOFgX80$ zY;?y!SLtns^`cL40Vk=Vf&pgxgj$sNNG(5Eae-;z-o-@{kSiqin-Pp4K<ms-07jhz zV0~BP?{DrVY;vE}dAUy?2=Pcs--DakH1zdROSMtGy}j|gW90L57ENvLb#-+c${VLz zZa^i)D%3=YmAB|#pP31Hc<=(}Q&)S3>?eMFe5?p&hz$)5)s2iWq>(|hWyVXoxx4$i zDWZ$#B9)GTAxx3}hue{am{^<AP<6|j03XBmLL<I@=eeN~B%}<VVGLU{R4{$+-`@G^ z9Wy09Nu%WmLGol;MDNY%3D3?#v%3x9y=8z<!Vb`T;D8V@Um;$<l~95e7D%~`_FHRl zuj*S&lcoVNOAM6+B^VO|3#S}bBhw0?YZe5zRkT3=7OOFW5uS+K@j(sp^aO5X$ViaO zRxb)VF()AH1W?S&+1N1Ua@m0Univv&d+h@JvHs_#!5bI7o|G~A<)1sL@f6MG=R+3q z>xDfYW;~MzPPfXquhOU`0rb0rU2rss?`w7?UZfmOb$ZbW+~1K4Pg#L@zW>Hm3ry*n zw<z?5NKa*7ohJ<omdwft`fio+<LNw?K=HrIm(**seQvP!-iQ}Mebb(4+h`kH>waeJ zunb0dO(*7b%*?2u-52yYr*5zx&k%};isFvc;Z^X?ThrOu+2MpDDwg+G<u`9Eo1P#x zHXQjc{<d0Z_2l8VU+T3#0x>7Tmsx*n`vco2cTe;L#4Nbv+HO6#<li0Va94f(ASH%t z2;Sm^fW#|3JO0(8w$;!l>KoB}O`nNK4M#LQcqrs-t0b+H!W_6y5w_{PfVoAk%?^W? zRfQA;PA;zRcp_;8VN{4_Z0g2oPgYM4H-_r1sWy)0k#(?L-svywoho%5sXD#q9WNgt zFUJQbmuL3R61bpi{(AeS(+k{1>&IY*4PyDitehtM*U}P=xTa=#2l4e;;3K;pv|-*q z{&&%3qS~1RL?u4<kQHKRPTzToj4JoSFE!8T59$165zsc|&uCB{xz_0T^ZhIXLW*i} z?R(gN>u?fO9pRM%UzR7AcflHy4;1HLhf<;`;b?l_D={2=Blnmq{D=H~p_XIJK4;As zgaROmtxv_TCJY0tNFn%N!iDlNP(h6$Z&fn{yL{VyAM0oD-|lCLd6y3_|IeiO{z(sK zm#mZEo)fPBt#2m?i^v${b=N8t(`do5rdm^2oBsW^NPLXZ+OliV_{ap3+5WfcYe#Uw zlYK1}JW&z4w)eu*y}Ft?c{m3}uyI^%wz^yePi^Y-yZpnGBwWr-3#>o6EZbtrHyeRr zatvD!=5-dBSD9<OK=j<5)vdUMR(Nk?(0*5Jl%Lepbjo#Zcs96D0M!+ZTJGluxYAml zEF)pjvk;&E;{sraU>Zvq_sijDLo=?)ULs0D)qO5qFYgtW!7ZV|a;|wb+ZzPhwtVj5 z8q|LTwlyl)gEUDPh5f;#;%Lj0jXw96^B0oM(^FMMOmbvk@^hX2Zxt|u0V2D`mKN6m zv_<5mmX<^iG!zsT<qej1AuJ%~9L%vXwYG85GY>PzQn&3-PO5{6h3)h2bfBN0OMkxe zm)kYEzw1b>?RW|UM}i?09U~*s=Q@3DoK}Mu`wNBA7j}ehEmqQDJ<+#Xa2XwPvTOnW zTjyMl8`*NY(v{399fH(Y^BSP9qv3ILX7oROOU}-2l2@JtBhJwYc{&EhY%FXEG?ka< zr)B6G1|l4|xoCT9OBytT%NbhQ+VrU^$&j}S3XdUM0t()DqF@2Z=i#t8Z>|qa0HPS3 z#l?fRO<PANvfH=eS>;v44k#N&(54FsS9v`5Cb~PLvZ}sEB>yInTd&uDc<`dr$P(Z_ zWy`8WEQepI+PJzCydf2A%J@Aew+6=(#2Z!iC^J9#7BYN3@X{D2b4CG@|EXg2_apky zx)Z$xB8L5mK!RFWoh@%=f$?wsraOKKK$O>=f9kUV+@@LvwCfiXuV3x6irfMFK+0nW z?*F6ft;3><`mW)jyHSuXDWyAP=n?@HK{^Gb8>EI#DG@<wQ9`=AQ)#3_y1Q$bc{lg- z+<$!6_rBM~#hjQpXP;fawbpO#B#^hjej;zVbBLJP`IWvv+J>{rM&juy1}<zu{~YVc zX9;VX-pElBeFN%m6PyB%`$(^9XGckF1(R2l&zd!9!+ZXzjPX5A+B^OqRu%yT+|sTB z?VD^ocn-Zyw_))Om>%c0SQ6B{_|Ty6teTd{x!OaeWm5js)xbI@()>L%NS0BVwsAE7 zO3ZKzX)VcjFSiT3mEYECS11g|Zvsn)-$mNUxsCJki|q5iqE8FOB4l0N6~l=Tcf!66 z$FGjUR!|~f9?msxpK>J?MckiV=(8?7f`VI)6mJ_6z1%EruXUYAhpg11oXx;i+;*Q1 z1bq>fJa5<ij<f7{8Osbsbg@pgOyxoAxe~vZwqxHQUPpQvmTYWAWI9?|jjXHiR-snu zHLI*jn8I1i2vC4|1V9($xs$7B4i30$qX@L%+kUpy-k+0`U2E12TREv<N!bq*<fhLb z8o&J%LS5K=+|k2ghp>AL$j=1-15UtMde*64YQA2?E|Bx#gW}Wd&tz7Vt2Y%<0`iv( zP(Z5gdrw7g2qBkhH20(@lVdYbznmjae!a2iI$FNkze;9>Ll`_=+R&Vr<<&^WcL^XS zC%3DP6x80$fwo5+xY*@X&<8#ckWRl;^I9e<mP)aU)Ql4$UATn0l!2_r>go^n-F--H zMM)zVVRw1ag~f>SHp3^;hoW&myN(Q6U0J#Hiow@ugyEHu(a?jdVJH$apf~`~6X;k3 zq}9-*lh;ShJhsQLk6#x)UpnAc($;3Rif(M2H@p0(84*im$>guA3-SPy<%+pcAbson zqx}J9a$}_U)A{Xy^PJ4GMU#l+x~vedP3QWdei1KT9%S%8T&JA#hU;kk11qU};xnh{ z(;b1P#NJ*P57y0Xsm*muPpToj3U~5)9|Mbk34ySi<Zwl~xV)^yg+6Glf1gYO+Yx2+ zmFRuZ25Ljs4=jl9GqymoRyOraX?VeEN~*^rNExh8bM#M}NxmYuyOrI-u9#d)YrzMs zhb=9tg`c78o5915yjq^y-xhF#H4C5D!3;1kLU}2FWou&Bk{+c4T-@R0Fq$XIOs-T! znmbu0`>4Iz7DJQWS5vcXLzau(gc_C4`P${-<yS|v>KAqfb#6HRcQd*v_q1mg`OerY z@`n%F%U54x1U_!hnWLggm0!>OSDcfM{y%h{+zPu=mNEIi1=H}bc7pFGXwn-?1$|(z ztq*hDx}@{V`+%-V%o_aQurSt9Nv9}q)8)F^As=rCDVUyTcU4sNPm3|gYdN%?>2CT2 zP1>NHd81|2CG>v?gz#RDJMYmDn@wyYBdP1Xk{yHl)_D@eIzdr5I0zY`2b_!vADZ{f zGk;@K?&c8@p*T9?CozHST|AU%4C2Pi(lbOI?h@f;7(pXJ>qu~B#uGW|&;ECAll;38 zjZ=C9>SZg4z?2iR;J4a3$2>y5XMfm=0fUNMH9m359kr@`3m-VW_0&lIEUBIKCMQc1 z>--|Q-mhw}@rEd001%$(@!#&5JIy(KttL^b`p^$4x2Xabi?3sdTTM*1jlij_(gL}T zvuzgLtaVQaga0`D$}Inej-8t{^u1xKc~lIc<}|fw=k)y<mz|=cMAJW<=h#}_PAfWp z?XXtnDZYI`OUP@$simC?&9w_I+MUYQCyz2&m+teN%*wqHPHT(G0u1Rjr*o)DrEKK4 z56G~RY(fW2{rOKq?d?M-sh7n8buXZJ&Hn;8t8k3~Ve-qQc@vhc7n+VHYhu0ajuHSi zoNVFG%eYEI+yC80y@eN;BI}q6r{qOGh?=oY)|Q(N#TfYhBKFs1{i$IL;OL-vgPJ>^ z?LmW&F<7XdGnaCAoYTZGijYd!{)lUld{u|&F@kTNcbqwA+s{G478MqU@;ELw%<8FU z`S~Sj-kd#7ug-aHm<8`SSM(QCZ*IT_4~6T10u4L}{IDHis0XLA+3D#%sGn+0|AJ&` zhb-4*DsA@6&5mufWBm5)6zOnr^@B|cXwCllB&lP8z6U>674W1e4OHkV5AMxpf_~si z>jZzxWu>G^ikA?}`twxBRAW@90NwdC7;vOHqY?8JtXkB&BO`q+n_q;gizWvH>aMd( zm2E5EbYj%&X~R$6th0{^wNG?osQHm$*0C?|@5camIckzX&|~lI3fKc&D)0GI&x8`3 z>t8N_)MnPP4YsL^P*}X7wzUa+W*)vojSPHdj#cHRqPu$yonF}<DVYvNlP$V{zvf1q z8VkSY+OubgpH|`BnDiMnbB?P&H>&DVNA;n``NLX_VR8efC;yG6l{9bZ;_AwnC<c@Z zPWOd8l!n?7H0it|;$~g9MM%7k^)}AYr~b<+oE-)v0?G1q&*`#$tqI?kKIdf<N<lDr zx4WV;kwZxNP~ZOHpYsOXKa2n37WCl!Uj;A;&#*>LhEG#3Q6N<556@#(UUcL;7KK}G zK5_Ci7f?@`Gv(Ea*2cW~CayKL6VGc!cmnO01A705+y)UE#t3q`Fnk#US=3k>No?62 zNRNu<!5rrUgZX)eV{FW-DTd_n>;}4ghp*Qh$$~PATWtp-lur6Ty4p6mjVxBo%p!g@ zVX6}8^rZ&?&;U@VvW25%>&IXs;`CbWD?dhN3zDO$x%nkW0>eDs$W)!|8>7%!Z??2X zua{L;3|=P0CnbixIcsXRcd&*>;7Z!tzuZki{1DJL>?j!&EW)!s2&E*tfUrWCv%Qy< zESc2Z88aZ1m?xr!q0OE#xu~GRv3c(z+b6LWxLL0xaTSc8I@q<fKK9Tobab6-^hSdI z6pRdtRS(|H10R_T?U>H5y#A6L>~-CKAky!SOk^vj3)0lo#Ev8g?y*D#|4*V^K7UDy zvI$Slqd4ALZFd$HCL4)F3Gn(`_P%xnP=CL{6pPR6$Rtg|laQOcs2ALB=E}fVfsd36 zamP7|B;Q~o|7IS2%B?Z?i>ax}FSVqX24O2-gER^QH|qv+=6147xWskAvksdP2OXQm zL3Ucv#G=h4!d#@Ly&(PXkHLw-WA!u-5r-AK%e};dvy6-?hu4`b&+NY~R5ix#PyXKi zr=FVF^L~YOyZe2+N1}9_iGwhzxkbq*hzd3iBlj+xa?+ZGmm!6urttE^S%Bq_53SYz zMsGIslN}R8KT2nQMNM_Z=YCHm<v0Ay|6FEQR@q4JkeQkJJ|ff8(>oeEgb~%}(MLL$ zTOXEpM0&lXWvI@{xg+(z?AbN=K;(Pr(>Gd5(lp@8$R(66FF%y~HG}Cp6!O}_(vtK& z{@n8IqEs~+>}Hh%zGzI3SAammubY7lkynr5*7i1z${kvOVj|(sS194;<dy=di2~&3 z8rRpOtnN+Emx=zMILudl@#?hzNXdK`Q9yd2kf0#CN)fdXJw_{+A1~aw!YxIu**|zN zCx?5>?U7T%t^7K2tyltwt5%kAlXc~&m$}=Ycxjk_{q(PcX*&0F8aB~*74;U&?nZ*k z?D`xmh^CfS2mrny(lY9-kfo7Is{pNKScC`#MIyoD>-pPJ2j<IG*?y0^`Io+^SjIz2 z?sCD_RDvx$%yE9q^v;xluSlZXaWGh!XH-P1q_&K+soIP6Yd^KwqDhaBlYh!lTBfAM zi#(lcg+U8`{R&e3DGSTwK|1I)P|3;3vGefs0%s-p%D@u|8bS~nJM{t$S$skQBPZ;` zhk9eV_tkp$P}6<gf-KRP!eGwFE-%kFPa$n#1k^{#t#Awu4i5iC@Xe%EbTvOKIHqR# zFgzqj`eGVKFTKlJ(fB6OF;5C7BIm`TyK5{E3KDHGsgs{72EF0e_BG3++ZA>0UgI3_ zOMN`&Uj@44Y*o&G^(u18AcvD~9d>jn=jd6ZKUT<UEwe5<Jx0?^j&BIMR;!tee*g3R z$M<Mp1I2E}#Z{SN^>1~6)v&f)j!O4dKAs8(z9J2`@?(zgqRV$gP-((vKA2E=w?orK zc<b^(<6&60Ss>tP^&Oi-7cyrEAzM2Ko!QASW?Yy`0*Y{I`f7IHWG)({<@)DT8S-~A z(2KSG&g_Zzq&|?V5vFa0<&lo1P!<jT&Hm9BaMPnL=y@hxtleo=9zlvSVoR}R;gUu% zr*`x)ZZ$(gCqnxYvg@nHN+xM;UM4|Pd8VPs$ruw8s-8#IjkCYlnpss-!z8X66{$iL z6%|$I3h?iF=iqh*QBeM39GsjTM@PJhN=kR6FZGMH0eGENU;l_RiIe4qh=9O3&9^r> zJ{}S(8~Eb~i=ePD?go18Pn+LHZ%DP36isTo@#`fCA3b`nSx9DDK0PuwN0i(jIW<n@ zrv74edZa8%oj0C7MFQ0T7x|rL$?A_IlP>i%%AyGDwaDfttjZ6N%qC{~!OdRANILRy z9Q*rr!1hTu<DYupx^pFyH25wbdUgzmftW}DRLk$_7J(Pi>hSRkuIdP#KQDjjW3Z;v zN)Z&rX(|Ss$t=}0y2#wHzO-uiND_`0y88!x5W5_?jHL_;v^JT(!{^QI=)^+!&Z+(U zb?Ve6qkd{^R~P!Uoku&h*$(_FE0!2SN;ac*lp2-MtrVm2y`}t(Ae&k`*ZTZro9Q0R zr7)9>ybvUXPZoz9!mr#rV7$Z)dp6bIfb@_(Ni{`{l^D<?HxHY=B<VnEX}UUAcxT|n zg~!{c58LgQPJzt;`GW_62SX6Z{{FtTon43lH$_@&Q&Sp9aK{6O>Ri@w_dF!*gsIKU zXPg~C{|Tf68yl8&3l0EnczJ$!a1f@(Dkmd@GGHknNhgdqGCfU6N=B9tA0GfTl;A3w zj(e#4J%Yq+Px^vMakQ1nP9JBc=^nHh$G&-G28_2RytKQ;SBJLWH|?CuMywON9-p#x zLiWapll$vg5Exd0{<(10SDy=4|Je!_jO@CD{>UFD^i8X(np9rtxn_-S9B5a#{M50E z8Ka~3heS8?UKP|O%Q9a2FtPucSQc0p!4ao+^ztGX+tK>GqiyQqf=i~;BevOFidWvg z`Mt80wdA8YIQX;SP2bDBo5$F1x#{Afn8xcL6hB{yUG$!6o{x?L55>av@3EKGXNGg6 zmlpXZe8a{2j0ZB*@`)+f1Rl8Mw~@Ey7nXjewKyHs^TiYrz#LR9H{i_cZU0BX9=qzf zvgW3MurMZMWcU0Y440%Mx|{{CoAEt8J-`4iTe}dW049Yr7>b+K($Ydt?tjdF-x7Wg z49L5?3zZnu2LWUfv^54{;fG+106qA!R3qr2fRuCeJo&f9{g-+c<>g_4lM$eub(^&V z&=)8w9%$+4FbfE{YERjhIn}3mP3$Uco(X2qRLJJ2gm;_CsYC|)=sp#;7Tor7>H8x_ zpUv7e(5(S@s%QH9A{>?+@aPN-y<1a>6$`zOu?-{t98i~9A6mJMW2CEM<TX+=$9}x# zejunw<G{Nmm!^g{H&9;xu%#ybvTggIC$<As<~r~z4iBkFh42riUqn~tT>4mUdofT# zHdeLVCzMp5Zk;o2w%YUlxS5RQjEsr~s2ukBCS&80Wj4|`55vhLq2d9FrMhC_f8W`J z8dwGNk4MRsmNjb8U;q9KneOpgalORrS%jY-GOx}VZ!|o+R*&njtXy5Q)dp=y=K4AU zF+7!UywAhT$A>a#jFeLKcY`SG4waGUc47sc8WN-v&^x&!IuCs@?$6@-y9GRvFnZ{b z?AEvt+xOLZ2(%S+;STM>2cR(k8Eo0xrzy6DG}%|w)YSD`VP+uJZoV!bB*wBS-OIfK z15rSGViXVnbTZj|O4juKQz_DZ0$~tHr1f;Pvs=4hLZ7~=z$+t<EJ405Bs<<w>*`ha zQn|dPfiVpf8u4tB2kXX(&?C16-dxGFiGiWn<pT|kz@vmOf1r-&b@zjWVrtau7lV*# zMWej_Zvv=4$V?$^)3ebAay=C}{~2Tq<S;)LH`5>|BpdtJ*RC{#gv?`v-;}X`jw1=D zPE35wYtbia<WCzx;D7hG0qpRKiG`Ac`vf{-Va=}V9Oa-{BW^CUpO{c*OJljMv1zRK zX=GS7LaeA(?d-)bpzyYeolFluOW)i6=qLv_jD-8T-*<J9{PLB>TVWW(mAX54DxH>< zt|TTV6vZj*9Q;o1Qptw0GR4}7<KtSQG=%v0W&H%!XYZ=@>M4+QQ@f#^%hEPBJ7D~) zzlx5EI_jZz%*xM?@EN_7J$>C05)xAAP^V{XJbb6IE30-Sb~W#->2tmMqaOtpDd*t8 zy=lijupza!Q9(9p?Zzs2?^+=VlBOwnFTubVJTs3K%0y`CN-y}$4UC!sA{=a#2#iMQ za2C59z0*;J9y_{#-)<QD`>gl`1lM;$UrXBT=%fdgC?2`1(P$aXj6LrU{_`YQoHce8 z%hJj(>yQJw=#ahSB9@S&9{T4=XNn7Ma#2hB+y5<5hsEdG0zIE!Ykqjw_Y$v_y``o6 z0gt*mf3D@?Nw7qeM%z1^b=EA+CQ-59BMxGW(!J!yX=w&WDr4i4p%iRvUrP?8S`S{8 zn`qwA&<jc7K$N3J*~J%CO}tXvkKELXo16WHhDTS=T+e)DPtokUfI_4m)WXKPVZ1>i z2yUq3=GXFaKABQ3^04smdIy`f#f_hB$#>nNw$Am6i9@s^R52sgzV>Ya_4FTXXY#p3 zM3VJu%E<kjjfg-n*VH8G=IOcm=fP}CMeY$T9}G-6ZTaA*;?h&f=oEe^cIHrH^gjCV z#&NCz)HewCtL+wRsaKUB0&I`2;l7QbU70&nnzz|JhX!hD7RpR*?wDvOaAs-5wAFsN zBD_Go>Zuwe0L&*kTd)YtUyoL9W%}c`%`YT82?Ynq(sK$M<ETA-YL}(#IK3a<(uodC zDCNsEhVD}9-&ywHqC|$gxY&2Qfoi@`S0B2~@Xzo!wnl_9kRz9tmWqxQ{ROFL*Hf{{ z-(r~s4J+7FQc?zVE+5^d8I|@fEirrv=F)e-gm8}v?H>#b4z3%4Dlzo{2a>0eiHYKL zqc%}d_b5!J_3I0p<2>jc4#a8BzINHyeBr4-?#@yE0^Twp4;F7GYa@JsZ44g+l!pko z*s*Yg%GlcCiI9YPh>e9z&+d7F-kVsr2sekD!eVUw9oA=+*L?g!7@-D3$4|%$cvG?J zz5;v7G#{QwcaZ85#KLA_KE5t1Z^6=XUhJ5#nc?FwgZ3A+`JGwsgj!*WzXHOB*0#Yu z_;v5iIS^O>GEpGlSASHv9N)g=!qkd>Q>aby&X-B&(DD>=GPxnkn&h%x+z80U$1im} z>DBIp!R5rm-@LzC=J7Cg$0s!D=Sjp(e0bZj?qB70=5(`JdZOVhoJ{+<^=A$iNkYd# ze0=eXUZ1>O(YpmYqJM?6adA|B9ue74<SbmgY-X>{seVxdIaiy6+moD_*qKxf?xD}3 z#VEZ{=n7oe+LyspF`tk%<9t4P8XEG?^ha@CKl#f2TVa<2_yaP94}NoSq@<;h8^VB2 z+!?iPZCq4%(N{p{Urlt&dAUyXWN<r}63kbG|1)wjjP(VB5^w4)LvpX_+@wJY7uxjY zRt|$wTo4}**OR}X2H$P?@A;g)v_p&k_RV`DWK)m{!&jwoIHP!@;oWBE8``Da(pEyq zbhD3$w~u!g>c}Kt8wt8c<*1^Lga9vIK%>kTv`_=WH!l3WaqN$3FJi!ui1FP5GVc$k zn4KM2Scv)0^YCypurc3yO<eun)0xl6XJ4oZakFbei~%NsA@a+ve6P5GplQ~NP@Ow2 z_06Kohct%2aVSnPPl{nC%L@<lpXDNC+Rur?=!rKF`qQ~dq0{T@$>#=s&#)N{R{OCS z(ODC5s8xL>$gzuCCv3WnkvCIfP^CCLU3xAqu7L*kUF<gT)vg~Qy283oAL6GB_OIYz zRvmCynS3aSAs`?yc=V-1?sev~Z}}ZB=ZME`&}y%qIWgh8`*SCg*;J#bp{Eumx(4CP zVKYV>rw#FjK$QRfV07#$uQn7kYnzW7dv$>lNAG-cZOF}b79p=-h8oMw#Iuz~=mab+ zyLe|JOYa&;jb~fw8;YLRJ)^@XQkMm|=g(JWzVnyplw@QWalOIIG9nE>pAmDSW>Hen zoE`To0!5CDGCojXOVSPFBeBD16aC@h>4eV7g=Ln5R4&_NKi4HNdZr*m1cWQ|^{!s) zNjgWX!#Y`FO!}X>vaj@LM4j4d&l954w`Uf}G#5V}>7$O`<c)?8T3$xCT&>zy?vbP* zZ465yBXK|sLlz2?O2yT-wVY65m)?~mU;p`Te|x)~t9BkW@i#i~&@Cz9wy?75wBR?L z`1MBA^B^t%<~5=|&BVi_h8;d0SfpPY3lu}aiYDW^2?->11})*v-bPO~d#4r`iRulc z3Y$7RJGZvB-d3!x%Ec)c#YVK{L~_!k&)f<zGZPRhr5V>UzlgRJ6hD^um)rF9>(?|g zU&Qt1Z=Keg2@HF0#C0Yys>xzboGkLf=PGC-3`};_m`O)|WS5i>LQ4K<q%ZD7U~>x$ z_@-17w}4@f*49NZ`*lX#=SMP6o;>+leXV!0s5)b@`G&%-Z%SS|{fGPn2KAp)ve9R} z5oCE%7Mz@%*mpxg51&F1)dzFsU#(v!ib?gCp-~L{WgoWsy8<sLL80Jr6WGPa{PbPB z)27^{dKXnMM;i_DWf%Rqusy>gz68p5(?Hbgyj(F6I#GgW9oq-Ifm?ia%MRl1dl(3N z%7JX2Bt2Jg@jzZ}Qo{L%nXBi2d0jrSF1y8C&-|5;3cZO7(f>GHitHZvC3$w@DE}As z`06?fPQhKdARcH~(Y(Og<focO^Ml-T{|f#0$PPRfW0rYM*2~}U3sn`1*vr^3!c=2S z(!z<Tl{9(yb+9n8?EicR@I+(jE_}n_Y&ZS@`mX!yh7@_}#W@DNxI|9tt~PnYsWmWc zh|!KqxmTG*pW<UB7D2jP*^FI~r76nvnVBGosG+A)dt4jlz}@sO)7{OF^;kfLDr0ZY z1;D_UK<9p)cCU-l`1R|TiJha8?t6|{dT4C%H#K62)!;Mbi673AfnQCwjuC-UVUDM= z>!+>(zMGz7f)W;nsilu={iECiaB}$S_}|ItKWTrFx_)&fM?o2p8tuB8TOGoXzS=Lq z+ZUx4V%UB_bU6jBAmlyr@!X+g`awqH`W8$e6gs|nmB1I+5DfWbYZ9%}T-wFI*=iS) zIwu0}#<0boqD8#P#omFVI#0!F#8=Pkp^cVxUXG^<CQ==kB`auQIf3KE?%!!<1%;nz z8W!UG#GHKOc1hG><{H|CQb1-!Cu+f`tkvUO6EQeg8~9~z!^v!X@E_7Fxph42al;w9 zoBs5pNxkZUL)hy~TKD3P&A=uqD1G)4majUo39aU_&4VaBH*0I*$OAZgP4WgY$gR)1 zz}|+VwrhmEVCxvs&4Pza<9A*?%jfRFaTyx6me<vN1WJ(ZibUlX>)`X=b89N$8w%+W zeMXcf-7Gxd3J8L%l~p3ctEDOe$F$~<xFJ2>m9pjFzeOmWoulneSOng8MCx<*$8stk zHaTCAN{QNc_R=@R=VUbEo&1R84g0MQu}fZYvCBtp(X1Z#jl7GN)_>wtaQW|`O@+)9 zH@6XTl{WQ?FY^>Fpg)<L_po^Z1!8Ucc&kF8Z8ahCKCB)ZHgmmhCc+@EpaiA$y(H;{ zyyldRtS6FzbXBgL_Q}yj0TE^NV6_<t$E5o+^FId5J|rXEB!ajX`%S<4M9|MLhhh7u z%KW*C@D5-A0vm{tUq0DcPw*cgHIL`)gmWu1?GK}L3P)xf@d{4Srr9gAXF`VjsW;)` zxAxz~p#l4(6U?MJIqD88k&212qc7P2&V<c~<kN#ian^zWYiDGB7|Q?Dyhgf<VGg zrj%oolVM=`JanCuoSaitMJ`|-PAc1nekbYft(cSG8uVNNy-ggNp7Y*l6AME71!cbK ztG)H-KYVVKsVM~oD&$3Rx)mtTW!i5j)n2^#-Z|aHp0qccoGRQuYFd9YhPQ)GkeCi4 zbv1dGsQzhp;nfVjE@efr*r080a<y3I;^hBo0X(^8a7y&5qeg58@)SN=kgw9!>~+7x z<t6DD@-o1#YX7OutCd9{1u1FQ=`+iU$7{q|HXB`NZF;{kMRu9B5OeGCFlXNd`iX2h z;)$3{SWW+3oud^W=6**>b9x-|tXDDRW>564oX-MI{u^h{Zh8fkR&^3L^_-LPbJ3u* zbKuZ0Yk3*ho9BeT63caxLfn$6!9?x`>xQzjo@kp}<l@&SC(ZN$_phkZppgrRivxHG zmj>!jqZCJXFT!yees+0fc$?vK(0;#nw)OJ<B$&HU($Xq`PoP0U;&Hqe{{8bGpQ?2k z%^0<o_w#$=?Q<(85zL{34gqizKii9tuchr6Z3=HOcFp4pOqv~DjiG-Vj>GD#w-d~y zS9(QyD;-~;yhd|0!6c2V*R$>s+@qWp;V!?DJLsbPQ~0Bg-`(hE^MZveU~_Kt`Qhq6 zQE+s=N;mec5{ntj%3&BSCf+PY!>6IRpjl~qQnIQ9`)w08vylVE8>2l%ub<b~nw;-M zkCQQfU_8aaemo|)eZRw=l+EF}IW8!km$xY;@+@YkU}n?C*7i}}-$+mf_db)&AtH-s z8so#fAK^cfjZh(AcG$M<<}wsV^bK8tnR(EW)mKq*_LJuiA{!+y+$0@Lk?Fi*H3cRM zT|NMAfth{X0<nq;8T;JR-iYA9+bEvBHy_@mq-^@g28-*BiQs^UNs%RcF6kSS;!21( z>w_PTW5c<;veBAKZGrRIPQJcrSI^NV*R4(H&Yn3H_m3`h8B@uw1ZaQD{Ejf=Ibd(a zIn?&UPiH;*&5)am^RM_OrBY_EB9m@wgEjf=_dAH=BZEwXFx6Drq!gbOmHX$r_$mVA zDbyV{UmD>AYyq{!ltE@rqSF>Px!a?R{&jgro;t3t>e2PgzP`Sa90s+7FSxiM0brPC zm6FPUK%PnQ^E2r|&r|_TmX!vP?V+|t%cKw35-xJPD;0z;68^ynImha_S=_qWEc(q1 ze+GF^!2&fEUZB>@ckjzyA`(Znvw4q#WJTxQZBBXn9+9+$kG_rsLXV^kW0fK4kaMDE zNL3e1rq4H6ih8~v2l?#cW=zXS1CGbqnX9a-x+2?sV1$%Rg<rylaX`JR@5+VZ@?Bqp zgrB1)u3B2;gi?1^TTSFxnf~A86|OT38+?39zZDy?hn!zB7Qx;kVS;z`FSM3Z48lH< zb{3JF*VosxbMP&JeI>H)-*GI-y<AbyY3DWtg#Z;5l@QiYS~|KgF^2QF1&46OoaKuj zs;a6?V1g4A+78ZJ++OTkOTse9Qd<`vG&2g>2t`enQl!DSNBBz(8y}KJqO&c2z>*6N zUJIo#CQrJI?4@U;*U~WuA3O4HuJbx(8nCR)hX#}(DoG|6!^;pNH3)$HDXT=HP(XZd zWZ8_g2aP<Aw(-)hbP+ZOr?MWw8=zb@RDNFRI$XS|6|Z<}2eyPW8b%(G19&#efLqBp z(=jOeRl(VFWR4c+^08OlaNl|d;Q&}^VSIf2iZ&<Jh%-rb#93|lO4P>227Qw#WWizc zkDBWNN?X>8E59;SKI_Wt(o)ASbh35<AA~@`DZNFOA&|;9f7iw!CW<Vx;c(Y>su)EY zIhNVss7m_p{p($P$+y3z@*>M(6ep#om|QSlqYL4%e&p@IX8y?QK>pMlKR!-pvbc4l zX`|ZuHKl0?i6Z3`_ZM=MFOG!_ZtKr5UdVHPHa!hweP_twAKWgzR^BqeTvE;lQ1381 zs<Y}IdK>BzAw*IMs3%0#1XEN<)hVRvY4|KA<8`n{fSX2>xeGEhIsNrtfXZ<;kf}a@ z!8ZKsRhjr0)QjLjYr6>p=&`PPL|Ou435Dr5K{l5r7<fNX2LR20sVO7KaDXtZ0g*n$ zzz^i8%4t!nr;95<YKA!Sxw7+v%Mhk_oi~f3H&_!G-zr(-MqXgSzNGG7dg~@dSiRve z=yBqcPG9W*CBNqmMDh7o+ljqbSE8P$n`>((zP>ak({Cy9F<&;C0zuRaAgg+MXU1L6 zFlp%Ndx6|rVHJ6j+^WV7<$@wNu-Yb+baaxf-K8B7X=yaAs~}&cQZP#xFY<q{;q47p zHSxc77Z-gK(BBT}xm{WCQs^@Qd=gbo`#*5a<BPo+8vwm~z51b$LjLcVL-{)n6*bjJ zU+NtOge(#LpYyUv&N{Qi6TG|T=02n5*+VZiHT;{~+l2I_$GDC#=-dKVT#Uj?XFfBt z>G{Id)m4LMz6OSaeu&ktFP?<<Brd`?ip<9|K%M~k0}9s*&D2o&`}$#e=lJw4cnCd5 zo9%mT@(XDj!3t^;|643Yy9GjvygRDVt2ApyC!{pJKp>LE@Gi5rhSWH8_uSiBP{kmM zhR;-(h@s)i7J`DwGOB#84#DRgJz9PI*xV4eL0rO$HkAoI;iKrALnl#7+SSFQjkRZx z07O2!TF-lGOTV`a<2#u)5iTASc`quiHH3nD>!}gBsg6b?mW;%cnF{xpM?O`FkQqk( znUFbZy{5ecJxw=AyQYqB-Cz(=WXE)wTuXopVL5L&+F1tZJIr7MmjZxgaucPcEGacj zzU4TGe1>LQ<Ti9_mbLrm!P{bO@aJY&-_Z=<N>3xTx}NF%WT}!8#fx80ElU3c4NBqi z?hTe|vTIIzXT5!j=$J(71~S<@prA#Y-pfg&J;PD~srdKR>UGF@E8iLD7}p%38nm&X zEeS0CR!~&@wx!Mv;-z8V@bxu`=6aVdoS66gq1ddX1EHC+rCQ%-mjjGGB>2pxu&#In zPKWJ7Qti+HRo6ns`Jl+&p7PR5VR`@HU_%rNKa%S+H_whZeV0L5iev<N;BsQwUDp9m z8D%@{gjaLN7dw`nvI-0FNEJ|rW1n0dbrRKkXa9ey+&bj_g*`%>T#@+}rl?3o6Z`UI zdVK$SNaymdzrCa5rG%0_dGw;4uz+}atXD6aiEwH{dU_0qBjtG$;=ANKEl52vIg62P z^s^%)#AfE^3YjRj!l{p96y?I&r2K%L|9GsZ0xBk^Y~|z6oy%=)ZIBgm9H-b>=Z!P0 zG}>{+^19BO@N=SFnE5un8$~`{f|qs@YQPKGhIe>#mo|b_^@c&g%^PMio(#FGzWO!u z1CJH`z&oCGEj;i8TEwo^W0Tz)u87wxCf4x}U|{peOLDpu*1A>MMw&=UOihiKq}tsK zE)3Xr$ft)|@=`{CE`u`(7vxxl$})z#juRGWMG^emO-RY=sI!ti!?d0k2<$?CApE%` zT#GXloDY?at+t(#{rSq-BdVQ#5_&(@P(MdzO`<qFpZL`Li=`;`<I>~;%2I>8Tr+Wo zqMw_g37C7t5)cg6bF8|Q!;t<iH)rpE*o=+NkBRR3wl^^0r`(p=&k56ryD2-}cZxtv z3CRM}TWS%9u4E$^ZEGFUA9U#qAo&YIeS=p|*Jr{DR*fM)ct-1(l_kcA)O{G2$0Haj zk38I<_=Mc0L*bP;w8$!!oltlSdw5^>PMw=~>D|z$#hwk`{Uo7Sh&37z@**F<PWns< zDI?)nWaZOr@<;oybVv^}uT0zK!-L!vl%Eeur!k?tFL*RRSo(MSsBID2;dzROQ5=5% zE6Lx@>iq42Nk~<dpq6wb_}^z?_bTY%z@dr!LGa2sHTrTMR2(Gy1vF>RJBYB1zVZ!@ z>=8+^?pt?REBf6%_sP1w{~1L~s<HCFFY?S*FSvn4iB&j@9&YX2;GMJ(6+x9=F@r|; z{ndwqhI0<6_Zo9tC40H)T^HBhwG+{|PlbmVLs1_;#spiSAI$nWx9hT+Z;x#?@XUl# zk(V)Q%8|jlnb6130q}hXb*evuz!O$opF{q!;Lmoop_2HXgWmY){t7(gm9kx<+z)_S z7-(>}4i9@_tw`as%S*5xh6^;dnOo${JKY3|itBy4sHKhCY!n_0KtRv>mztUZh(III z5p;n2VdU8C0xw`s7Aehxi;H{I(jNofc;-#(!1?6(mIOPn4Dqz%{&q;tiM$`OFZd%S zZnQn-BELp*WQTN{t+LL$LAEZv#qzGcN<ax9<2b6=jAZ@GQ6l;;p*!H}mAn;yEyghr z1I#ErxzXz9dwp*4yxf_sFDT&GfSrw`?H95;5_WPIFk~>LU&dD$fSeFC2>5jwpGKS< zf%D@_60DUu@%S&_P(aeNN|jsS6C5B`>T{`aHwpQw*u+G5eqOA}zE)RIgw9oLZ|&fK zxzDdhcz?~HQLgULSG@w6iw~n?sA2tsgP}8fbE&F*TeeaugMNL3gWUo3nfjz4dEq!b z@o?$SfOpEec<X&-3Er`gWKRI}!IA?ajRqO@^Y8^L8K=ER+P4()HI8_no74=&pM$lF z$=ZbqmX@rSV>Z?E2x|b{(tTD2K}(YzVscVDx3MvGSI5y&WLZJB?gjz@Pa%zl3nW@4 z%RL|mFA0e`p+==>OHWRtL$aFFC)gi9emAqq_@A!#E-#m@g!<0>-O3LAlSbz=qFIzN zEo*oY7S#)J5rIT$UpA0Yls)=m_3SGraoIwdo2gW{eeD8k1Z^HG>&y3*Ik2p_(d}v6 z(vk}e59!5SH}N#OEz7MqllnTz4Vg`HpHm{%?(D2A2w^yy>Q7RTL=A{Y8ChA>&#I4U z2(iG^iBI_q$-d&)qLj|={O#U7a=h5kps1xIlJ)DCDsM}u=9@R6J3E-;6GAsLV`4%v zvf+P+H`bYokkArDYuUx>co)mRkEkr9I802_8z*{`P%#CJNcoOqHa0e%MuN3nB(#qO zoc;8Ax@58SO$Lb}OfRfMb}}2U0Qt%6902?q54$92ats79A-8mXT7qoKl>=)V8!Nu% zw0-!QfDZd&4%us<Yz_VXylb5=ZZVO<4|VPG_H^;IQ3*V#)<f<Gy<uVX$iHJ_b*Z!_ zjdBntXcTDlP(;6Z#=BDif$b#F%GCt!5OA07-Y40w3gC27T|h#~t;P9ZWi@HO90Vta zjc=(J9BMQ7pLbIaXuU;ZoW;e&;6x&Jy%HbE{)E}tJ@q%;50_^O1k9H_6N;1lu7>^3 zn_f&iYVxP3=bKaA5r5mceiOe&0<TaOHa0Rnr0fp;IDbUdxLZdY<oyN(;ImYJqJkRw z!PYe)H8q+UVB#p!*d%r~cGoqyW`b0FCI_2oU}7Mz;n`~Z{Q$)ks`~snSn{s+DFQ@- z{Lk(Q3BuZ5w6AKIiN8a(*o7bM^+g1enVPxKfHvn)OAXAJ0fWKB#QaiMmxB_fqeCI= zFdvcKE+em?<chYENJgglm@Nl*Zh{=wpkuVQ|G?BklDpdn3jbyej_e!Eb`*V^NXZgc zDP4WyfBxl8J+%Q&8w@&X3lT{wB(x8L6G*Ts-1J&cY77OLUZ=L-VFSt27mNPdmUFI? zS=&++$jRwRiT<4k@Ikpp;eQJc<RL?AfZ@!+LZkD^n#$<erfoX|6U$BVmoKD{Bk!3# zPB6ZK2}4RoMoaE_Ty%7>Fmv##r}#`neo2XgiU;~mX4-dIGg(wSkIDMid27dB@}p2q ztf_o`&AVhl%&Q_!jC;u3oymZk4bX|AG+^d*@Bgsiz)gCO=VC;oPwdG1?(Z6}re)6U zD}od$@Xm}kKbOuPapNbC<9tpqU`&=vO2fCeWCg+(j~7ZN7F~e}Bo`bX5v{i3r~v1m z9Z<{vl$eeEHj@dx6$mFlE*7`D2k@jS*2a^?2AkhOk@A04b3%Oi@-Pfh_Fe~VF*p1N z|Il?PuDJsdD{Jp@yqm{|^N5hS{V?@BeV0`%NNFoV98%-lYIH90Rn0)`OVst*B49iq zH6>l+nO_1uWTJ~<@85GAdp862x@>Nr-KdogT!)&5hVkhQMXB-du`$SWdl-#jRGRF{ z($1s_1IdP=2C*yWyQZ~s^}El1c4!3Pj0Y;tf?9a?RPz~Axi~*62u6<9W^5d^w`MBs z_{X$fP~AgT&wMUS?2YJLW?D>7CQAL?XEZQUg&k$UdR?(#p)~$l>fShdrC+QB_n&qu zbaduqv<Nb#{Oxkh9)^jveBlL@5HEMnnI<iQ)boOWRny90J_9AWQ&E`}7pv&0L1clt zi2s=$QX%=8QY}hOLxafEh&7S%!*ry~Bl%_6<$~v<07Hr&gk`@iD$RqnaBrSI_Qh0$ z&C6P5%orGHc}qrMvmctgqR~rUzJizlg2Tewo2s<w1h=IM26fZbo%)FY)gL@3+sPuv zWNt$}mvn;{NY~Aw<s==Wc8ZoG4B+j%ME05_Xm@yOr7aNc`>qDHA&?3H$`xc0JDo57 z{Tn>1?@*t64!d1bnXmXD05P$!Kp!358v`sh`sXiSKK+yr^1buf-F5EY7zA`ln)@B# zc0QDn;ctwg5F;+{r-KG`y)Vl5SNCx>1lo^!5g`5vo}JYL-Prf0CYpZdARx$>yw|jW z_WeI->rndKuitBXB;w33z>;Su0RRTE1k*&8pC?ZtSLcU1EEOI4PimHcsRTY!LiWV* z`2^{oYVi(=roZTrBw-14A~(E0!@VH4Y*gjv)(}twSvPu@b87#YIRPU(a?gfBh`MXD z;(RSp;L;F?N4VoY!1wq*NP;X?03gYysk7ZLP*@~DsT}pq{-l)cu3$ks8snZU`1Phx z8CXbwobcp#!v;5*i3+Q`YJx3?bb%nN5Zz{UZ1zt?!GCI}mn82niyH{Sq*YXKfFXAa z9g)-(LkZShlImk1wUc@G?lFk|aok@4qk&fiZoe0@wUD*;4?lnYEIl_74Ysh|{i5pK zoJ48x8Q_Odb}a0x9u$<C=bsMx+B_xSy?ZC0tqH~;Tmb$r^FIKY$!;p<F8H1CO7wo@ z5D7{j;M)LFILzJL$O|i~c~isNdGSGVWB&H^7D1gj6KWwd^U>#b#8?x*=f!Eg(ZZrK z)oXJFPP<gmD6E4WHX@_NTPG5L?Fv6<!)eZyK~07vRq4`By86Z2l2f0n<?zTEyNwJl zH0Ni#uwGhEVxXc*Hul#gX2Twsg!N^G6VtT8^&+xiAVWS9h<Egg!>m|mqruvsfVcK+ z-hGJ#Mne32e1QW4Y9OBysJDQl;dRoJx71fR$c|Ye#?n?w+K_SR7PscN1Ox84Rhmq? z1kpiP$?EEAHBdzgfX5M2H573i_k3vN9so4~l7Xx7JShwa=#&G1Rg0qr{hsjR5P9|= z1=Vb_>_s0&tyz%8f11+>#(gW0VZaxLnupc!)xJOvwM@j|@w7K~5`fo1-LR5ME@oqm zL)QIuq0Tg+KG;=37K)vlkZ|5@{*|@9d!K`M#TpI7V*E92|6Hb`5y!{J^Ij?1g^%5| z*I%V+Wg%pZVCCZ2VEq0fGx8`)5Niv__^f|w0<S)PAQl8L2P7cb$Q#G8<$B|jgJziN z8c*{XDJ1jscB&j_BrOZ*{21qAz6L2uDk&+-{b|(ccEDC_q+ZP2j{R4tin~qpiY;j+ zOZ*Xdbd0M2n=_6KV=qF+<iR{ISExsJ-ylu?h|=dH%nV@VQ^c~!EatX)r)rjQP;&U4 zycYG(89_GRatp9tcntXt=r}`tp|4wN<PL2@Z$SXmc8hY@t=cu%t15VAI-m$5Bs^CI z&Qqa|sYFEk7p}Ky%2P~7j3xzB6mygHWh_{I2bhO*q0M6tK1>|F&UX*EzbW(p90-2f zg+e25=*^Ax5Nmn)2*Fj{xO8z;v&WwXPVK0+17ben|A1-jnXL&<Ia~B+ER<~`Bw<jT z+|^h5%Ds#C(f-Gef<u_)Y;6$f{|nIh;;(?KuZ4xYAT@wm9kJHYiTVFYQ(wU$^0lTv zcVPfe_Rv&kD1s7CBE2VIzu))AC^GNt>esXLj+^9+{09mDpez@d`{kj!7cSz(hn!O^ zm#}ZiM1Sbt(wn)4fl2c)z|@igiEnsjP&PI;z&d0E0Mqk&QH=B3GJ<?@kcXwTK*&p# z6W{=P$|stvj~_d)?;h-*OZ38qk!h50*M&WJsx(Me1ZffQKLCyo4c36t^4}3j-3dlU zot*#kyu4syl$qySE<;EGP<0oUv(;Lp!b?Onb5y}e0!D2}jsB~>l94o_4?li%1>l)n zV*C(}hy?o3@Au2A0)TTK^#yL@0wHL6;NZdOJ>)qd2Mji5TKpuahBG(2YUcd#oVN)I zUKYNr@^4;(y9R#wus>T3a`Hv5ha^B>&BD`k^*z5yLlPl+oz*}!SL+x)wcFhtO<^jW zs$dW4yct$}3#0G2F>bvthW`Z=!;7#@iCDl)A=!ffVilYMV1}*T)BO*?M`zik9{$fq zlI}pjCGZ4ta&2p41CJfOYXy_(EzuGyUm77Hp`cT&4u@LTcMjG^_5=dfm63m*i-Bc~ zEVtVoi9^88!TwtqKU8@CgF>2yI5(UBHV^pk&NFir!z|3;z`hUETn#-v59hs&lnrd* z*)^s=uRE`Ld(y?jx)g5zNw5VZvMyiT8DL+&6ZjF49P-1NSakG(I6}f5pX0?bRNIQc zkk$YXE)s>1@eHKG$9(njWuT+)Dm5U+A&`4NkEEm|#`ggnP{{o<F9iiS5ZR&OP0Y3l z;C3J(U%d<rOwdhs(}HG6e~Ci^ViSAosM$7$ni)NtrbwZT=r@fml&?UIl-}A25N;{- z`ijLPAvXnCOdgD15Zgn(=g-O<L=T%1mt93a9OqkOd=~!{0~2l12&vO}<t`0Y8mtM4 zLMo0y^SL#tK75Rea~<LV*`NUIi|_5}FyW05&$8yF>;ud4@<~Y%LekKv{(oTQ;x)?B zPEKLr^D6PI`w#aXdcA)A_bEaCpjp=H8sDeanz%Q(b|1TYs@pO@rwtwN;`Phg$eCOx ze)=odp^*tsH>w#$n{HL-A*LA2ph!fv*oEzlqjv5MXWGKUdIQt-E}Ev{syI&VQghcR zZLJTY^sxXFeBu~d8As&(HuW>9^X`)3`27tWUXinmq62Y<_1Yi;B_L7-_3%oo3@*d? z|HL?9P>3`gb@cZYGhq7wF`?xt4v#DJ6L<}MXf1LhEqOiYI3%vP4;I#t0Whc)QMIo1 zNKZ1+PKYc?s9Tz(qIN0Qg+z_Fy|eQD-6VYew&5vhm`qJdEv`<-ye*D&FCBkaeto+D zu?R?9z^8Se6dQ_;z(Gyv4S)wcI#l5+LQBDJXI73K>xH#TH4=99wBABJa|A=H!)HOB zRxYo|cZ7^a5ML^miTVth>j_<&1`>7Px6kzDM&Qy+azx3{kS<SnCnMFO!4#sd;hU@Q zhDD7O)hpzq>YF^O|H7fx%6C?=M8IE$3Z8c8E6hWIe0fc`2}fL(!uBpj$P?c7{x)af z62KyPnc&~c{GBP`%hzCJzAul(%V}7O@87Zobv7ffQ>Xm=<BrtuWsfka+p*5lRy@z4 zVr%(_AIA*RitO5Qn~9b!-l3^$3oq67`ad9*;GVW>m5sskn4A%n-0No_e77s#<<OSM z+EM4~&<)=0+!Pa>{RA1457Q)!&pa8RdeZ%@+{$GAvBCq1$9hvqPs;R)!QWPcOQ_GN zA7*2T0ZG!LP$kbq@5Dr(QBvsM8{M)QB^1o9IIwhjwzTPP;0gwJr3HBn9lJJIgeEQu zm9ou}etj=XeWbdL&aywSFgMcHE3@vBueCMXCLSkX`*(pZ55KuFJFn#QX7A(Z=uWar zDb^b~NKDK9yZTmqgLymA?kMT@Qa4jO+TQ#PN#yaR2l7;dn|93|WXCWpRD5@jJ<mBl zMzIDFM<3;Yw&dy`EC8*J?Gr4K>Y7B}86(g&=5Hz0VO>&IM6sbmIR7GUu!L|Fb4KF< zdiyEG8Ys<ysPmxI(--xx1+HbKZWUV=h*dwOfQkSDvUz6^P}I)FILGOH4w(jB5g<YM zsba!F4+wDFmzrAWz)<Z5O;l+gxK)I`D(JdC-Bc(<17Iq!Xe9!Ib%48eagdg|&#^(k z>b)^eF)^mr*4UPnUjeAweK)D^n9z9GlA3MkL^s9GDyc62e3c>T$%qwym<5yKeWef* zz~T=LlGvc5?UvTSaygjq*Ocg9bNs4pYS=}L+88uwsAyfY$YVpBg1itPwYc>R^bnk4 z<Pf9n4EFo}UV8UDF%!-rcHMEQqlIKcoJWszRV<jEmA?EIT~i}Gde+L5%2;8&^d|!8 z>?+GWi?~8gBXy*a_Nnm9+R7D_%a9|oAP23x;3&wTr2uneWEdzX%gRT<a)LK?@F-S8 znv{&|7Z3?7Y}t2uKsT|j(z2%;Wl{z$Ex}#tczZkDgT|-P0PHm}ksfz=iwlYbD2+jp zEYVcEdKdsHcv>c9ljowJ$mxAyq)A-z`>`_raKTv7de7K=jp9+W3hui}U@p_^Sw_4V z^iM0d88+8n&em0jJhGve$C*LtIYYV{b7m6Iwmc*-7jIp;X+1hMz83Q5fx~qeUH$V0 zL&PrnjoZ`WcQ*&dJRbg63jo(vMgFB1TDok75%v0CKS>iN+xUac09@(#2V#D~G)a~a zcelUq*(sp3adqFUU!_)^$^p}G5USA=(u%X_DU3Xdy~i8Aev}x3@$~Qqw9Whk^L?l3 z^ey_WP%X~xL6Jp#b7~2^s%5y?OUDp^xMD-rHrBHm8mQ>vumEbS$=c;?*iJ4x)onF_ ze=WjQw!AKIROg#&qPmWo=HvAQ(M)}nuF%96PrvI2-RborY6<_4Q(|mO0pq+#9(%wd z#7eq&xBDJqw@UFxF+g#-iu!C@zt+^m7q@kb`au#>?=P~QYH1>7Wfx{FEQi_qb`$IA zD_HKwfN@N#ex}ySc*L9_zDn!^DcmNKbK@$sd601==656bN@&~K;eDEWi-{o#=78UH zjeRP+`iKcHF^Khn9L2V?Cx&`-e*R-n5bA$HZy-73vhH-`rBqgpa-4Xdm6$DtvhMOh znWE$L!!>r*8}?MGLd!mp>78EWHm1Md4!-BXsYFc>O#LH$d)zsG{riotY>x@NE<YX4 z)7nCI2YyV&Ev$&k%wE03|ERINMBUmsOg|rUXyg$hkId8I_}$uaLzOXmu8TffVZl}> zz3NlEjU2>l!Cnf#mf52JVUGI|@$e_~wW5<3{n0eZ({E2A4xj!&3KPhM9N;#ao)Mul zTC`8yd?$6;y`WvYm~&(UjeEYq4@=irOLnqo=<!(^U>#}~{Utmd_@)f^o&dw`d5<~! z5ai`C;Eih+Jg7gwk9$>?K4f2QpWm-JRRQRMPnnq-Ku~%A9a4?EbSE>0m+`>prexsy z`a0;#t&Q-g`0(&B8`1uZ9NlbXco7dLBVcKOH+3R#CQbmgH?uHt-GxrdH{}R`S1R}F zxNW<8y7Wgy#n>TyU=!nsD+5%)$LBV!H*{ljj^ynmh?iZij!gN_+I`k;XO6!goft0; z$Fj-MHz{pYKHl2>{yDxg97kq5ZL#^`Ia2LmAH}J(RAQ*^X33vcX)!e8%N^;9wE(*} z!I}~e$1`2VC%M0cR~FZJ$lN|GL~0A!-ZqOr9SZv(*l2o|nUjX67|^{dLJV+SFyHS| zo_QBs@XZafH=U~59UBTb63cY5?-KF!*Y2L4Xb`}WBook@^mcEFfoXxND!#R&2v=&R z%abHkfO&WBd#vVGkV2$^M1>qz%;nStpyMCs=MCHpTSz}~kAUHYmnw#xon6||Q)J+a z>1V)$K<K9?!9uP8#SJJ-UY8Hdd?T<{O<NfUo5qCuh#WcUnYjMjJ8jg!Ic2#re<nxQ z_@`<1i3h_jXJZzP1F;k-{8dAcZ*$7N$FKT5g(PztW1iSfn30pYi6ueN^g_I`stz$k zIVQ4e^W@#t%V4tgKa_R`k5M4-{Pssp1n=IVhZCW>yH_&B+v>t*F@z~Bw>6lH#$ILZ zl`AM&f|j)G={J;z<hhv&T20B}-o#jJ`OrfB5#c*WA#X@4V@O-(n7O#=NO^~{)JGBo zK3DZwq9s4{sH$9JSUL2!MZ?Y}s602`SfY7#=)@3LZ7O#sV2J||{*8ZNsd+shZ<ouC z&uM9S;L$r`kgQ7z%wJI;B1uVE%?lx;FDXDNDk{?O*0?ip384Xm^^^5Bstzgeh)!6y z+imNMKs!EGRnJNNqdGD+8wN6=MzF%ymuiB;N$MTxV`;>KfPx<22xyR+fu<{91T3qs zPYulY!{=gYbcIDAU9daem5n8=fRtFmuH%Z8qw7_SmCc+hA87k8zgq|dCgy_PczROy ztBHna$O2`DV4D36{vKjb0<8E5ffW7u-G1<u|8-+j@~Z>!vKWW=9CHDu4LGIm?u_3S zAp(aUV;|A>`QB`9A>VHg5t%^yYXzjSqD;<=t4`5;Z|KEjuhfsiM(B^kpn5}(2B=XU zmM%&I+&U~Qj92Jc;P&==NZS{E2at9rLV>ceX6<}&xF;@HIrDMg<I|BtE;gp`ByT-E zMV>yy8@Canm^s?FqzsE5v+ML=$;*$=$l&htVxR>MDaG;f&$Fj?oyv>Rf+rcfdV0QB zRbi{BfCaWbwujSeg|nc}!y{Aqo(aV+n^N!WQ1J;1hfNf^y=}H6`1Vb2IsGVLwkhr8 zue()d^UNi-@YG+1?t|AYNSMw-Kr9e;zrfFiLt6%WTU7}1lcc}RQ=nWlLZZ>G`c`fa zrVvfO2x(sqLm9%BV+n_ixv$7OE-jYp9+NNReq8OCRG|>*^&|2cMCqn<a;{|cZsqez z(^%{utNT354O7Sx<EO)X$4)|bI?c(9l)bVES=Kjb2z9eXsg1DfJFL&q!+ehD(|`N9 zpJsl`2>1_x-+gu__^Xf_{=I3(#)B$WJx}iWbG$@gRlP+%FTJVM2;F9(4A{ryVrOp) z#iL*VmOI$xMfnlq!ou8zFUNp+=vs2LJuQeamDOLi3+?nQat<>HFysBhiL)j#0dUYG z8X61W+NlC!cOX$^i2Pz^VR2D`cNk*zWw5{7we{w~{d|T-%q1j^zza9$zRH;zJtm|P zZNqM+yvoSDy2?8_iI?cqU~UtI+`V}dVU>wM-^^o2{L=s{d;8Vi{2$KVIxMQ_?HV4s zgrNkbh7yn#k&qY~l(Z0O5$Tl9Atfb5MLGo(De3M;>F(~X0S4yX^LyUsectc-uJ51k zFPJ&QaP~gu?0et$TK8HZMelAG0p<#3dM?YLkk`L{`NgWnw6`}e)2-UvqH|JU7I(YG z-aw7I<Tu9rgI0y#+%~%X<z0q~mhd&!n7Ed?;|ifH-8NI<>uapO4_p4@4Zm=BdAM0i zN=iam<3dgDR56fsnYm(-?JT_nvTK6p7cSAy*Q@nM4r_Rah9;6jMu?75(w_fR0NwEX z1~s@v<GteQ$3kxR&F)nE17M2{lf=-&p@maVidMnUusF8+8e~7723NU@*YHQgg>is> zxc7>R3aqilR-c)HZpA+eR~jytfRuRkVsVCI(rF5|ugFP$>KoL^yRN^GoFnrzHd?<N zLkIyGVNZ8wS2UBnJ@ta=`;ZYFG4oV$&m{lYCy=@hSqowBeIDcvedF?6<5^QK#j7tt zC!s_m`e&KV5BRy^<%{LCscjvvC{NUtm&-fedaoWt_^!v>wCaD_-x9#KM-Vl+<e;|% zh_}BB>Y+bmq`=xGHMCw{W5GGUzj#eRjnpuBeTmbxnbzk05Bj|m>+^<%1tryWlt;ZG zq#=0SpCT08NuZWHsiXbzSv(0v?2R~mAgBu}{lV1c0dx~sIp;}&0nS(2a7CK|erxi< z1RHVy_J1t={A5#+x7az@nOTJ>|KxFDs?IevHTUMfgN6c?Cr@NG-300k1t_T~jd%A$ zyv=qq-VH=z9aEdIu|0Um^OU^*h4xDY<YV`G!z!g&3wwKI=a;v@n%FgD36#sKFDpo= zV?Tcm000Gx8U$ij=|4@zgdZ0l(j}e>N%+N0t*!l`J2N;)hy{<4GddPo1XEHnWa_(n zx2wC`zd8#iL0lY^3}lq-1(c?z1{{y>Jmbjb^&Y%ud~QG2ysEkmDX!LR{D4$knW?6Q z6chU`cTtR7kCSAdWN<2M;ul;M(W)Gt`v%NDgde?v2y;fW<fc=D1gFY-6WbNNma-b# zH;9x*2F4$7JIrpN7odi6p9rJEiqQHD%4GZUKeaCVGcY@^ZZ?x`C{j59@v|ea5w&`n zi)M@F-9Y)}i!}`mJ#Xm~yA5%up5>Y@BU<0u#zIO+Um||15d*M{^xnN0@k;Y3DfxgP zIsOoC@w?o`1{t7I1MvfK7ep9xIftL6RPm1`0QUm04W!OzLD>vk+-5a3-btd0vNA!p z8ApPQ!2$r(t8oY04Reh6o=`w!_~TeageY4zXsMq(>E(Zj7Z!zYMDR6y*Ok%93vxH+ z+pmuz591^>x2Jbqfs*dxtlRwUY?g05w^igG-=Ny3W0SC6{$rR=?Ei<4<EH{qpOqQX z+n42jZR{>nHOs}|%9Ha1_Z)YEB;9OHpLE}eEw1V0SfKT7C94p(XA}<~^p#N+N!m^G zdDZ!o?oD@(IJ#=0=h@0?=^4#o5;v-Kc3SE+_@vO?*425K%)GO3q$_mKcX7PbhPSb< zFH)hdqw>HUE`NF`e^8}VM1O5`{jV|oU|Jx36LF)tm??zZHaebqMm={*-syO8W{7#X zTDD;6tzK{+%KjiZgr8Huc>T?>7~GhQpv%pdzmncZo5yal?(VFV6o8ojr<r5@TvS4W zesFMbV{g-6jeAFDVqk%Jyb6#3$>j!yhg(xXFD$S=2_moaIbz3r0Yp$p2wPF@){4;N zpJZkicCc7v19YL%W-b!InI~@wLZi&+b*t4rW{X|ajT7NJZEAh~f@{fJdz*>{7px+o zQDKMq`)%2{Wgv>t_*bQ9bS*7`<TBF;O@xx<BL#Q_Fvd_*!~>%7Z%cFlRcKJ)eVkBk zuM^8x9tc*2nWIEXOy|#q4`hp<R@A%t`#Zn#ypH+$b@lvpf%Y=+hpP%nP;!ox6ZDnV zebkg|ev?a-7cFQV!=V}o9`~n~#C<+yrvJRY{%D;s|F{*Qxe%hw10wJx<Mjkx3~uc! zHuAea-ve+~<ySPUhX1rk+Lw?Xc0p`~`@y%#=6c?HjmQSotlCv4N@C@bAa>cmF)%XH zhIyjcO)qgKkiAArHRA~XJ>$kV>HePzxs6C6p&y=V0cmOim^V4hx9Q(m@^^;y23p2; zk)9;D<3o_OwPAYPAmo`mF^B?}?XlR6ygUCk4}cP>e^|F;o03xItf?G8actsjUhjIL z7n=;y-qA)5=2_jRdN)>}r;Hr0oK})q;xKdMbsJJoC;L3218KS_RgVP8!Vh|p^q)U( zLnJm83(Q>p0Kk%T8t-pdk2+VClfZFnzv`3BrLFjiPn6!r<4hmXj4T(>z1Yvwc85}> zuf{bO*C>rduhP)cVYyKxz5ShV+vk*uw*s%DnfyRmp~T1+$J0f)=jmkO!F=6%(?fgG z@W&)4({7w`1a{_}{-a~ngLVl`bILbRz-1s~yp~q#B=WtAb+~J3VSrguimh$g3SF+} z?F3r#=Pzgp+xrPd8y$IRi+tCOS}q9|JV(-4g3>{BcRoF3kx1FCU6p``mvX`v7|0Qu zIEW{0Z7WsjgUZa9NiZ!TZtLvCF=mszLGP73i$Yv~llxcNd9UN`MnEuq>Gsxk>%zj2 z-Ai2ph}gO)ZRhjkg;8gRDerFk3k`Be<qnqL!ao6WII8Z;&XxDA^M=blcDuQ)T9#;( zC&N6dTv_-g&?}o=BDlFA%@pPrbv+hQk8aaIUTj}cZTz8>bkUdeZ5k)UZsMyhVX;MV zVbeD^(ogz$1lggmOB|P#j&jYXs?Ns~Zv=d`LV@q(vquwEj%@eC-&bN2ZzHa^VOYgv z{_`7#8yg3;U6XOJAccwcCaDgNw~TajEudLmlqG~IR}4`RhNaVq3!#1d_)dJ%>>n`+ zDMnR;UxPzKEoy2}?*Q8%PQ=w<MV|pYltE~>2UUq=CzoYv1qB6av(-*wE?Y&QVbYks zB4Q7P%#(f?w)HR$=tG2G!C%Haxl?zOL)+=wtI_rNOi#cNF-(%cE?l``5C0&TwQSl> z2Zy+?709lM?w2e}zW*UK^O>H<6QJd_V}Hc`ie6ps5B2|h#w!d6!+_i^bEypZUOM>b zQStUh;Tr1SO+6h5mA4EaFzzlBpR1-r+LYty7g`~*y&p2N0^iu3vnzs_2on5_`Yy7w zAx~oGfaZh0xj1|zFbUV0a7GC`yjivfU%<H%gKH5Yj_}~lu1l&=l1=K{TT;xDvi*Q7 zVr%g7Ih$;;?(%kk{qA6k3Df{EcS|%g%RA#YL+oF0{TI)3TMx0P=T8b!!Sh%2dw>TN ze-+mNoypqQZPq8Nt0;*j;t)!L*6!6tsN%{vf|Kj+?`HXsz-z&ICz9;#Z(d!mvOBK4 zh@9i+4|WdHZ|g#ANqj|aEmDl3FO`GH6P_0;^H%netV)oIOzHmuWGnt)UINQIH+Nj! z9oF>eIaIW+o{|I*QTjhzpVBVFx={uw&o)ffHk2L)(<B}*kRR@2-Tr@)=@TCsSo$_F zexYg#s56l?9jHkMD3id|f9TB^j(t<hWyE`V41@IxjBvY=`X(J_kf^IGws;?@6!r<Q zp;z>873oljtU`Z7ACwH8HV&culQY&<*?uE7E^x$KFOB9e1*Wht2vUZLTT_L=|6$G( z_ZCr?ApgIZ^Y}isUS6>=%zFyo|2KpL1DM+O8?>T&$`e3=_pE1v2ue!cDxKVMo3pC~ zW*N+u9Hcq`AiB%MM8ms<`3yjOl$S4#lP6qjQzSI)RX*u{$~@i1TTde?>%%ZB6<C|Q z-R7D>MDkc{r&V0_Svu_OCKw%^01y+{aq%105tdH!Zb6xUqiz11zYh>dMR6IR@82Lj z|63Di=f?N0p3f~GI;6$+2CEV&6)8LU9f@xmJ&xME3sY8C|FnSe2P_W#1bRAekln>s zAGetZ{x`uLMK5RZ-~4vKU%qu6n21Y-AJHNw(%aVxg+~_op5{X!asd-Q7mq=g&?lwV zSuwLx4@EPIqA#R8256qY(EqeM45N$8uUp9k2?cM-L(&1?3(&S_4qIB}Fg!c*bETDI zoCQ}O0&+@UV$bD4hHOx=0}&qG0}Nu~bVMA+8&Ajdi1=#TTkP=o&Y%x|!y_<!YJYlp z^gZz=45CCj@uA=!ak6mm+I`b|$h#j|PC5Ykwd9(Xjvyf+!Nk!L9ffM53)D$RL|9le zQY`69@`s3aXkWwOEAHESHQW5CMJU2=)M{0fIP(SqG9=8NwBLK}p*wI(sb;@rA`<k! zDV2vOP|v$<0Opd+CaB0+LYJQJI;tmMT=sV{$`N8wYT*)R2FPgX6=-3V+tioam7})C zD)jPmrN*XSOx1kQt+a5Pp4wH^lqxK+wymTsFCRO7>XrR1!lGWGnlO)$QeiKMot#i5 zc^=j(p(a;_Yi9D=T{_MCbKS#)^{a;YzVn3hD8VP^+ud4g-^<78dExP1IYkaAYQ@11 z)yYwzp~fUt0zky$OjPbjLR>tdj-(wbi14n~*XT7B0`Fr){@-;9^$IeA(f|o9Kl}Qj z;$%E%VFB6X67b%FG)>9xu$>(>i!Pxl(9uZr-f812>?*O)OeqF`6Vd_Ww^#x3Y{9pi zLvZe2u6CtvlHzx8K$Sa`8a%qG`T=c=9AK@W;GQIT{TJ9c07+z>O1qTqF$KB9B=lxV zax(7f`cyG6y8%V}%yR4cVNmnfnJgvv_wV11xSSkETr&`l#&lFVJuFqlFEPJ3TIHxX z>L!Xr!tNZRL(%*EXuVO~8gM>YbqTt(O`%bL8rD7J9x3Wlj{lU-Ia?8hz`q>#+8dq{ z7!MK1JiBF}pnyBgZ=^Ngbhy>bDkSuIt>XL~j|GX<``$S03b+LL`KdFPn)mOOG6Y%R z(_{XJKLr}cEe%b;=ciyp_q`xbi{~yB0;Frg)35!21aXFW=cf)$1ey-Au#5eDx~&pI zY16Bcg+TTaRJrcbC8wk~u6FJpoW;WyKIH<Fdi~n$6(1@M{zAq%#jA_xz@#=Ds<oR& zrcR?vXA*7BKB_WQ5jZ5^zAFVR00uJ0Tj%FtjEsysuzu|uP2Urbs+!u;P4FjhhHK-L z^wqS_pXCS`#QZ|CE14TavCVx=I99Z^&hqX&BGxG*OcJrBj6}yOGi3lodT<0-8EI;| zdwK!{HSF3DNMy-}kP-FludjC=;S&&Gbk9@YydkXep~rIO%z+CNN$UldWcdDNJ4r|* zo;<P(kJzrr=*<CMA<aF;ZD`D_l!xb6BMnNATSxQzIATo+j946Y5BM+FQ(!C?gX^)U zJP*-18J|ji=u}w>@}8KJIJh4x0iT43zxGF2{WuWaq@=6M`}XNrGke0B$Sx*`%wen) zm-HWko_e(3jg9O)e2s`zR8+FT`F<e^$>=+GK>@giwtI*|<WK8gjwgXGItNo;a?fxe zpb>APpB;JXs&5g~G;SJLZC;=8`}c3<#68r#W+bn{^k-7Jw{7U0DtZ)rLH!F2!Lzb_ z9EYWkmYxNslD~XWQ5X8Yw~yXD36S!S^g_P*br$baCK>wE*6cblqUtJZaA3^#wcq!W zulu?S&4C1)@as*@kz{eF4QseBL0|)3`ReP%g+AOR?$KAW)-XsM+B(E-u;FHTftxY| zj4Ox_h2w<+rqUyrKL+~YL{`cXhSBYB=OEt`U%%3zgG^tg$;@iu{XDn8Tvx3T-Xls% z@&nbHCv+ZkiZ0~~DE5U{uU}`?M1b;iKZn2Iqer(vf{qITSJQQxnwG%yJxi04UTf@; zNJ+-_Cj8N(S6X`%=y`)1m=+ZmMI$j|%q!Iw*>`V23Z27@ter~L6&9uz4Nf+i4yCLh zTOYYGgXY%I7{oG3Kc#6@&me%mzl1qO_`QevejN0lm92W}a(h0zNXA+0*k|w<CEA>L zd_|xhlvVoh@h$w9-;8LI(<0{opo3TN#s12?d1IsdLO(fO-F^)PQkW!Bd$VC+EyWV6 zg1b6jX%F-Hun#*t*`DNuz42k^<-G-2NcbA8-rgSYP4=nIomns(2p2y;K4c6iK8P;& zx|uEc|3E7||11bKVY_LpMZt}+Y%JaZiy*^0e3?EeI|pk-YnsOS3(Ce!xbumOA&IVR zH-@8fSTf1Une_%ps-{n9#X*nw-SqDkxE@BO!k?rXT=pfu!!)m9Hws;p2qkTZmn2J} zoR+T>`2&1E#m3(HtQ$BIF=$gW(9&o%%I&$@^HoJdLkXB!PVZ|03kq;v@7DjNfY@7W zECL|P%Y!koWUi#}N7iG-0N}A}-!Z<&WEdCx^F{7aPvhcUQO{Od&mLg^!g2hsrM2~N zP#IRT4(PW)mL4Bt6QZq6)2cbE8Ypd_!iR%Y2edZzsw&ol9-bnMR!s{1Ya=5~is^zs z8PG`NJTaOCx8Zue2$DE{6N;o5DWg9ezn))4q`5QL8;-li?M}!pSFiu(iNv~DEAW!s zpmjq;oT@SfR`Vf>tSGW+#5|IryKEFC^XT$zp0nfqG@tNm{UXcecI(qRG*K0*GO{wm z((ZlqlNp0WW6`HtzSycJ-l(=a8`D#GtE(nQVz8;d?L=Xv_D7tkYutIz#6Jkwv4DH! ze$Y%1o1EOoGz}WJhK7e@6B5FJwWn-=F&L1~>DDVT35ix?L1ti)1;0VEt^G@h025id z2}~^ZB?#ZJr~wxe;c7cD%Rs-Mf|AnY&)y0UpPxJuq-fMk!%3a@$BIb5-53@Tk@X}2 z?1m%N<5k$X`1pdOqoLsu5tBjy_PqNCzDI}F^OwDXkqh4(Z=$8~2J}&`I}@^+z!nOe z<c>H{QNU=AF-6?kplN25uuw}O*0~bSd^x1WJ@}f1{P3zF9lL(=XvV4kkUK!ZTcJ?H z!qT>L3(eK}t)2+^ew?Py^X$Eaoj&%t*gUK0Kd2z9icFg(mv12>@NSE#5|>@+=~Mh= zZRMXIhod`f|8_S*6t5_l;*c#_NOLVC{YN<?osWbaP*(SuyCMQMke}y3`tw*q0ua6r zPKGtltJ(m64>NH<lbr3*qp#zfjz6A15zs02GjKFwja@j|90qn;@{W#<(I*%ag0)IH zQ*R$1%RLv+@e!%SCSpGq3HrOePe)$^2dQ)};^Xyxf~J#J8&3g7<cYZP*2{&t^#ZD< z<23B2@6*nHWM>a#@2>;Z%XCXR(1fWebxIu&7zi%pEeQ#UF|$8jvW=`0$_Mq<sCiB4 z>N{m<QCmtdwYz9(W&ay3jTZ_S#pqTZLU;T7h5hHPm2VB*-<A<#?ei)At+g)k?S7YM zDH`y%?z!cwxmsesYDZvy@an7e)TdkHwbm2|bI<Dpb%X3%>l}O<VAykd;WMN~5M!Id zfkOdb$T0Mr)&QR=iRn}0hR}qQp6)cu2bX|og`n<bZ}+>TmSHesh3LAVl}cQb-qT-7 z+My@5yItjj%wj%z5@70^N4v4c^XVqNp>!{rQTx(9QABMFJJXfX8k+k|Co&bm4+uo1 zq@)-@hw1VU)ZdHh1K7h3lNv=|R^J!7WIbf)2k*#fXg-3;`~nC_l9I`@0qek724c+Z zD_@P~LpC!6y<m-H1_#P{czJ)1f7qm|Z%e7|K+Cw<FyZ1aA*jgwm*7}NH~VgMxWL;j zbnbv+Ph9(xSJW%{Bosf>yc6{~Lw*NU=U4Z8JhX`UgJ<Vy^HW;_O{knSId|{=XLX;y zMsP;)IQExVNj9u=m38m`aaFY6uuEE-lBSMX&@HmWf+&RGK)Ecvjg*(M-d859AY%d? zVR_?a=>@GvTKN@ZSqrGOimGZs$wCb>2Pa1pf<;2o=Q!+XPZ|hF?|G7f`;QWAzz>d( zaUg*33fU09m69Dt;nCBK3sKE+IRw^ck?O-1!a5Z;ce(B7%D&G9rt$dVl=Y%&z8WN@ zQhI@Q(DYHO#r=I~m_mTd{VTQh{=_v+Kk@SmMjRU1Fa>M`0s$(QV@#jddy+)e6E~|o zHg98QsRivf+G1LO#xj24P`q%M<|lyGdqi;)Jji-kbk!JA>L<5Q@!wp4B*Is}^1FN` z@Q9x0K=)GT?HP2}suv#j?&u0c(hOQ>)ha{G@;-gP=-`MXV}OEyyd5vuLH6-3H<|C# z!RZ?c+}M1o!q*Q-3NKX@LO=0!dj2!PJx@LT7_HETzvQLlRigew-jY&yJ-(_ob6BOd zeXy{z+LlpiV*1&DaOF{lJ=qZM);?PYxW%Ygu>B?`KFAWxlharElw_ZI^jiqL9NWep z$0a_Y4qJC)w#(u1+k0jwYB%GTmBq%PksSIWSEJ-FFQ{PwV@ILKj~`DwqU<It&p7F9 zYi}P6LW3Q}#Mxoz9eU~@`qfpP>mk*=f}g=Nujkl&1~V0BQIiFMlpIDzMu}dtBb9S< zpvA*$wzyajXsFx;?dff~5?|!0;QYKue=j~E!T>^OiNE!04Gl7phKrmh3AgfK1H5|< zy)fkN#r*U%Jy7-Wxq|aVZ1JR?;aj7ikTfCn)PPPz!?pca$lgRrpf9fw<hc<XY*gFS z9SMgCD&G+x681StbqIlPNqU;sp7>cApbAG0el^i=dzokb>(ECQFLk;3V>@(mI6O=V z+>Z2f=N%xJP!ly6w6vs3fN;a(w^B!HO&_C&yJAoQl0_F?+h}owUI+#I!8wN?<i$fL z$Ff$f3qF6s1$u$krGHbz#btLK8}KSc>8r5s(Cd-;{ruWk-)?_^O{jCLAzD(B4n!Oe z504QL9xMR^2xCYmc$au?Vj>i*o4_9}@;Mi^v#~L=Fx}r6oOFPu0gYB$+k)=GY2dDt z_wzKQsP2z)4QK!dpCMx`q$?A2yz;|P!&7&m*iC0>Q?tzrDtLgjLW~+tXjmB5e=Klz z30Pf!j#?p+g46A{s-Q7`RBlTRH+0!3M8pk@mM+}--o5%uBaqy0cXJZlP9oSs-+gFy ztA5R#sJ;y|!J|(Fvk{*brs2FGpwae4L5b>LhB%4VwVYk7_K_OfY_xVX%RPR?G|vc? zx1%V2Ya4i9nZnpRz{F^6LEhUJ`7^Gk*2cVLerRfJ-M-6_ztP#sJFT&VMgeuiKfPGH z{MN#@v7L$P57c3G+iBy;;v$Epb-`|BjN2qxcJiFNM<`V+pKvSVV|}~=ZR-z-U{<vA zg8@>Yo&Vlm8hfuKBfW83vfRd`sF6M#`KD!M!(xo->(gM+)$_Iux=||rGHXzVHMaP# z;X|`N82}(zgI=@tm5q&?JDvobd!|ws+3iQ@0wg-MsYx0ks&iP1t9m0!+gMf9$V41` z-!lyDeKpUG<qg&~eF46YH92&es8y<CX}E$tlCY;p^jH+x@|zr3LMkbPH==1pmr~!2 zhF+Io7kOVk(7UQN)Q#*sXV^v8TpMG?_dxb}Sw;C`guLwcyI;-zw2e1LdA8b#{%xqL za&@PbddN)*wtNSbv~IV$qZ;e0aKI~aDqlk73ZJGNCuP4x1pLn~PFoO6ZtlH=e%)i5 zcLCWt7nclk-bekgonkXfI$xwh7*G?>?B-Hx+7G}ITy4om*EXGoNScOsmtejT?w#3| z_`?#p4wbU*&~BAG_}Xo%#YN3=p$q&Vua@L8v<9xu_d~SvSMNc9cgW6s<NVTLM0GXI z@Oz=V`z_87L}`I<pt<dzwvzo?7pWf0f#QV_%i)|s&?4fmlqCzqIl;Cj_S-jnJC7ox z#)k0^cLl{9Iqgrk5US|)0>i)71%02<f7|Urw+ZS3R(uD2aRw6f?-zY+JL{$MH#o6+ zmDo@3eegx{fWR!j_wh9|?C)`^mO(IiwF{5$#EH-caPy7bNH-ec|2*F?v}GV}@ZHCT zEC2>gNNG|Yfo6wk&Y9bgO?J_UmvHi|!bJ5Vp@1vuAdFI1UCM44$7$5ole#R?b7#f@ zm#QP${J5ER&V9@0?D%W`>%pn9kKht%<9eJUXfa>Q5ebXl=#En#s`g!+5@B};uwNM~ z(D`FZ1c<W)LnuY1l>1+wx+)~c$I}Ad0C+P5*#G|4EhpY@gbRDkA<#aU7n_@#cg7#} z6ob}YTU*<Mv$K!+5hOr=Tz#lB_@hbp=X*Q#;yQ;9*PUD({h$9dwG~=-w|_y|)6*kp zKUc@HI*DuM`(4UQ1iVpf+>BkZIapT*x<K>|^mS^hJxYj^tB&n=(X!!bk8Yx`F0FaN zrVD|_;qWDIL2DBkQ*c&b^3H`6Q?==8Dp<{2#5p!iv$dj-RlXHLY;VH@+jR|~C#+Te zs{BAVHWD0Mlppsh2_*Kf$spcJ+{-D-Wa*d(+Nr~h-g;4>;<t?KM0705hb(OEk-5m< z9^)u#erVvO@&3jaM?*TzKMe+)=iJRMKKxcU!~w@4O_S;)^uezzZ0$ZK)zT_Gt32FT zx~FrBdg@H44*T=?ld!f_BV{zdVZgHyTQRXPK_|RnYKF&l489i?3_#;`z1%FP@Mp(z zG@J~=!P;Ai4ui{eerlc8{M!yrLaWH~ZIa>N>wfx;<B_ryi4rhD!jB%Y@bQs?0w!xL zVF(na1X@dh&ogFc-x>mKot<R_hk(CV9p6i}!V<4@JK=3-2il0iu`ztFkV1-L)-`yC zy8YN@F*pP!6Ef_&$Kd>T-_%v4y}mF>#q`gW4Di!d`a~CODdEP-Rg48D#k@D{wetmr zL&W;N*5}F<AVTSxnVHHSUY?#U>g)mafjCoBQw#hw%cibp={*aD2WaNEpU^zq+(F0i zn&n3Fn@TJ4zM(5Ai&&~)RK?-M^*Xw(Fa;r(*N1hk@m{HS_sQ^5N+4+fS%AAwtmt)! z2NT5axJUcT$ZSg~4;sHfJ7O0-5&F%Q&I>V0HuVv6y;2QqFF{0aYCiv75Y-`t;*}uG zF&qwf)ws>%*?5gs;0QEUak>vv4U7drpeV3w6c1u-ubj|_u6<wkH{3+kn*PkzY;04% zY!AovrEZ*3An>fc<)M+C6hU=kKAR8hRGKnfU<-@NOwEAP7V#`gsd;+ZtBYYx@I2(5 zveX#I!(N%q#8WNnG9;p87;Lx>jrM)IuEK@0pM>z1jKGeLj<}AJfa501baVYTxr}ts zWC2Xk2Bsy(HKdVjtgIWV@%+yyC@9KOQW$~Jt+C*pfw?&{C=?oJCM}J`$F_S&KaPJi zX(1di;SDtOSSE#+(6!Uxre}tzC5e2B`tTMw>@e<|yf|bNq-{>lS9|4_w?qH|sYUL2 zJSy}jSsx@YGn18AkkLm6<dR{Uj~zH_sfNv`-kl*H2Y9LFz0%Q7-Z3^`C-kaKjo%j@ z5~PzD7_&3IXsyNngmLTzws3Vs%$S_XuA=6E`_GyM38NyMqJ;2up*|KQ)bdfA9Y4pq z1HlquHT!g#<*<dh`MP1Wb-Au=pdT2ol%!<3cK+m`2V`O&KM>2jKXo-Fjb6o*2PfnB zAKv|t2Ac(WRNn(IsD8BeK7sq$&YNF9QX1ZYG3+zgq@QI!_=VVi`MNF2ZBY>gSpeD4 z%YYMUaAN+q;i_VBvtf1HO3B@O4BV@JZ^0lSG)XemokXDQ#MRIiP4b$P!1V@3n!eOQ z%D^S@j|{p_#ec67^wIs2zHTm8R_RNXq6hoGojmx_%Kcasaw@7;1Udvyg`E<YfFS9B zfPg@rHTG8CN1;0oINg(_=J)qrAb`+_iHV5~4GNNzBkNAoha)(@L;y;kRaYo@9;svC z>TGjP-Ur?-;R-6OfXC{b;oP0NWtMpu|7e$mCVy!X!TlPF?FL~jk8#^FA{t0mN#OO2 zW%gwJk7Zn7kDQJy{OY*4KlPD_ii26!6E-q_!RR0_NRF5w23kFYP^h`R7<dwZ`8)f) zdy_$F&NogM)teOxYHE>xk8Fv+XE<aBw3FFx%pF9Lh$i|aUAbqgI(g+ES?&r_=au7A zzvcDg5n0@}?k->v=p2Q1;d-U-SNqBBbq#=hjc!p&AP(f3ZxMz+Wq(&aQL?(YJ&L-1 zSH`wCrTcH-Yzm<-Zbjd@y}uVI+9BP}(J{DM1&^4oT5iW--K}Wh^Q8VGpx@kgpK8D> zUlLK}UXbd!Z)tv6otsjV2(OK<ul;=+bMJM=@9LcYkS&JPnR)`>v8_;}Qi*5I$0B2h zcj-4ZeF<c+hs5XoWu1lfQr3RnS)vr|oqJ}!LM^+Xql9B~#S74efPWo(HW5dD^!Hq- z%UnV^^M!~&bnREnd0~o)Tv)&X;W5OS`2!`MF)L_NKkR2ocq>J=;>!AAh&}Hg4qmV) zq)7tXso`2cnSq-~S@tapMB?}MQyjl8^t+*PqAql0Ym^F4(nve>_de!b8x9{ISmQd$ z4;M8f`IYP^5Wj#HIbdj(^yrykowjCJyGdfNJ<o}2>m)bf$ypg9*9r?Pz#`B(h}N@b zSbzYm8psmV7K&Cs+}}gXjzicu)&E#7l;F15tLhOGlXxAFa^6UETSiGNB2-0d`EZ(2 z)*9oIzZqLg>^Wb|TVjq8$(O&=!sd!qamcdvx&<k&tn4(J_lz(^uO*56#6z7HR9XOw zMrT){KzqBHy2*D^(ha~$deThPZticR>W}BT1=`1kWI^-Ki`T<5wNU!El+n4M%24aN zYjV!W7MHvZB0eZZgL|J%OzaK-cuv5s&s~6^B`r0T3>>IHzXN8&gk)q&AUH62AILT% zs|D9*D(%x^oM}p&H=l!B@{|jjA-IILn^C`kIj^Sx1ADNW2kmKQe-ndSm7`fNe#GNW z2YqD*KR3W@6JXdJ8XX-1MCj`-1-?Gr1fFle!2Qh%+j|O-;)7RIB`XmaTj!WwQ<^|2 z3U)x-cvEV2_|KlGwHpo2(HX#X^r)_=5!@AgULGDyd)M>l&)xY5TIQ!a@^Hb%B;Wx0 zC2rh>*~=d+NCdh}-k{=)vy5^(L8n{!fu;ll3g-CI1B+Jj_?x?gbcu-=!2-|)F7mgv zRepeZV{L6LP_t+}$y@Z!tsQY-6H|AbCgnB8{;ABz%iZ0N*UZ?$z7s4C9_yl=4##jv zT(17{y~3_xph>@C%Qn({kd(&BzK6?6>+?0F;6e$7-rq*#zYf6i>*`XWgM1S(ih6D2 za~mQv+_Hyrt_K#rYW;sS`nI;aj0st;xi(e9tBBkS|HWN2MdX5=|0`^jXVjz+5HbM8 z*LWC6zdLRY-Gj8?v+~0sNF*}7A$2lwmIj5(egL4Pu_%y=Y8lfgVL>u%jEmr2XEuo| z^+1Hw??Bd}4SnllK3Z8Ypq3PeMkYMdg3=v4C^FBeEfUS<!50JZfDm9RDjPr^pN7k{ z*HRRu$K{)DzHoeW)PiviW>b#BWM(|X0r*W|Ea0CTFSZ1WId71I=3gvAdO~FsyzUwv zK;b|UFP7qJ(*R}MTaR(kulkx3w6<RfjmhNF1+Cnytk}ROcjxasy{XXMD|%_WwmBpK zp(fn+=-j=JainlyZ&20c<+qii7@C3q%i+a(nmm7eR>e2;ZhD`MzZyp?c-L{Ii-O9l zZ};{elvnG2AgJ??Kz!<~TU<nBYz^z6vJJs$Qx%6Ae37}i;Beo2hcjy~pAhqEhNN0# zJ&ijB>qqMVl0caF%M21&E64*Gwzd8=`=b*$;>KG+QSt3;jmu8;iscvR_v5$)<%N|M zb}sn%$JO5WEO2gsz5wz2ADHYq9LLBNR8`;gr%GXjMj&IUs|H@Tk8C?b(IJ)Szp-&~ z@|_(W0d;+WB?Cyl1AzO@+^6q57KrP%>3~VyOQi7<XHj7af|NWASdk?MFFc=?sb65F z%XRX$ic{ZUJ@QY4W8nyH;$(6ud4p}lgl_`qDVR$o1YMYxb_h))@&H(|KK{2V;LVOj zIDsny;5zAE*-*1$3N+Ln?Iase6zrTdBIip2oQ!T|nAJvth^=4a{KSF&!-o$Wp`oEn zJn5kBlwMe<;o$rHiks(ospU#7pOt^JER`i%i(`N8gQ)O`P}U)jY8e+#qs^nnSAoXh zx!dr=AvlORp=mo;TIkd43)&&>VY;2AgcU&}+x6sowB!*X(4zadhw7cpm>3?WQdCp~ z_e)GV3iy2T+B-N1J`~{MA;GG&XY<=@I|<=vHqRFn87cAzl0JUHqBp1R=r}9lJo(bV zfKTUcBog6%)hK$n$UrL$0WxI+%N?Hr_4)T5e^*q{fM(~?FvuIqrowk3i<K)ldW6hB zeKzT)pCQ{>og18PofY+WW}A}*WRu(vzznJ6%bSaY5o|1(@h)fojS>8O#erX82jKK} z%qdZx68yp{3#IK0>2t=Gr&zNWssV>@YAX0%zk?k%-v5|{_MeMSy)5AU^qyp7bTlJ7 zJ6pMCKt1C+ENx)mr?>=qWQ+XO4A#gNFN}8TTZik}BWj&`N;N|{>~MN@#cz_Irm+7D zMgq>#qobo7n{uoGN5cH}h#aiC!tL!39x>DVf2j;3HPA$39OXYmBN50;xQNKN8nEg@ zOG;lI8-e<h3us+s!ue$L>WVF<+mr@R8JKri$%6y$Ei<oW@N*Bb+@PE<zX>)#5xcl@ zto7tKQ$!Fos_fd37e;WHP*0D*3k6dbE1WCVc|3b;y#E_A68QfE8L7ABR8`%PIj6Y~ zu%?dq{k}FFRWznQS9S*g#Rq5bfmx`cF$qWuUvp8DhbdTCTFM$4rvAP7n<Tq$3QOlp zgx@B{W2D>+9tuzrww|WAZn8Mj+3V)6@)GlBp#9*6tZLhIeji4YeV^L6tsg$}PHULu zw=S_Q(0q2bvf>8d7RA^p?i6q(URpA-nX9{-uU(K?X+O`evj(zDDaFf&8WuTc7MBUE z*LOj|KlQN-cM*y{)iF!dJ0sW7eGyMg{7H$|o_<hBNRp%_5TyAJFy!rx%&rK1AuSzx zc+v)-BsGNvj8+6twZ2PVYA6E&khO%-4BHKC?#8Iz^AY3SyJ2uZUEp|>9vVvMebmkA z49rt1Y^OQCqk&8CU+DrT0&GSgNLuT*pMyo%qlrn%6qJ<yU|aAU;(XUluO_@f9rt58 zI*hJM<?$#)j|{c5@olqZC!cXF(Nb>S`%dZ@Hf(9|P68z_HIc{#L56tBj88;?$tf#m z6<eTN0GbRIpkf3pQzelLfdDcyi?#)`0b*kpFdG52wjja)fLol5=D%Lt*|`<i><7dL zP{`%z?-FkO0JrGNi3a+<Z{EDAJGi>M99pS)`}S=f@X=OL3GJ?l1IdPYZ=k^34LL2X za-0y{b>~hJf2@iYFpY-6VAQm<rSG4=c=6D*RtXaiG=Yt|5~T51<9sg(qhnIl8AQ&) z4_{;v)TGr7`g>vMd-2|8@=rU*lBx}Jaz&5C-Rn2H1B5+Mat>8rq?FnO*@sk%2h+jQ zZTWn7_)*3A9bC3ElSK3O=jQoH0(QUuH*h1i4*c0MquklujZI7>mQHH}SHB*l(Lk^Z zXe)s2K5){e17ia4=3cDt$;KedF=m`I+d!8M=yzi793Urw+{!NkX6zt9g2({%+YF)f z<oOJ=$`XGoA%JkgfG{a2wdbaK5;r$DgE{^PQabBWK<EUaJSJe_KPx}D-s=5HqS4oe zpiL=&PrJzQ6DD$AU6pnM`5|}Gwl$Q#L{**Kq0_ElKhJ#<y|DCZ<eNXi_Vkd6&z z)($zYJOQmgEb>Or^ZY$}XSKkcARetrLH)ULKJ^NC(GSkpa`KX*AAyBKvlAE+132dW zzy4tK_Xjk?7c1)@f`fxgrc=QUT{=z4DCPM@^B0!C!&7!j%sZ~&;HfTuU~?$Cw)$fh znlCK6u@MeJ3ST&^X@|Dcws0k>5q{8ZPv(@t`M%_RFAd8EZvc-k*yqyNE|X-hxq-8* zV}!}PiKPSa0o;bg0<6+=QP5)6_VG4k1G4@3I?M4n54cAE2i$N)7F`HBf8JYP56Q{l zn5)2JLG^y)dp9ghNBWIV?<2q__;QY$?R{r^3Q3K_qyQ!YWXulE&uP6MYO8`C3h*na z<h|cz@hGhG7|u?JN}{y}>Ez-rA^;=brmg*F{z>tpB7X-Qp)|quN?eu;zR6a+%KOhP zzB^5__L~TB3Ogs8DjRtA&Q8!a-BPgJ5bG9E@A;YP^oW3@(o8b~Wg?JkctH>@P0)<N z1!T^-MEyL5>;Z`oJo*!6-++c>(8rINSy?!c34aRAQ>1mNScM{hGPPAi!#gI@nP<2J zI=A8t<!sgY!hIsVvITU@EV@wh-p8N1U0%$4k^r2w6MR<_9~D62V^!L|g$)26BsIt~ zb!3-vsA>V~T5|YTRJ~^fl<3P6w=4G$_V)WszI2CRZ^BtFKxs@uOst06@BJ8iGhS6y z^_}%wdCREMHmFYFX3QE~8r1Kncb*1?das|U5);|ofUVt|xf>?(-*`WL9FrKX<)w`0 z*Rav)cK-RiMehl6K=@OUs2iLb3J=MVRzPQ?EC*I$48pNduhis9JN%x$()7Km&_(vH zN+Gd|%bRWz<*pd<xMNigfb|0C`=JJNz;*vVupJW-Uk3>r@R-6pe852P#Zypv1%0e_ zHqW0Tu@(v{=Rdxjn!R}X;>99Q(N63Q`1=5;@9{PbSTZ!P03rZDQZP-VhTeyY+T=k2 zD(snq<<vAp0riu35Ol4N1mxu4YdMnd%4lgb40JS6ph-3mlrJl7r<Do}>l4?AA#RE^ zs_TbX$J-yG-%!dmTwMLxti;W*VO@Hy?VCVMmZ)+SUhio5COm)K{?9rX_l(3N+^@#} zlEmNA2>eZZmyFW#O}IcO9;dzjh7Gy;w+bao6f?dtOp>`Dp4l1lv8A(<;Kz?2ghXU! z(NEYZ0iFgLoGr?ym_((|C$t9UT~c*L22DJHo|dWf9O!grqJ-1NWo5nb0+m$Iq?m4L z)iU%$b#P$7Z)e9w*7aU4R}T`#^V${k#89&|H-7=ylLG78q<XWy@BX0NKgJI-|L(y- z?}MAQYlNn8dix33&ds7BS~@zR^<L+h#l`Et;697U!{xwBMk7?<^{fmqSZo@r0{eQM z#gZRfAH=IG2%q7sl8Ip5X{Jz3VLAJ-<@+S%4M5MX+Rs_9dIVmM<mItA#%<3CG*lA6 zE1^Tl^PgwyGsfu_!f*2wAD8wEzMJxa_znFLid>X*EHG+Jy+)0`HY!O2k-8oTK=Qu% zV=9Axf=7uw+n<ldBcVAF^L-#XegwTwEaB!u=6Uf@zQVuvYhq$Jked7>(%#wG`nUaV z?!VN)!%6c8h&_E^5T4i{md=xEAiV`k^Z9s{t0`~!=B_jv<zzEka~m=&`eW3pnQ#Am z9svVfo1lL3_3Tf`M$U1EBRHh)`fM6lVJU*vvu;YGwJd?^W;iEjh_vSkmz=yj*mk#) z0He>sS17#-8(C-Plb8#yRuCNe)}p6*^?>3bSTa08iW?A#tFEe=MMT?7r778b8M^N; zMp=SuBFd&<X9rZ8)3IcDUG_>=5;SZDpS(sYyxaA$-sIWhkzZ=eYzQbnFZgj=dKT(@ zeaOkqK0w8ZpP^XP$t6+iE6z*20N6&GDPUMt2@jt+EP|qbJFQXMVr$6a>S}w`V>VT} z;E)hNM3wpRd~q=ZrsV1QSi3+s*jS_Bt)M&l`uv%;_D4{Ek0c>gEY%1Bz333X%1TjC zCtujzC56~rRt;#atQsol>r4KTMq~5*eAWT}*%;!<_vYk&;K%y($50ywq)UKTuB9)b zYoeTlN9j{QIosG}OV4edNN|Cos;b=epQjQu{l2aO0n(Lvq0Zx2tw-<Y%a+mh;PRxE zcJ4WF&sn3BT8D)6>PNjn&Sol<&|WS?Kmzn;0mtUeifAWrWdyQb9;@pnAR*i_Pf#1n zGWx9ci~@VcI&Nwn5VX{6*t`^u@M4qb>+0$k@zOKvKHjE3ZsyQ`=6N(BwDshc&%$WN zP%4kaX(#;KvBQAX2Ez7v9EVnT<_2h`nB!;$tXVAM03%QcI`NcJV5J~~Nk;<s6Y#EB zffX01h<~iDl>mo^KvdPs`>y})d~eobY!g(cvj9YKMn(pKh{h5^)P|B=9^(>(EGz{d zhekwn{xhgmD$qat9h=FO^=O8(wDkU-%d7%x+$;gW)5$3*u_0B3&spBCsd-m8aawI} zzvYV;=L#1p)IYRY$NVi=v*cg-GD0?DV#q;_{w-iI0JS9m$|*)4ot>NnC8^+g5fGG> zmp2>mc69ITU`fSBAsgvi2hra!X#L`%KS;QN>K7|uKY$ii(8!A{LSG7iJqW-rn8BMs z>U)Ryfp>vA06Z5rHV8q95_o@R0=ll(`Cd6PH6ej0q!9ga!1~?i)lQ*@4@=xY>vwuo zjP=lG>)and-tN!UgDu~V%Ue6?!HEGsdIKm!cFwCenZbo6DU9wd28n7aC!L6_Ka@a< z1gC*Xf+97O%d@@bE5_A~IyQE|qCCdk9aB#|I#CP>`rO))@ZVg3pc5~))z#H!#K8d^ zX#}y#R1QTyw74vQ7AK&q=y<;V*@NXrMrO8SdZ{WI8=n^Pl}CG_v|qYbeYosZxj)z$ zUxKCZC18Tunwt}V0(gaGA&4b_x<hzJf`+buCY6b)i;t@*{3}n1^}0rWHG~qS9eLSl zp2ouc6ssVoyA2BX`!*NYf+Zo|B6OdaMS#SeWz!Pi$fn-mzu70v-ULmj6`jn~s-P{O zzWw^IRu$i2Qjxcb<vnWYi)zec&8eOk1UR;Gyfme%nXyx8T2u$s3;!b6%bPe;-LZj8 z94JA^0;z2wAtCote__z1W2!atEW`Bl_L0Wg5>YkdkjzE3$hn((1(C3j5am@Pn(6iO zQcPMxa2^*2p~$00CA81DsLL*tBK2eFWBaAakFB5lc%C<E6*uUyQVX_=04`9%k^#Yz z@9;pz*N|yxY57?(0<!}vsOXi9ap*Pf`Enlu0m!;06uPoX%girLhBuFZbMZq$BO@73 zuWzoo!XlJq%{W;3kXU}*CRHn?U~|;lJGCIXgy{XxJgl*rG_Xcqv^l6YF2=zGQ(R@F zostxSb>kkgu?3PALTvbb!5(Ma<9MxP24p1okhykfF)!=Rj6@W2f|#`2GXiD$PT$zL zMOly-LjCO72`KtQAisc9JTAUq+N)noh#RmaavgyYxdYY`sIJ$YAx`jtpywGM#SJj+ zVq&8R+r{$7$|fQj&QZ?--%wewx`O{1bWw*(a6bUdI|Q;7CWAwG>z3cII`0Af@Vva~ zHt2Y75u2bOgxd3xML-}rJS^<NUE+RH-!&1apIaN+XTk2gu{`hhZ&Pd7N+}<}W;??9 z&P(}#y{qhP8k#x4^1@to#UnNCObR(vAH~XCeM=0u=O?2=OJQl{aRUW-l{uZO0zA*z z21XHDs4U1rgXOTp-p(6{AJ8QPotcKd4ec#zPoK)UyNh|X0<&1KV`jU5-;&FNUa(8c zi61VS5>bcp4qqXF{7aJvxyn&r-qi%Yn5}CP0`RmUve<3#g?Y#8|FDcv>AS5^$TEo? zIRh`qiNt33ZeX`moU#fy5L7XKQ0IM=v8A{O%LB_H_Os)ZWU8*!wJCP$Dc#2z0<KNF z^!z(FUXRPMz@^as5`<gbFwxr`ltx$@F?H!tbp|O0+J#v2dH+?j|M@r2!05QBFDVL% zFFG&3`lkcBHdC?02+9_F_~>Y32PB_bXyp%5U!nVT-jWVK4{Dy&6qYcSnybsc_plXc zTp?KAzZ;mZD5^fxA$HMR(oX8ar;F>M(}-XA>I&<#RprHJ&HpaPo0e0I`PEYV^tjaG zG}I&cY_G@bf2y~@^j{?s<pHXSLaZdG=?|ns0z+q74>|iX>%9#qh|MU7h3+l33DDxM zH+o*1MVo27j%E9$x8+z`PZ#*cwP3!z`0wB}sd+wqNoB4Ni}vCjLa?ZVn)+KOLm}L` zu{;0u{a*Qw6Tdh<<X-T}hTb;!jYx(Zcy~P&9xKZ%4}NnVUwf8Qa0#idYm2IEK}+UY z>%PLlH9ovQ{Y`VuEfKBpK{uda_rEHw`|P>*CWfL~T3VR=$DdEl_RQ0-Pun-zzVL0i z049YKlKb{F*LW1J%Y&x#w;+V4#0pQsdUDugyE`f&FL0cP#1{W%HW~}Y?Gy0&VM^%0 zab&`$vn#s~JW<V{<OPyLOa=YvQ)0fhob(_#SkzNfQ*F?lAkdOCFhqhZ2$Q4-96G)I zS8YEp&9cdB0+2u88?p6_2}72iy%TlQ-`$<jJ!Gm|Km#Nzv72z0!20R#?#>MKuf)a0 z%gBex_k`iJ3I~J&fIe(t7ywG4m{KbnTWdD2jX#)z$dn7TjH~5&=<ov#-{M*;0?uEz z52;Kx`*_6b;^mi4R2~n_!s7pJ3U+iu3%{^I7C2WmUj`tsueC=Oto(4Su+^VD$%y;> zd1Ar5VFp@_)!WkpWV?evHf$)G#g3}CjeLrc2Ovbth*wj62?jz(|5JId)4QI(JwriH zKfUg;!mwA9;(d5^bp;spX$C1>41htj!q9Nxg)`~FCM^6i##;~j5O2~ial)8qWi+X< zae8V9%LwY#)pqtBaQM!Zku1J)yhW=q!hEr*;0>1=4TxV+h}8565yXV^K|}4)ZhE2A z0v+@D{c-PV*wM+)m)suHgf4=pwRNH}iRNxaqt&<84S<w=eY0=<)>3aorpm{A?b@f} zH<lyNd&bjqs1=w<bOKwvH?k71eaOx)W;>bagULoLB_LHxL!Yd=B=tSk_ibF7M|l__ z`sD22WX7kWj2+z&%eb4k$@$WqQyztv3_{!lBAlNMh;4D%?lcoB2?i|U<`XnW8e?8M zD3zH!jn<X7o5M>gz;(*Kz+&DkQMN3v3BJBL4qFykO?xO2%ZKyxWsuK2><%?L-P#Wn zeAIovyPzV~Nfs)b_9whyk7xQPldmdU`md#DQ1F1oFpGBT%Mw&Xm)?<=<WZ|EgKiyR z_%*ua{8^kWtK4At{gZsWYOykRie7XVl;H5KX_-1Qj>+qb_70jB!W^@ebH(aE`R$1X z3wz7CT1UT4;xE<Kqi?7=D;9>Aq=KGLg;S_|Y;NghJWMa!WL=`n9j+jjV@HO#Ybg0m zB$Pkt`r1{^od5Z1LQ|>!b*y@IHR{EWhw08$4^gd?=zh_AXYN+0kzrTOrYGVLEi9`- zuM7FDnj0pDMSLLc4fkVnKB+wrHh4?JTJe<>^9jg7a?`E)+#Rl@uLvNv@cQ``%RW1R zIk-!oMug|sc4)RSK>*A?;moQ6hE}E}r`87BpwWkb<P#SnId-patZ6Ik08{VZJbI+{ z*c<;xt2x)+j6d1AlY>n|QRj<l@`W+)a0$0!SGD*e*^@68%@<jq<O1pgxZQ!|%&tl? zl7!$zl7rI)mXbGQA{ilel@>ame>bApr;<Hf&M!2rCXWX~TP{P#Z=%>t!|d^6hfB+q zI(v~-rBx9#B$_`AU8h8_#q}w6_Ksk+bVXLtjhY7ZlQj~^02X=Jj3B>hK)OgINrDW4 zE8k0d{w5&!B(li4bgpxw*mrp^<#vMr<=Vo)lA_!Y4up))uq}N4;a&K<F@a5YUNkFY z;VQ3NJH8n}TBnBd-)-Q{yw5!;Eg1Snf8)ff?yQd3hM?$WCVp(_xcAQ1e7mWJd=boN zCafpt_1Cc7_*Yps4V__32<~t=Mc6N$TXmQKEghUx`={B#zr#*AKVYswhV|REM{vt3 z!Xh(XB`0h8r`*4aPa5Imk#P4bUfkzaLHLm$Yx7B@)sR>a8G1`F_*856n7PFiev2De zZ)2$K2YA)b@1uy9zlf>3uZtg}SsMtM1lS+>?M;zE;u4uf4OGg?HV)M$Uscc$LZYuf zM+pRU%KtE7!VPL`k5Gj8nfDYf$rq9a@*?uB{ANgrh`K7M6^r^I)enMjZL^=9Tt+hK zISP+#Q84h|E~AmLGJ3CQMeSQc=&{VG1?v7^ZvV7>PC^2*{)iv{Y#QDiTHA!^Y(*}l zhXou#-OxC*ndfcM!^NI6KHvFo7?tMXwC_WLXGxb!I+?Pt{PeEan9F7Knr1o`P^tal zw8>ZbZ%PlEKARsHkLuLj{Oz|uflVuKC?WADFwioo20T%iE>!Xa%TBtC$u`=)S)@8` zVFtn`^Vpfh@ZCE$=VEoL--h#%?eAY7Djv84?bG5SFy7_0o$+T`?sy(=5&w44PXpx* zC(@j(sf!lC`+QTyRXf}#muC5emR}*C3j~}$?e0W0<qfjI`zYiz@PT}sv+sAdNV-zU z%&Ar0D2XnWP_=6T*|T;=nSy^uj{a}E2?CtRoY4K33jS+jKv+B1F=4`Wmm!lUYI*RZ zk{Ta(>u*i!07o21eZrgFxmRlzpEVi;y0^SCAHytaGCOw=3R#=ssk?zrZZ6H>Z@&vY z!1bE<Q5QtlrsMQZle#xN3v*oVSWJ2Ev>@L6sk|H2>}OxxJnBv#^#!Nnt8EC|D&&rR z5)*BVQIUNI)Zh^#rH3yeQ$G_GU63mOIdDuB#u8=EX>t4_wZph`*z`9#GkD2&VNH4P zjO@&T;eGVSwwDm&-Gy%vkBV!cF|(n?JOiL=qu)5sNTGLpkXK(jimwx)ynDBB`@A-3 z!q||F9D9#RBaip(nBlGe3-jo^blziX;m21!Ys41wSo0R(Y2-z+9XOn!htM~EQ`BY9 zzXi4v;79O}+XqZ&O`D#6xy{xDq~RNWE_hSuf&6&xpUib`r#A45$rvZGY!ZwJ^Po%3 zl(6&A6ulR~g4D5GQSKG;yUU;bNEb;?qR@QeY<;kEBJ)K$nFykV&c*%6emk3KFJL?X z5ab|`Z-bMeJ@X$i)#GOu)5VehM8x@p!IcKL#R5+?3|M;EuzEwZ3|=U1p8j=ka#FUi zV3w1|SzKF-5<k77cy&T_BhtxLMT$szr|@zR2#z#1hA?{iJp5(->-Q!4jT9-Xm<8)D zYzxbe=<+6mDUTP>x%~&Z_$(AuvT2`^(5buTuHj%(w{fzt6FC5}d`q&9)?#g1wI8cs z1E1U}nTdPlaPC0KyRYANPb0TFq8U3912jySayL1g!fCSw_<u+eB?WxH{l-R|*lEAE zXz=Wz(qh#TE9Egq*71pLQYb9mXlpTw8GbkE?Bk9qq$M8b{#E66s@ZT){&xD9$aMBC zvwz7?jCk(1pI@CXf_4h>h;|hpC!CJpkIWJhdJewu`N0z|67~AZPi3Rch+<Is%}q)9 zK82Qdg0*SFbC%PL_Dp)0^NSjm>Ul9=1wS2m0UW%)KX`|KgFGqa6@}cHIt58WS>mu2 z7P}8`wm|4eXxnr1l}~OmFC9aSv1JmQs9)QcXrjRs9ek_J_^m<;A-Cc}EpeI;&p<RM zpV>6x*k(7A{)2n_$dS`yqFzmhYiNCqbtdEmKD&Vh1w-KtfnR&L*T!0~(elwG?ZISL z#H4d8&%ViaKD;&NO!$w$7vc`M(^JA-$$eFQ=_|SDcT~C8jPd;qe)OHeUPx9IZ?=%L zLu0G-(<w3=VmKQTa)<w{;fjutPLS@t;&5~MGIF|wU#TASKRpJe4nsr3yux4ahOd=+ z2LR0)Ks+|{4F-brgpGg%{J+@x%CM-yw%egWIs^oi4n<13K}w~SQo5z2JBCn@PNhqv zyPKg?x<f#^yJO}&yzlwG^XGWUHMM8MzW0;&y4PBD_Ny~zK%yk<3Ad~Y9DGKc`2gD( z8PT!p7+fG(PjUSvIxyk~@HQ>bY2zmZnHeU<lD>5$-{&84mO&cv==hlHS`ic%BIGlp zB?%w^ZZNZY#&Bi1i{n4#17X7S=uK&Rj9fnPM5hs8NDPP4cbL@w80c6SVD9e33Gv@l z=r~jE#raevZx{HHD8+=nPXAPp`!ic;S8Uti$D;4$QIqmm0^<LD`OkA&9*Ds3Em6VA zw4wE(N#v~HEIsGeQ=TzIz>T9O>f^TZ;2iHJZerJ8dh>pdf1%9O9QtP9LmtMTaCp(W z>Xn<oO7~*6wMTvYo3f@-;8v)Suf|zbEtxfG1nTwk3JU{3sQ@7Q(H<Z9R)%6DqoAM> zW<Ic_Kz7Ei%(c5%2?dlh&KLvDIcpEF$veCQv?M1`2LP0>fKh?M#bObN9Y|0-C>DXr zc2Hgc&|WM++L-=gZEYf0-_9KUhK48@IN?U8r;F1NRu$meHF)9nhfJ`rzBdNXKvM&g z?~KGm(PJM8*~*$!EDzme`jG4)(Y+N)lLKu4o6tt<J;42!CXa84JO#^Fm^;0A+HLg~ z*G%<DUx$AM&1*AcDU&gofcy+kNs%%VMYY9_n$^5(SdJ;s=V0O)T^k0>=Rl1|0nbQg zYN&5<tyv~lQrm{!>ma#RSbQ2U{g$b9vjvL)&8<U*2?+v%W;EY|qLq4<M^MGYNd}wa zgo5w-gHxdL)?miCCMw8oZf>GLEO&Q6ZKB=Lvg89)2EdK4Z3YrHPe0KA86FN&U|O9- zZ$I4F=nm2U{F&tzl;5?3Xf7-)xNSy8M&`!9G`#T$z5;?dZ3djJ2Am0)BjJ?%56l~o z69>fA9lO<TT)siT!>i5$D#C!92wadQ@)+fRp5;}4@>fT8`!DK+i5I`3u&?1JEaqE5 z$J@02<p}@W;MV9X>Oa~+JpePEm4zxteNwi)-XA1wk<R1rDWCXg=fe(=tRAKppWo(j z%vn+%&&6!#9jAWhr5<W?TS9bGrxI~3UcwCDcv8R|lLF=SjH)L2UK8yMXwz(*P~xU; zh24{%7!5S0gXc}B+OI(@g{siWOEu|V-cp9y8`b3G-{pT|c}My~T-|su$kERD@crGF zKOLNUrLsX&zBO~Q8mQM_6_~PsD(dJ|cNiQnJ!C)!q;vyLY9Ku@yB`dyW(g=L`jav3 zug^V1S$%W}2q$*Wn@)OqddA^!_(SC&01JSA%r}r6tgEY&$Q@7I>yJ)Iz|_>#l)RO! z1Zhg}jDd-%!U8BVgAvcp-d<8y_i05%1=uJ1ftuFVr6rg?VU-7+msD|@_m1snkv_hz zSxY$scKm5{fO7FzeWgTJu6wf->+S;z0BH8v@dX(-!{>`<iH$g#WqeM)3~`WvIPx;` z+MN+d@;plLJhNF7J40TX+{{QO#MqCXyvlMUf0XS9DHzG*&5#+eC1AR9QM%Z&wn8=% z4;0yCR72zL7-{|uH5x;bysEFu9{nX{C1IsYZ&vNRQWSv0U6O_ZSs)3292UQv^Z6xS zU}Rg<6DzxhhR5UcLdWvD^bn32VT;@QdjkN$8h{ib<N;%HCny1Z5(v+L-VDl>K;F=Y z8nylobYV<f+%EY2?d+=j&zDH~nJ0s`E$1W<K;3(AFaeZzFnK(rsb|C_GeIQ3-`sdW zd;!=A$x-+{cEJ8TT-JC@VV<lg4c!py!iF6)2IHYmQpfKS*E1IqFyQ-pCu1j*j*z~@ zBy(MHH4Xl`e@b`F$Z^X@mcyZ7BLQj>YHjN>s<Tn>6}>;dQ8olMCfmK`w4bNQU!DNW ziS1<G^1VRY-yKBrVT&x{t{uAa&+$do6tB_VjQDDj2+pOBDAs283lplhZ7av}21jRI zMQ3c7I35_q&f#uXDUZZqN9j^&#O6b`)`wr4Lz$(Gu!M}oySFMR+}<KkqqUGd$&|_G zh27U{zXr;Ou|ZT`owI#)+KG1YV10I({O#km_EpZV->LfTQQgwZIvx$$-yb4l@@<hI zpLQum?cRQKD9u#-_C`_BbU=YAb`%gm0qUBUpN|Boxlq^FA8x7J2JH6-B=-FLsRP>| zA}AOq9{``cJeCWYmdmc;!Fb;9AtC;N%py%!?sm7*6}q<xM9d{m6S8V|qfYoXH~eP? z_L=u_H6|hTv0;5)WyhCcZSJPeOY~qCuXyxXzGn{!91o!V4=Bf&otHatWD(b1J{WNs zJR*JfP_6P%xuajspRA8OMasE3n8FzvFWyGZEFPzCCd>c-P&+b9nS_5^P{?=fS|Xp? zP65^YfW}hlyrk2sk`qLkf&+&vV%PYhi8K|RL*xqe_2%|X-Q4muBCUn;2!+mn0jUl} z6~oTwHtV~VGX%C_HS%ei1yfvd=boEzc{2d4XV`VvyJ#D+60}^%-$9VXp=_ABf>We_ zQA5bt;}c}^JeM!scui<?6mTTnou9ra*uAZPjR3LD29@h?kbFN4E<iy6+yiH7J0^yR zg+!E0WO)Me91!%9?!M$LpTus6j4{iBAtD5Pd?Dfp&kTuq!(enf1qO~0?ZrRIW<ifi zsBeIFlv#2<Qul^m>rL>{&cPgJE2;sQnZd5LEqMu2CSsJ&J;W-{1u{Cyed*oVQ%0x} zk2=Yjec~Bbl=vYY8}U}yZTBml(cbH1FD%s%$~4}7I-5Sn&7xQJ-ccKOKle7UI|dP` zsj~DqN?(p_TKts%R@EUQ^^MN*13u$n2JE;F*jscl3DoY6_5&S{joPoCnp|{mXh>j; zy`rg{HxrT&UvNzHg<ZjNiUoe|>+{BS@V$<$51@0cU5eKN$q9(Uk+YLYjusDpvJ%fB zD3w1I7EHhMDccH%iQ8QVUqyR;3;;;)vtQlC;X*U6;zu#3=pDvbI^qe`t3Ub6GePJ6 zRBZ7F8w|2wz)cqctqT-}yy+xb;G>{*aFi-+gM=#?S2DH&(}B;a5l<}gK2Xy96zcfl zAg$-kj$DQ0Ta}Kjg%zxYTuvD~4g6au4EkF|V4b8fB}c*CbGK7tniHCVolqHXG^;~x zc~-9mO|qRxaavlxGyyJ5HV;u*=X1)VZ~rzB$B0ulpC)hY^|u@n&_Wd24=LsR%*3<U z)UBD$j#2lE!zx}UuYAVRQQ6bKQu@liY_CS?QE`J}Ji9-J94%2FwJ$k@KKbl0cPh-V zsvdj#9dpS23&sSQ&%f{`DuhT9dSnkGgdm^e1o@YtbsgUAr4Ks%nkR*~n%uE4n7?F^ zGv^il5Z==n?iylp%11W4&N?_+$TE#c*@HwT-u1Ywh!a>qi;s#5K{bf_4X{J+0r>9G zKrr#%{o&3|f0{YF2P*LTa@q@f(zE~trFF)K)gT-VFoVUB5rcMds|#yLSOO{<8m^_? zqx_G^zLl}qObS%C4hR$pz!V=i{lh&>Lr-tasm8Q?<2Qjy4C0*__R%Xdv+#M<_)Nr; z@!ZOF@AVV)(3;CY$$fNia{}UP`I{hWDMf}>kQ(2<JN{}Up}diu38Wd6+g<!qJrsia zdP#j(LZpAec`T)dD5dT`^>jyT<)#xrfX3uNDm%#I&f<2JdVZ3tsI(FDdq<#k03!in zH#9;j_oB(_9&vibqCmw>;escd5|Q!^lxwEkZEG&u4jU6biMa3NdZ{HuX)KZ;_Lf<b zP|v&nDc6#@l!(})4{j^46`I$BaO;Od2M#?qqFV}De{Gl<^uKg#n4@*;xxKnx{3x|j ziyCBx%aFQQx3uWXN)k?UsB!mbx&A&K8B$XEE?azFtjw&iZFx8-LAB-gA6uVtq}*qY z9XYLP0z6hDUM+ULR13?6wl*>V{%L~f)VUGzC|0(`V<+VR0y?Lu!zCV?G)*A#m!jg* z(jFkM{W48%tnXfb-gH%^v$U)%Dv8H}2$$1n@A;3jvfv3m;4&Ry?p|<DXm`))yaUQC z{-(0sCVev7C5zGbeQs-H4E)QIgIWa88GRum014EPavcmnHOrK|NrRMmft0W1_NR=e zy)7r$rTpnF2XqT2vG!S3JaHiAH8a1MCa4kN{qO38ggX@Z5(y>!z$qZ_r~=Dbx^b&> zm*J7=bh*#%6BO@lm*#M;VJ(tf<`~E4#EvRDfBmH%YeE$1RaB8g#2;U&1>ba=y-eEs zc4}JOJ9I~yYy8x1hl{_{OaEK7)bi3_oo^oqKbbV$<5qE#AwLfOyRb3BV>Hf+PxnXp zt4*VA$L{#0;Zpw+MfAK2b?$1K57`g~th?E>RMLAMGq?ANmiH01+GKNRc8}xnid-<} zQE$&$U+i`$8OI}f|5LA-SFrq=p8TE#u+BgUYC#Z_%6G5mM=GKG(Lj5G<L~dE2QcMN z2df?34L~m%$l3yLOj=G(0)TU3K6>Q;F1uayav=an^pssvKU5bn_)AJkGTk{)Qv*=e zD8u`6vma*f@3*m_Fa(gh>G>w7rd9yUtGmVfPmJ%HfIc|MFQDW19ju1wz!1XJuBoew z%g<l?Y`s{c&>mEC`h1IQ-4Sb@$Fup&OFpx~F-A?l_J{%X$&)8)2j6r;j-uxz*mPNY zjYd?zeN$Pe3)cuh0-sH2SrCIFF>4rQUn4XR13dK?heSPAzFEn2?ka+k@PAolq^8!x z=v;95902a^F0?CrUMtU*WCC&gVa;jd+o%31xUyKfjCus#Yjs`X#hH_*?Tb2)D0sq# z*>XVG!J+Ph?en?i5L-&gK`SU};Br4%ll*~rh%Lb9SDc(N^wK$zN)cyIP1|kY$OJy? zA`d4i*hx|m6vFJ=taM|GWTsBX@A$<$DvP2V7oXuc<<(TaE-Z3=<pq(bvVUb3_?PN^ z%PorcGm@m_QAv0IxZy%UAULTjyr|%v9V8y;9~OoavLHV=I7rSfi<4D@0~Xc*Yj4d{ z&3ah$1_q)#S-w;K@WJ>bIV>!U_6O{`x(-M%m2<E|9UZx^RyIMkOq8XqEykoyAEv&y zXlJ*_*13l?hNtAg7*f4FMrq0hP+-o`(b1uC-Ij1FBLme0;21ubnj_=f{5-}>AKxFm zt)P0Ggu5zjJBYT>K7nJ9k*8BnX@s}Nb=Ys!oy_;@xr4{#9NYKnE8~~mD_BixTHnE2 zpRmQ<keHf&<5;7;!XHja-y4m0&-@tzy3Av6XI2Bz_x?6hdS32j*1{04UU5v|Z4b}x zL&e>;LI`{QeV43N!4-_9YFb;Ba_m{?QjQ)sDy5OUAMRQiqkF;oDu$hf1p+swED1N= zXlT}<ld<_Ayq2aUfM#IsA$Xe%TK;=PdNV(M=&r~iTpT0Nc_#kJg&`#yrfe^=N#ASC zzTX8@J)wIH4h2)e$yM)soMURIlQ$HT1YA-l_Rsn3Q-myH>r_{!-qF#|+yCZ|wq~P| zCyc?7CF0Y@1Zvhakhjv3YOjexgHjU>Daj28?0le9LxzDe*5+m58=kt3ZSET>r_Je` zo*OO0m9{fwl6Sef=tC)jmCF>Pfw+{NV6$Qetp4Ee&DyBa@Y{=}c1zK11YEIOCu!OX z1%>v#)Iu%d=i$#uP~6+$x@#q}^8KLRiVZ=qH_)-VddJQj1a&`tyx!PaJbZF#4v+5I z@NDV5-_f*ZqlT6TL9xD#z-|~^DrMBgG=o~WSU*mnUq}DKM+$s1g*I;egh7VdpRYHv zaf(T?QC86hqUrOb<PJb=Ct8r5?QKE;#CI(?VWRYxIz=ZxQ~XlnSHNnfq*riy^~wz# zMHIqs7E(Wp4(TtgicV&~hZj;b0439pQMlM8NE*%BjJ=I916mO>3A(B-cTLMeNZR|$ zjV<me<-^{1zWOk_`&MPx{PW*|OfNQB=8@|K^p#<#y=^6#IrHJL%p6K7yO?$k4BFWX zaD2r1;A+7P%`S&*?#gq#DCEDT_|Hgcn~sn<W~@b?P_p(TO^x3ucP+uw4;`!aUNJTt z9@io!C4&z<zbx5aj~&jOWH0^uaP=!j0~Duu?P@QrfW8Z=B^`iE!*HRj6L<&(d&v|L z_ZVC6U2O$innLt!m{OzEbzKfMTjQUH6LScaR{oQZ{DH}=l!melWK99_AVs8SS2F+$ zD^$y=WivE?eYN*d$Irw!AG9)d+H9G03M`Cw1Jz#gS^TQ*ni`nG&DSY7zN6C8gcno3 ze>;W7ir^rFDl12hjIiUn^eaZ@WHy`6`lpA*#_xOuk*1jQ>{X0J&j9bXwc)EJU~&kr zt_SX2>AEs&VjnWz+KDkpWBGGv6(hHfw6a84`GoOfJXid3!c;z>ig$9~@e5_)YQ2?e zLR9dhdX4*@WBRJs8_Yw-!io()$^wUMtgW==gndS7_+l&wUHmgvLJDo6@3@zmF4R$@ zv)uXapDH{NJ<}~0yh>EU-3X79w=H+;9K%m=4q9%%91rNjUm<|PfS~;zx&H0k^cO45 zof~NK TQHgK-v@7ys1|GG3ISkt?I;w@SP)9@{%BQ=tckR}~o8)dF%@mV(qi0H%& zoOinz(fM=Lo)Zxh{sAwZvG;XN3D;TQnUZ}m__CY5*B)-V8c#?}8y+|~$X8~lxI$&_ ziAOobKsSwQnoJtP=w9?Q*?W(rB~;yFKp(SkjA&NXE564?CO%*}_wqnJ<!uvt$eyzW z4sIR3UyZ9^d^VLvHlq@DRWQ==75?Y)Dx4^agCWFrvnQG|nt0S%X`R~wJ@6BWCwP)J z1%06t@Xp0DkLYS6Dd^&!OpgY7YQ~--95n9kDV(arOg5BC58i1(v}4zbx{A4YAnSV+ zNxNN$!y^u<;dtUACofC&Q)iD~GAx~bqgbyb=~cS0Oywb1eXm%#?9rsfe5d-)RmRPY zGbmD%uv9tW)&!qcFTM5Os`}R;4zZ<B3N#AR$9W3CtLtp9A`G4qLK$8>wnP7dANse1 zdbbrJ%tBHEO1xJ6x#*hRdjq(XQoJ<Ph0WR(u5s~>bG=*N6;`H->)ovKH0q)Ree!l1 zKT}pxLvPKS#lO<4z~>1%@*j}@j-$LSPPXQo8;O%q*^_^Ug3QCGy)g8*(Y5p;|3$cL zEz?!C@h2Z7l1U!!JQuiNyk{c4i%(8)>&_8<JuOISe{sEKg_&whVg_D!zdjY!S71v= zG{mgbuuV8DA05A#GTqs(QpBtI7@xm+bX;JHB|*&t3+tcLa3NcFJUc_fxk-$Fd&<z= zEfbN}k}*>@)5P%tBIMz5^w>ZFhi=~Wv6N4ED4qTzqx)`5-tIBzc>gWw`A?su0e6IA zxBhARxwvM;I$XtlP(``jxiwVev4NdL63xBBRP9ESUU93F@cra+f-=E*9Q^cKVMjby zH5Q4A|IA{u=ce=0gN9n|;H5Plv>pYi4#UXX1Txj~R<3TuYnUuk7!e-gHxiuX^Zcq% zWZ!^q!FrqC{IAfEny#~a>^O(M?hREZJ~xb&S>pWGo8gIuYPCXBNnSy1Oy!rSlZTh1 z+;*X9eqF_0)p?MF<@B%YA_*8q&o*nPp_ME~ymr^A9?xbC8CD#qezvSzAmA>8;?et! zA<x3k(9Od5>`rssKg#*{C%5{mq2O%cF3<BKzEZ><ZlWmfiZ9VLEZn5u-M1v({$<+e zgdrA}I;Jf}Ed!bes##N9FlI!T$b@2_qFm^~)!5GOQ*TGTpHXAl-!)!hCL<2MkLA`a zxWl~8cd863Q`$BIHV`y|xvw|$L)b#oFm1Ofzmjhwq8B-zv9S>1t5fO!jFyNbjr&gT zZMfFmZOCs`cE+ZUyPQ~LdwjZ+uBs<4C?d#3^K6N-1r;-Zq_{;+#QXl~<Upp$hlm8? zq|P7ME<`9RSfsz($e~SVa)zE`F2_&C7kDLj?Q^#gpDgmPRym+#<Ys_|2J!MZ)bsH^ zqJfwXrTFbHtyhn|Kh6~ORO7%%6sHqO*-N1UR-DlDt5uz=Lt|7_RJ-*PQ;*vlk?z9~ zYUp(%sF+pn=YG#NGM-XW$8kXfP8o|=(>S*x2y*_<C2Q-eC-;S?S3%aMys=UHydvt_ z+~J}`a`eMp3E+U)4OGfz{hKvUBSaj}FX{a>Uw(MbOA%f{rR!+5Thyrj=bKEV&Kun1 zy}Kr1?N3R431&xE7s4`yhlHj|x(R_bc;fFnh`yhMUhwcj4nGzyL||aZe#f59z#g~L z9J4$aiqN!H!+r>*D`RoDQ9NoS_B4xPI>Zpka6pe37JG&mCetUO29_@%RTq<zQY0|H zMZS%@{3nqcsI*l&?`k~Q!5~0+xcY$PMtndzP9impFmurNBfH3>VN~T!cRsK4KIX2O zt<Pp-9UnkKiU<(!fo!Wx>9q2^RY`3vS+m~oT(uP!MfjJt_iS)L6FL+68#bhe_r@bN z0=$~MHuq221Ppqh_~CxqOW1O=7W-`TekWEr#P*rsYkPYxfF5w~loPxxKu@6f>FeFw z=Q;I4L#~*~oFzVm{LSOSjTX1yk#88>LgdnNvEcK_nT$7qva(p%Nw;%dE6`1Zt;`Je zK3Q+%ux87tA*%cmCc&Q{8!k@r<k38ovKRq%_TH$Nbi6N-Z!==g%KF-<3$rvFGw=P4 zHosk9r&t~@gy6U)!EH#fl||QE#w8~^(SIZ0tJIB8J!7DDc2QZ-yR3Ov@w?H;g$U&z z@t%M1o;c{`Zn!VCc&~uU=e^NSzQwubvZ9b@NfnAwpFm2ls#<ZV5*r`C=bv5OQ&5P> zy7{?!$0Z2tVL%poVQfv&7N}Md%Jhli3a0`Mh`b^3$IZ>n@6y(J`6b7?$IH&oMy96t z6eGLPB_-KKIGT>yu{oORV$1R<3=VD@b7Te!E*Euc#C-9SsFz3Oo)I-RV#KZ1D!)`l z#D}E{zl(eIJ>=29k;2lyT<ZwQ(*R9GzJ=a>^9_{YT1Hi8#Jt%e;7XZBtYTC0SkwQ% zkLeORwsSP>XL_O6Mf^4@Zn_9|GFZwI6d4?m;pIZI#CpKeGQG;zD^jvhAsV^oKC*iE za7xef%N^MJGkrT;I|B*J+n-B5YcPj~TrSS#)|U-1NP>+0?A3I9%TOVc#c=7?R-YeP zWV#1s)S{BeIbU2Ooc;Ka1E^kN)EugfH8%XF-HwcFIl%hF?*>kbuXo>82-{tXEP!J_ z@=bhF*cC;<c9L;gy1mkiyeIMI`_DgNlSaDt&XMZhxVbe#(WM^oEF>`bwnbIEyrU(? zN6=4>>3O0{F1KE!Qq8o)=H(I8SzM5aLSUX(NQ}ea@6dK9*W<NWRv$;lb1TDX`p?B2 zPC^;CVSw;OKl!66FH+9xC*L|xa&q2i&uR9~JG|eepSJc%ajtDJ>^zC>6fYUj(Wyih z?WEkXQQg+ow5i_cf17<NikT*DYKjYq<X>1`(y`IXIl0_9oLnk|X(E37LinRBhu*ja zik*uz*QQ7dcv(zF5H6FohQh8N4V07ixB8+8$38jO*=Zj-QEPh|;d9|!<4EKEIAREo z@m}KQ#V1!Ul%*0wD!5SOAex))er-V&{m+H+EeX7%W(z)%1-pRw^W(H%82@`Y>szpl z;3K@APUIrv)hlct6TUlCXd8Za_g~m00ab(#_>ZUDWYMdB+_7C4cPN6JC|?>WRT_!X zs&PUB7o*_up{S|x5ug6BpsfvDqK?Ox53|}d=mrB~_U+inl)*jHgtk6h+v6;RKe9m% z7mDxj_w|GVeG||@z{481QT_a7T42YhGQb=-c2~Fe_OyOtP-iq}DcT9#j9N-@QQ(q? zqgTzTxO|f5n!Lk6G&ufQ<-6M*;!@y6v?*C_^9X}Ka!z<oWE%Y;j^Yn3uaxSZOoXtd ztW2e-@#An|c94MU0Tm#iiJb2rMp^vHXlhzmb(CCLC6cCI+U8j`{w3GtD)at*3^_TC z`W3=@y7}%H-xe%6@8jP;<AB{&?3k)*X|Wv4*Wx$+9ReCX*M+dVly+RsJ*Sbev6bVy zhnD{E%MtHJp^`{;z$khJ$fpEHMC3HvI2>~S%?ToZLIH54QP#kxDcf_E;`jZ=*t}l` z$kGrfBW%=im>125@rb0B7BNs${^Jw~XuMHS_zg5L)9==ppAlx}<@FY46lt(BGBP&Z zmQ>*zAUZ?NG7UeqSBM2RZzNdaOB)(yetwk*Y}s8_pD44?aD0gav?pRp%3YU1@Rz7_ zV3fjRk9NfKp<ezG!2B=rCyW&lqznDXs=SMDH?8aHey;Bi_h$*=0a9vF>>-tUO@M4N zYR$(j!Xs^~PmM2f1R)Lmrm>_pr>*_{okCB~G+D96KonosAeIZS9y;j;YOUA5>uKN2 zEgp;GB^tT$#i0|FD+}a$UZJo)llMc#B_$eTl@%3Vv@uWncGXB8KMrP!4L&&df{u>9 zFqH~;d?x1Rj_du80n_VPo?~qjc4JQ3&lPV2ICH<0ayyL5M<yp_yxOGB&d&)62z+zy z>1fzOD2a$(17rknc?;l}8X@q|w%6ybc*2AovH0vvTf>3)g}{A0f`8F108ClP0sfri zIM3|;fjSi#kj54}yBVNx|AoF)0Q<8|aRu}dbfB5fI-OKeB{TdIQ%iwWGMLQ(X#n^J zN~<z}yc8^KpHoa$#R(Z1xoyq>Xj#fYq2gRt2Oq15Q+DpGs}J|i^KY{%FpK+4+CTHW z*j#FIj|IBHz;Mjl+k2tOojA1X6&p3KKTQtG8%d}hQbAtcn}teqe16---$0yraZ%61 z!vphCjD|iQ4vuu`^g}#=M6sYDU!@9OSB;<(%gdJ}$;ruBcz8@L%d}3rHRD?LsO8&K zAQul9twe-`lA!Jt7;AwF-fK9fG%Au=xpVdwzAw%9H^t9R$4oPCn7_<*2*d8hu>aY$ z**G6%z-zm#ZwAPpJ(DFs#X;{_Scgf&8Fyh4FV!9lvLkuX8g|lCQx(n4nLCJ+i9FBs zQ{ZDX<lAy`Lb26R`D@@8LjZf?-Me>3gDhs&PG2*&P*+w~06Iwf%JivWaN*mJwZY|W zi_KU$M(bh~-18^jHudXMC5Z?1##5F?Mn=LC<859gDgd*~2g@vqaG>~6>s5y?{`K18 zgPIz{gC;%v&K<BrSXfy>BOo9l`TF+@U|Prs)&f&vwyVMT4&2&NB+#REK-q83@88mI zDJiIczb`R3vdajlAwN|74yB7Lzkfegm6JSw{0e0g^isO?U(DzDcz9_zKJp__rl+j| zH%sW1+u|Z3MPA@)NEE+l!{yiXE8y6jMrW5M;xh_2wN+Ja54|MGNtJ{GRZ<~7wUnl} znoy<}+&3UZiu8Q$LdI5_nx23t8Rx+OoH!A=btlT_?(U8pk319O4d>%=4R4~T6a&pw z(;CoOG|dXItgqWo4<Tl=*GSSiMIBzp{Eq-uRej<@{~&FkrffZERIU|Q{MtkT*Qau_ z%*=mRs)Qs-R!U9|1N0ui^agFPD_-Btugihc{y;~__e=`(q-E;YDt4T-nY0s5PC$!1 zJ7s)+zOigyQd-px3vXqDqE}8A+A4a*CJ}$VV_W?xzurZ06gsd8wL9ALdTa706UFTf zLXcA(k*_pkS?zGTp$Hnr-g+q!;@7!81L-fARifLY5cmTTo90JfY6$|QSG52UTQ2gM zE&&W*K|nu217&pE$>>4;*4x|3=}jy<=t%wo5&8*ux#Pj(+YGN5L!(Airh38%$TsAx zzvCw!|C64&H{*Dtq!L)@n2dxseb|HUd0EqRTtx}%GkIV=#`gX8S~K<q&IkbJ1Y9Cu z*b^*|<?~8kTDr4H7*A6}<76RIYTSQG-wTexjfY<U)NH)%oa*`?##W*!f^8N^1fK}f z3hLKV^u8OR)^a+Ez1|q3Uj7k)@%SFGacPV_rPqcdRM&2NGweHi7QY`QUb4;o6Bcq8 zItIl`D1|SVgy$~z|Lfm>RDE8n^^)519(rD=j|9wVW&t(O|LTXkFSp>5_{U-=SNVXW zHNHu}$zSOZK>2Bg{&G+{$K>rahEp`blh)YC!+(hROM-O7gg1jM>XG^L_mhHcY6_rH zWOIBb6<BjL$=&YP*U&(JL%0M6k#tdZO2dAa{%JPGt3FIDELAu)1;zUV+@o8o=^T4C zb$qHn?#q3G$+u?hP5uTF=+7x#4MP$a9=CuEheb|;<!KXF!0CP7E-Y@DdDZ0x<?dpH zwl--gJsYQ7>)x+EAS3rI9f^BeoOtcbV!ia0_)8V&W6pRuHF{n#6o>^R0Ht+LPhm(` z*Vy54M-HOiaTAhPTx@D*M*wUcTy*vH7HtAD=B2L^Q*1w4vEJVw5aVW{mk{n2X+}8y zN@0*jKO(!7|8^E`>xJUWOuf`Ghg!UXDoKILH81h~VIGt!S+W@kM`pP@@!s_JYJtHJ zG5+a;X30~FdpCS1p%t&xEqy+4X%bM8_55)3M$Na#$jS-;6J_l!7<a7s=G%L9Q%X%& z_P;Q0!4j7F<KaF@618T-Jr@VMEM0qbiUenQaQ5%v!ALo~;zB|m^TxF&`p9d$xhKPD z)mNKYusan+Hk9gec2;?Jbe;M;o-qRw<t+}3*r&oSb^EPw!*LkUV40cG0z(iv6_pMF zqN-ZLd?)l1Xz)O^jVvG_;KwPj_j__lEl1^wUse%&)6L(~cG+^-EQnk8^!4l4Z<OWf zr3*~~RqfZLr75uPu1vG7oSgw0+HS)egE#_IS64Ue`5PDqwjzE=l0|xzA;;xhfvHMk z96EN`KKjrzRj)lZ&uOO5`2GR&Q_dT$3POOa_8sU{EaMkS-3C9xks#@rZL)}sS=z1U zH>>iNwA&7~Bt(65aw<M{!%?$=Q9F$&Chj4*7r)-h;uI=Kg11(QwfWz9{gi<&1B;0U z0Rf(`>FLy$){7!paBjm-*BnSdEIKSQ{Q1rB`XBQ##KS>XKo~l|1o~ZLpn7*2>5Z~- zZf2(6=%{K9kb3~a4(}%YI4ej2Q{BkNM+{OE96vtFmAiAZxxOC!AwVDK8G)_whoS4T zEkr!@I=)HQCjtR4)&HQ=6b*)Fo$FG)=69gAxgD=`J>gBX=d#w^OpZ-eJa}QTU+v1u zN+_fH{4TmKF4!l7u!=a#2zJ?gn7?vo^7V7IbWbNi_{4$NN@wts;n?w5W}!eN^q`=4 zlDiVU<`+fUwMwXO!+P^DyO;vnB!)%^;+eq^VY`H<!MgRKH-zwFYDU`G(w|*O8Uw?) z^3#)GdD<5$Yql3YDKW!v`q3nEMp#8S5NUh&j8sPKpO^T~4F}`ZpeCZI+A28q)=X`J z+HTxX@LU|I@<7sWCUQU9SkNYI-!vvaH{wgKx9V8KLkl35I*a$u-h%GmI4311yC2kV zl6H9u-)9*cU8#LxhXE_`2T`BExHuX6KNuCH=mC<?ZzG133~o+K0^z{c_}Wws&&S~= zNFD0i$&+8>b3VsARjfO(e8dUJF7FgwnEo_SN;j}P0*po@2Q?C1KFWZO4&be2H!ON- zfUBoymm%IktXlKSG-VK7+~=&Y<L<A%Sdjoszr`iR$_5WUL-Kn;^MEYTlw>*C_x)1w zK}<o}himf}UneHi7QHWZle9l!x+G>*%q%lY`S=2>C1w{_*R1hvl4P)0d)_;|30B0N z$|6y!9(m=#7^T(ul|s!$9qT|p6*PJyIdkSV!j6gB%acP6Sa;h}dS;>P$zWb%V={2i z>%tHtBU#%#Rh@?BCq%;c*=^@6ckyHJ2J)e@vVj6(Vnco?7*{Lsd-C`17y6g1`HVTq zA9%WN6&1Uz`C@<m+=xC2>e>bVzQFj|#Kh$L`T2RM4_08}ITWPW1?`q0k>YTHjT|Ph zWQ#kT^e-d@I^S_bR{&uewX7cR_sqWmLP3D;7JPPg78MgiH+eTz0#f(D3;9MWA8IzW zW<Xsy+22rYh4esmpyA?*24eyEsuFALJbR$7swyoG9zM5#$e-n9n#5qkuybBcA#}01 z&##@IS54`)Zacl76npKh&B4oeyv(65JOqA}-gIvSRGeBBioJFEG^CRSsXh_3nPkS& zZag)(YK9Jj`wGPIiCPfpFq5KEq~yUs8qEG4vr4WxZDla=gAu2fuW**c9w^JVZ9CDO z)f(&`nAy1{lyO;H*?#fhxyc|rlcWy|Vtksia~2PZ1s@?T1D$}^Z{A?~wXE{s2920F zXAlPcxO;TZCXlM6?w|f=cT&GS^%t0Fi9k`Dg|#(FOC40aTqyPZ&k8tSayaOsUS3|G zEiD~b5kS=$%kl?e!n6KlI0pfA6;K^N5QFxn#YPHbslFW_+bb}Q$H+1?>~PG-5wab1 z-QT_qKQZ<4q6(MI+TrF`4}CbpiQ`Y8Zr<^a#`+H!kLGJ^9I<^)Qo4PD&R$&_P9l^| znXf{Jy(xSF;i*Kgv3t^L8r<L4U~vm{%O48yfG@GdaBIpfQo{o|S7HJkmyn$5Pt;%- zdtdAF5xLR;E)OA7QV?C;)CLWM@u?(4bCcQFh-BHiiBLB@-e%N7Fzdt_D<>7BW9ne- z$h3#mrdg><(&zV<ly9Hk<L5U7;05qMW*urL1_%=&;P*@KYw@4Cepnol0U-t;R6$9C zpnJZO)>$vi9n`hH2Kq4s^sXWbUzga5yrs5ovg_Ze<LZJ|m6rqsdoQi+8|X!4`eVT9 z67V?7gV<H)n9Vio42XXuQ>Zjmd5&nDdN*iqiSCzw*^mm54z)%~5KWL24^6+{Gw;&B zTOkXrDbCH614L93$MI}q&HH*IrZ?%G?*&c%<aG7PJHI~eR^Z~Fr<t|O4qtF$E_1pc z=<oju0u>C@vp}8ud$5CTKyMHK*tY^klBG1(gn5s8weg}9eel85)D-f2D_~(U%hO0& zMSjs;WHLG>+}pueA163Pd?4Qc9m>;p9L-aENf2*A=h1=k#haR2Ks^0n2G2ELodL`G z0l%rODk{^wWD$mz!jtf3GM~F?5gj_4debk}25;h$sPL#u>6qwdiXkFsQm?BLo>5~- zNO|IKA4jJ&sWB_eAl?n3C_7w-laW?K&b-Rcqd7vNKX#o>q;!@ZljH7-Cd@a8B)OKt ziJERU9j@FSQ&tkysg37Qc{beXUjOUJ2bQ32#yKpG11?~dE`acN`5NC>%3l+(j~=jl zL4#LqjE@_aVxY^bv{d$_G&S-RMc{V4l;jIofcG>|aJUXAskr<Sb)I|#%~jlaVTt?q zwUcH&UAqGf)9W3Yp+P=^XU`P$mzFDzlw?e_IKNswu`BNbJ8F)$LZ~noVH*f$a4_bE zhw*Ji9E=rK1gkG5^H$h;nvV$N4gSs8^WM2@ZxR}PhdoE2$-Y+T{9bM^9Z!@4(?_z3 z_nl)q@|}4^u0!Rt&X98VY`V|7vBblIu$Hp_GX9!lk_Q`8tpC_S1oc&WM}VMLQ;3^) zdxgD{jEVul;8Rfm-6*#--zc{iiucc7IQ&3h3?7Ey2f&YSP(jE~c3`M*G&G5*f~4J7 z=l#dUtffRmPZakjt#D@Mwk(_W=u0=aj-ikYQ4kI<2U-zx=*<sLzqOL?fjRJl1iFhi zdXeJzm7EoHxIy8*qWQirugJ#KRaHz*S>M3AU#D)swrSbkN0menfzYFsB$F|<DeSp6 zaXXJ+o`ez&e1t!MFZ0_lDsoCPL5~~c#?X`I8;)=KBwg-Mpc>J|=DNfNHh&?RnVG** zHj-MRZrRRGB~KgYXdQ<-8?R5r-Ao0oXYRH%bAI%^V@Kd8{U=#=y#>?Zt2+TZQYwVM zm2Z5h9%GLwATgyl@74jJVTJBUE)4o&Q=uu1>TWrN73yZueR9MgwsnHYxXyL(00|p} zq~r!jP`bh0F<L=}K09q`VMlM>Mbt%9S+Vyr^?7B<x0UBUn$ptJb?YCqMvwNmhhJ(7 z_f`&z&|C7v{xu#fF0L%mC?#!r2tCMifnI*avMXMyngQxxe>JgK17qh@;zGjSt^IwF z5NGv#4|3VTfB*h1zzqrqsq)a!(0rdmQ5oy$`;s+`_od^8pI~~<@I;zTcc5$yM2k*0 zqUoJxtyl2%+}g65^u15s9`9YB0>P(M*%pTXsRiJE^$JM5v!$k{KD$S9J5R^^Pon2= z5|LGaXhH_!u+G}JI*Un*=YYSeB`8-oImBUp`c<Pa``52_HpRs=V9-XT8s`r$8-FV! z^KIwu!|42c;o3(%NBma40l2kg`_#CUw)Q-a=)?lV@kP^3W5<85l~oFXrug;pA^CjN z9{R%{ym0NxiWFgRam8opu}v3fDPpDFTTuNaeE^cHc+EF+6~~(;FsnIjsY%bnMXozL z^BtIHkD2{=ur7t~5+%Ys&YsW<Rm|s<o5J^07|!W&)+so-@0OH{MzeeuA&%2`IXuky z;u@v`{a{zlfoUh!^`W3;_F%F6V@j}gn~C6e-#k8q^b<^!ba?e}zPxd5g5i#zm7v>e zkosa(MxaF^d!I!Ib(*6|>geAHJ!E*V!JkLhAjGIFxnaMq2i_ch<bSnAkMEu$?s~7g z0+PHS^9YAKJO(;3as{mBIPcO{;@uyz--y%##JC6>CR_|MXM7zb%Z-DzR;n)(NbC3T z3aNPckRG9;zK(|M%Oc1o-ocWyz1ln6D{-^C5%tR#QoV1tJ~Z4*!}Kza$D4|aFmuiP z$!L$vQBOGRDO#1~X=9w<MQXBG?U_9x_#`+up^Wxr++A2$;?v3yJ}|hs-*D8S*R`BE z>+!zz6qAvYW8MBw;+(1~*OI>C6holQJ2z%=auThTKD*S@e+m}`<^6oE&TTZJe|w<K zHf_w>hP2Cc6-IoXeuad7^X+y#4N)m(6X-Vzp+>)xmaP{1Y~22N_|_s_zx#!6Yp%P8 zRu{hk(h<rTWa(op8}b?cTaN)KtddEafi^Dq^u~|ycdh*-jj;G;aP6CfvX=_G!=FnN z&vfU5pE)|*wD9lC$Q>x7Hl%NCGfqqEptNq^E?V<$<PsiGwjNO{MbGel-6E$|LuHPF zt?Hd{hZz;onr$bhegV+L<GhEgv01kzmr47z=zCo(Ur7RRb<6-0V0iHY^~+Gpbq2-N z-wu2h$<5;rwybRr`TB>ny+pTVc?rBhj>_)g%M8+?-YZvD4FVMqVFIFGjN<_duV8Ia z$hiDDXa)harXQ~kRqnkZh^rhA7qOa9?w^!6GMz+wyK>80Y%vYmGoOw&o1C}E%l=aL zU5Dj&vO#ERu2Vw3s&EQp;f@gz(>Y(v@7=#|_==i=qT=oMF1DU9w?3NLMZCA1vO0s1 zW+Hva_lsSNva}n`-|c@HCBz!YzI>u7n22YcErwpP9dAamUn4NXLcFXeDfEPHgqSjP z*CF3Ep$4Wq4`4&9Z$J;_7nW*>ubfg#m*1Is!r*(FBZe2ORuH$Qf9Qw}ODShYj4@63 zIPDF0RqDv8mxnP6(&1uh9Bjleoq41MOaGGXw9cmmFv!<yra*f}H{V|9;@dM}JfYo} z4B0*Oq-OT(T@*a_w2(~Sq)Gew<aY6vJ!DU!>bM%A&)Bh4dWa~L*!pPEEYf${Pg~ic z@w*ca?Va(u%fWx~k?r<m*#?1C*QQjT_k3$cQ1w4dXfygQeu0E8a}lcV$QkFamImD8 z&1!<h9*R@Up2)biV*3a`qa}Gcbz7{X9oXx0eHDn4z|HLR>=3v(0U_bIGnDPZ&wr0` zy&41UuXaUhSQb33VCvaV%hw`gFdTdj6)XS!3#4o+io67f4ad&vlbeatvqcA@e@EHs z!m_^l5DxeTtJ~DMJUO|Yf%&UtQ2uRb?w(|DXmIcCYk%jpMZH6R_L;bbklJ4gxy;#x z@Vp`1M-Kn$8WKi-|9R3M^GazUJ|x5BU>JLIFmw}Z#-1bd@n)U4E%D=KZ;9eRhoSw0 z`pYX<zH5JYmpSZy6@)-+h~NRsr~Rg00Xz^(Awx#U6}knv+xn~3fPk=>IRVwl*A@1> zVc&VCCr{q%7MsN19PJGEPeA{L8s?U^|J#!L|Dh_bnU^UX5AcfSYHr(-TtM;Kb4V9n zP*!@!vl2f+sxeZku<%umtLWJy;yW~Pa!OakV!&O=bzHKMsiMf>VZU?Gwm9CEomJRK ztKHYX&!u~$SIC`+vLa>OIDe?vFocEB2#WKjMt+}2nP6vbaz7Ta5oEGP!JBhX056($ zulI>J3lAWU^zE~;d5nUNxZpPP=$D$B4|)8eKl_RvNO+=!w~~Ol^KiM}jp=A3*9j=d zWu3mJr3&s^w6F`VgYfLVors|%EJ0r9aXU8$?Ky+Oz*8=nfI6PWvO1GId@Q091qH80 zOTJv|<%2^}yuKa*!vDBbxX0~!9RU!N<3*DH#dk2w{$w1OiKY_{<d>AB^&W;MC@|qE zd%>up0{#x%xY^~Sxl_27!RZWa!<4!<@0{;=C1)Cg2;_P!_CGUKu_r|L3oTA(6SDH& z=52d*N8h{`D&V*F?SJPlb_&VlXM0DjGGhKL;~Kh{;n9Kq{&!Apbnvd4R5dLw6V?8` z`@g7qbT8DBYNzqp*>5@G=u0;m=-vMRZRLKl!lH;HQezE_tZKfx$BGW!6y#)m;h4Eq zC8VE*<!cJC!5pN9K%0il3(tKu%nj)8rvUx;s#5pzL~rtO8nBnya}fr+<tzYMo!3SJ zTTpudkj?D7JbbiR*wCK7-=JA;JhOfD`3QxDgM;i<_!BC2??E<Lki0(qc!H$6d%fKC z`rY-_qj9m4CC|A)VHJeE!S7{pY#e8?V;<cDnlk6Oj3Ikup`Oq6pbVK<84g{`rN@2q zVencZ>=z|^5gCUbPRU}KU*HDcO%N5&C$=+u!Ox$+WPw-!msN5cEhJt!TI4aRLQ5%% z$v~dPCO5qTq=h=!foiL;YTS_nGO2L)lo&RAJG0@$)4a{EJ$}*Lo<k`dvnLSV4g0x! zBXTRsjP*I*BwL-V`jVgg9Pc7Z=c2kV!dtK}tWL|@3K9L|&_&iZ01efr0yG?md;9~A z>}VNF?B|l-0xh@_71T5}3rPupGpWpVT8Rk6^{+EoPb4)nkRaYq0zMCg2RN69OB`up z-bq_qpXcUZzVrAm+6DH&SAEJpE9Eo{r<dpFz{Vl}x2C!}ASP|8!i9Aa%sdpMh|u)h z%72eiQ$?k_<a|r<kw=X8rKl<WhRX0ZBca{$^tEc!%UI#EsBhq*kcc?trLX5L?R-gy zd8}6XtgM1#=%#(~RVoUeq~rAciksRavA>E7#FosbsjiT%ISmO<Iesx8G3y2OKR*fz zi?kafcI02|!bUr*cM45Ri`U;@TXfro6H}APIDJH;Q-KbXE^gyXRg@==x-OBJ%ukj* zgl7UkMr8mp;z?9+a&_hA<Xo;fNSU-`6c$cq)hr=+`ZWAMKv|w1<qLolt$VsUJ3mh; ziQu54^9OoaV3P{qL5)eQ1He_|Ngl+(#~q!Y?m@v9@$E8_1U(I?uMiMEQ!-E?Ko4l6 zm;4M+Od~}_T#!%w5{_s5DlzV`ps?`ASy9o;$?HR>`}C2|(uiT`v&vb8w%b8euU}Ce z*|tbDR}y-%=tIP|<1MFpIM2~#eJ;4wQ%8s?!t0n-2bhUmxt}FRL{|IZrjh|MeWQ&0 zZ|}U*V&IKaSzxkJ`!{Vp%i4d*hO^abSsfD{{VxY<Z%&4UZ@qeCm@o3)!LiH<U=spQ z71iUB+^+t4+PA27zrA16nE?7MK*ljRJUn~hNp4)<)@*=$MHdL!By_02NL4ku&V2Y8 zr0e?p>|wq8=jf;`8O8F;my7SGDEZf;09#yGDEi&i-TlG^Y}iNU=LcGSdE~4C1T${Q z7WxeUfrW*INLy7}04LiB=U-d~TC`0dUO4#p;}+4DUjhCIa4Yp>Y7-w&SdJ>5HJaz8 zz(iat8w4^%1*e|pLAR%T<)xF4T4@cbB){HOIh~A;^>P0;-hH~P{6v<(P`~g8I3izi zw;K`M`S-hOBz?Dcd`}C!RBh)Jk~gtgpADt6uYGZs#O5h8eT!`JO@_#E4YRan`gr(X z`CZ4Yddh?xJ<Sh{)n9Tc)CyZmhJN<Z;J2VI{}xMvy1_!Ac#-Rq7eYo6RJ5!wiF_Z< z{M~*@Cd`9s@Mp8U2VT=nsm{GEB_uQ?q!XY@4{#Ys*#b>gt(T;rOdpsdgLERx=Fhk| zAfdB2>Qi=d;y^1P0Kfqv#^UU3w8p<mfa(GOV&EAE66FF=xCn4ckazJHN>$>a2nV&} zNCrF<phv4x9UdKV0vNk@{u_7~2*9Xgzb?7M3zEX}DTxX&@cw&S0QPi27_QcYx^lC9 zrnZ!JEY#CZQL@{jb;hADZj{#nP;aynwrzRR=)kLlQ|B?t9J6>C@qsW7M`F9Mr(Q*0 z*+&+=!zPU~j(1^75<Dl{*?sPPE<mG*z2$u<z;W{?qO`oyc*@};sOnI5D3-q8EJCWO zs(L{3HTEYz^Ef#<*)4frmV2CA8dNCvjssk=+w#X^cT7wS(02O`lt`y>>3|Wy<Hkt| zTU(B-tSkt?c0cqL-j#nUen5F4p<TajrWi`@927y=)UF{^x2y9YYqdg7uJL0@9jaTz z)1x#c&dnVQVr_7J7C%7wQyEcWgErPr_U0zO#UrJA2+!zs6_1O{$jof!7Gi94dV5YI z<54LqBA#FQ;<m|)A(6vY33w_xcRTT3<u2Bm8jX*O27gN0wamwSxA9x-(<pS9p79;$ z5d)aeFGT1>&B6TujRb^A!BLmZlPKHg-_I!xJ+T-OV?9z7Fgs}?1al?9gbHq-+1=28 z60M*_&A`Aw!d@Xw0_5gd97{ei4qg@%6{YZ9A*t{MDZG8Firj6KF}~edS0|9tk+tRQ zVQ`{oYpDm&KJX9F0!F5%<p2r@T0xc8%g_?SzB{n}1@998&F25WdK1O?NBU{8Nh~+F zQg0O$*189+3XVE{!^t>wkZE3uOzhtRVn{`0rQf#c3Razi+b6_fQ6Fg*GZS1xQQ&db zXz$-b;?D)vt$fQgW=1j*5UEGt7dzRo(livku7?X(Ym(~1OYX#}_>SgF&!SU4NuJ&w zp5|}PlM8!>oUqxCk0A<-w(rD6rZ-%cau>@h`WD`7cV4Pv8FHdWT*yikpskskjLZn$ zicU%>eAjTljjy}UdxuHifCpB>37^-zR3N1X2)4fbd>+_RPi~s+>e7Zg0;o*9^SZIH zpxylO8)ntA5zw^*t63}WGMmP&oGq+@pHi?>5E1>l6X)TPc6F_Fu;!Du5`QM{<JID> z&0|uMIP&*zG0zA8#zA>MN4GfLMlo3^jAviRXFT~)JVgf0d=~oJZ5?`rsOJUCJrvCU zC^WRR(O_8aQmO{UOIM5x3=P{$qX*Z%n<0~h6=pV5$6w)K?Iu!wD;dK*eRLCCiL5XM zVV{^LCjQlBcGzQfsCfpx@BBy$)_BT$J}Mu1rEq<GmEkW^6geIr_0FfGN|5jkC6tgN zCT@{M;!8H+O^RzZZ-*1_E(7wA>gMdAi%e<q)2y4KCl}1KXYY~H?<U)syT#Arc)l5A zZ*gpzXKLla%abSfZ&UidRG-6aAXT&0<2T6w$=%wDnsc|ZvU);A^}DnbKg!?Wp{Y$z zO}u`1#DD=9j%Cmf0wy5{un;5>Hu*2=_e(&tw4aEc-e{(J*EmJgGXh-xy09iZG2-?% z`|-!S`}>cN)^^u#2fqR#_h}$L$iTxBM)l!BnjmEjraO{=T>+mD4JE<Tym#HdAvexC z(wqEYVVc3D0nYkx=7)D%E4DZ~j4W~u@@Cm=KyT{&`t1cTq@I)}%OLMbX!cWHPGVS? zcY31xEHf|A)b9O3dR4znl~GU|xzX^6&f8Y?2SK2P+V8W;)&5Rv<<})h39>Q;MD5?t znq@#2RB!gyvBRsIZ6Nmod0{lB)I)&E3sO6@kcQTuQ9p|NWc0J2-nano)x;EZh$6!( zoSBp6`}yv4Y;5Y_hGH^MVa*05BS4`Pn7kq_wEV2m0%a<|z!cPm<Nygy$h`E2nXQD_ z!DPN@@Qs`ET`U~Tq|u9SG~%|gm{AD{y|a~@W%IXO{JagR+(JSHUOMH#bm};5F!`;r zykl}<Eji#=#iaf076o3l51+UUi3kb?XUV}^wQZl8zksErcePgI#Ky)hoB`hps$k-$ zL*ck)01BN2&}M^nnZoF6c3b70!;peSG0<D?t^@n-N#*rLBL)`_HBh3CHz^N@<h7rw zonH*P!MaX{zxEd-#_OubF8wHE>yfr7l*<1oJ+0kqQyEJ|l81__EQKf3C+W9VGaFnI zFRRZ#J^3zFdNaX{E&iGY_&!Ia+K%zVuA`^Kx09Dpe;dRkB{lpmiJIR|Kf5v~Nt1Ie z;KplJ$C#$ctAW?<qcnM(7nFVZD@4d(PW6QGy!ihDiBIWmglR7c9}FRZu?N8R`vwMx zIrN(9)(HK|%gcdeG*Au|1qK8oK=VEw)M4aK%tncfVqtR%h!o9e@v3411#;ae+-vvb zPHeJaY~c|3PPmV-i>Ejmnk&-L7gNSxEH8$pAOB+cf9POG2lk(RCl=H234}8MF)cP1 zn(KYVQwt63KKniuu4z1GW@2(!S+kcMntolEy92P)06vCZMa0}(GO?sxTsJ!RTvUeO zfe=(-@--#V@3>|F=!bw7Xz^FZQ#^oPDeT7X)1bx)_p3PStii=dRq7$d%EaY=guPsC z>s^<kL!HoCTkK6=f*>CJegl|-oeF`~UVJ?%Z(_@0?Ki&1SGgx>7-+{qkwH=B%CR>$ zMWogjJ`JE5m(&_GGAg!DF%|M718#j^@Y&^T`RuL5v&Y;0BcqlsM6t$nY#Ke^Zamn< z$d%xS7$l7t%qJBDpg!c740eTPYl$-Aje1^sLU<(*3S_A#Vecq2j`pBihU(|8lZJp2 zYm|p^mR^bO27s=AJClX4b#+s<VejJyWgX>1$EcX5QP-1_D0tfd#8HnXuCK2z;o!5s zzYjJ|0I=M0$baJO>iR)bGk2z$Ky3CO6B9#lUtf&zQ}QxacN;J`1B+p$&~L37G(tkc zSU8V<jT-^WxA2351B;71Bu$@ywpPFb&GB}+NqBM%TKOA=H$)sdA{;Msn6?U_jsw4Q zDimM!obU46<6NwglPB$KV7DuL^8Nh~{zvW>jMun`Q7*seR!nr1dw2a+DUd^<6^m$- zfPO)fakxC+^{o<5_A35#H&lbicPTnxU`x3>sE;ZkJUYCcbYQ)!@(rQjUcc<2Z}SGT zQ7_(-H+-s3J<4Hz&&hP_|Il?7U{Q7N+8;tGDM1=RMLMKAMG0x??ha|`5<$AVQ$Rqv z85(J%Q@W(P2IgD5@Bf_dT;FxR3lxT#*|YcBYp=c5^Ly_5fh<^xW%v*Nj?eyh<Ew2m zckWIx7lkvG3jGDPl6sr5G5E4zGq0ckT>^gl%+r0JLh8=TeV^>^5Znz<Q_Jr!`O})! zywfCH6F!T>0pnfSDa<4Qt}9f&H#Z|5bQ}+rb6B|rNm!K~Bn^yIAJkUq>EWh7(;v?> z<tGpj6H8fHF@V6bl$<#rcdNi?8lqlhikZ^hS9@Okl^MMX@8_-b{)m_l#=iuNG0E|~ znDO`~oa6=T3#q{YhOE-k_}W_4u#!B}t_K=OS{2isB*~=WENGjHU8>5^kQ`0M??JAJ z|EPiZ2%yUkWe81wtb|}CVOGRMKaI5G`-VuJsi>%8qN09vhdu-KFi{<Z2#p40ZuE)| zKgJ`OPUqB=zI!-hYTY01ye<C<lY+S7OG&F2LSPa(V_6$x9-KcZFpEw}K|^Bb25x=r z=Oi`PyNoVu&IS`2d&ro)#OUY>5$w(e#iwRwW}%=M8!niIbZ5ONoOivvexwkOQ^1om zK4<VCPTO{`?j~jLe%brw9&bUywqc$VAK%ydG@c=pA`mThL-;xFdxy^u3YWXo+qA1Q zY4^`c@Z;b&2d+GcIuEH+A(#AA{1c-fZxn|*ol+8umRm68x4wn9I+%f*R%tw>{B2MY z5fHrB&`2&0RBC4ZI5@<m0EDJ9l=D^UTXpU#2|RD~&5Apn1<j09E6pW?vu0oJpC<jl zaJgMtm>S4WF^v?2e7x3SCG{~Bi`gd05)<oCm;RI@1t;C_{NBf!NRTn=BlK(JO^C$} z4+%fNB!^6^Z*@xPuN_OC^oA>|JwfBY9dT!Tq3J(<N=6<x@jbnM4atMh@@M+37?jnx zAI!RT&vhBIQoZ?<g6RNBv8>VrVZD<xy`$nCFj|TM$OmcI`OQ&%nMG_}2om)qfwv`y zbHqsmxxc(Zc%XmEI;`WPe{y-CUoSFV^FsX)_%Huxu~{9(+7}gs1MOPHOkUq6ffkDv zcb-F0flb8(hW{Yc`7M24qy7eb_DXAB6PZ^YyrrYf*Q@7rGc@^3?-@mK3YnwD3fkS) zL-5i}oPpIK8yr<X4G6n~N7RmM3)~tn;cKOnRJYe)l)b$^{cKg!d!<AEZBKtaI#NDT z^Gz~o;?OmMwv`Qm%;x)y=kX~m##+Yn1#>?D^eGp(BdoEJlo5Xe0XUfJNAlhoBM8j& z4-7minWR@QRc*&>A9)6ZV=<{VpQ<b>%x$c2EiEl=Nn!s}iIzvA2DUIwI`39bMW}Un zmXe(EX@jNd6OyAA3s9sD_OYO}gDJVjX)VrR9yEpQ^f%(fq|b}1rUUn<m=$3tPh!o3 zHx3(j6T|rhUu4L>ePs(v{rX-~K3I>7bX{QU{TCL7L*+c0u2>L++pf?CC&uAS@2pj0 zWu=`=NcUZ{x5dB{rbqvx!j}Tt<Xf&Qt8ObUSZXenYP)&3!48hOo_iKF&G`3IwFCy) zxgvH!$!BV@M$AkiUUyq!H9#iERfNsg_{0AL=a7H%Ux~L`O*CAF>5r3z>xPCw-xEFX zi5^cx8qUa%v{fY?Fo;$2L1U1DKiWq<4Edjmtl;iHroaCsg#Lz|4wDeTE)8`GGUVph zgA1LL-N8dm0#YG!Z(`Ttd*P6NN+wkapBxVE5~w~q6#KVy?x=tOdgWZydo6X^cN9&j zCoUil8RHSQ0?|@uWW*g>YR_rz8wA9cNZDE`xfjyPjEUzNnQ-oBX6MJATEVYN3WE@5 z3ru`L7JfcF2XT3bz=Fs6KO!sV^S?R268($a8F+W66z{w#1d-~ti4|N|4`u3S$0UXu zozsdM|0Ylu>Ro)|^&EwjrG47kVR@T@^l0qw>D}9GN9}B8If~nHWVmYu@HmnSVq)<r zneC6vVVmLL$l1d=63wcp3Sfjnyz%4xhMGMGPCzy`?+r`i<N7o#SFT^M0gHi+61BqP zMJX5s)t0g+&dmtNv<2@b)Jy$Jhc}Xuf7gkuVdD#3=d$28>_(WdxwqPId=@<C1_EkV znP<#AN6Oo`&+ytLR!MAYB!BqjxASf4=9H=l3Pk<|J-u{arq!Rq=S>+~X!pr!EoAtD zeTO0Zig4JI+|LuPQ50obBVOJJPaaF}R%1QBam>_%2y546<hBO%H#5l}6W#{amkQIt z_4Wu?6}{D-JicMrI2uwXH<>#&S&5I%G{7IIUIXPs3gcRS1kv!e+<Z`%x?yq0kpYWm z_m+(RNBqO`rCjJb?+Tz#06IYm@E6^3H7|He(f<_}rANy%hk~1qAqXB|iviYZ2xLO; z>9+69SWu{1<Rt9vk1LVe`K5ejubc7Wiy7Hqi=(J@P=XKqhvNC}U1)tU?47ZCGOC{z z=3V=@;F8hCdiq&1v6fNp2;8xaxGmins1ehd{}^3opp|KEI~_Ma!)pg5M}Tj$0bxt` zZm}ZfOivll9PB<w4hJzH1}kR78FzOAlP)p+-JR^xQdtdrQc3}Vg<Ls>l1aHWM;<cU zULfk}=hZB2ELjDm!04$jt{gVv;QgV*PySow17t=B$L`M^cq4SI)`5eU0IFvdG*QJ$ z?Rct-Bp<Gp_}(|@%E-t_s{d$Zv|H09DGxU&xqxG%zFTPcZ5AI~ne615MvdjOini$= z<XN~^&_)jP%Og`?yw8%{taFu30U&efPiXi?PdKS(?_1CR9LSOM8&HWUkWlw?#nYcz zB+Ccnsok<PE*21PJ6NV-&$}bst1Do>2^l`T>fHW~x20?s`ahYhYpLzP09<B<5Sb^_ z&^}dU`0FA+S17wZLlPqjF3#j;CM}Y|@;LN@*V$r^U~Sy)P!lU-^dDJB`MvI)!N#`m zp%5U9nm8~oNOkWCcDO0g(_ebfkSA{uA08oU0`S45%K0l9C1;((O|}^p_9PE#i*1aL zlT}Mzws1{M43=dv1(C0)U&g^0U)|KB-q#=3<@&1Hcqg)rwmOb)B?vM5gJ)QA@wmV% zGox32bA1MkeBob(k{<ER2m?fJfpL^&A@c&3d2YepK`eV_Kq+m^@dw4`J<-0K@ct>r zB?_u?0}gT<_9&94nQSfUsPH<7Ib``r{tb;Crx`v?t(Q~zg$+IJ(xTEXqdx24eY$H! zT*@ooNJnhsO;UL1F&+^jEH;g@eCB007k+J#mm2f%w4oPMHsNserv?&$P6aMr{gY4f zPbvY!2lzFY-wovcSoVC+)0)tXk(($a`1Q<mWZQ2oD(AYNHOnJzyQ8f78hz(P|CI~S zB>V<3Z0PilqbNko7uolJ5K7F8pR>35PH1Q%C}X<8#T~}BT^6?MfZsU)d}oe~dS1w$ zMVfYqhx=U8)tyK3<=LzFP9+M-4TRBxAiR~OfEn&EI|m}PM&)e^KgH<CQq9f}5_-MJ z)ue_AlDwF@cgO#czl{5|A}ByQJn=f~p9+Yq3m;P5kfWqK6U2<I;bK(PpBQ4M)Z_Rn zhz!-(uWJ_jc+Nh$pt7X1aUSJj#V+vq<=40HD?<?@zZ6S95jx;(`Ar18B4g%`64Gls zF{Z7C;Vl%mP>1=%U7a-IXxi%MeHQw}9WFh#h`BqFqTb@yt5Z$XL!)rFFKZJ0%TqkP zA{B@Ex#cAy{6mi)x?9W5+CK`eD3WC!Z=o~nb6odowE1A{_7?~<d`-dbi|?ViC@@b* zk7C`mD6%Kb!H0JWY?oVsr<>iU$b0pPqalt9nRVYn{s?8MZeE(~*y)aE30#RdY?2%i z@+hjj^W{Q=iypacu(gVkKsbHA^dl{k<{2!<4}@W3u^C#eiK}4r^-R8b365mogL6%c z&fm^|^-3U%#o}hf6=#rVxwDj245<^>r4WZ4@0-!6RG1LSO1rXHP4pXj|2Q{J3L)Gg zUQvw$7~ql?1FQz5pGFgmR>1?E5s-7CcTOQ<E6xMZEtOeWHlQq<yES`*8uEb2jkdiJ zdp;ma7Rwd&zJ((D<bNY}ceJtW(?4kxKiG=bqsNUePg4BbYULbvTUto?2p&dG^g>(Z zYvpJie+0kq@X1+8uxC5Bhbd1Tw=##T7tNKMB80uFp>tKXn}Ni~BYSNkh}mhzfeU3s zK;#tOEPDPGGfz?$`xV}F(N}<xWbn`azg%tcVIQAx%<WtU)e%+k5tY`omzu}0Pqo!c zf+Ng#t{HXzgEwFKAO`$Lc@^@|^*)gi(Or!oc3#sAr@m!&#p&&`eB}*Rp%_RhpHJYg zgvmb*CwdBf4k_#cNex6lb(=r4CN(#=&unsay(nZuG|y_l-2IBF4gP$!=1HcnzVF6E z_}31-AC)1I8|#HafV|9`sWi@+A*|<D>qyP5Tj!@*AL<_G%JGIFy)wH<<ApDqJzo!B zY86xe{6x{_aNMwp5-SpM^htjJ)GPNeC$YXM9b7CA%E;alIQrNF?h?rU9el3`6G+EY z+uqxIK`(^p>4gK)Qa}(TiH6wlta0yF6x#9doZtK-8ao}T4r9{$e2*={Eu!wVq3hce ztG6L}eJ1<)kik0l8k(=tu17+yQi^%QA8FNnNcIUerRjjMH&^Ls$96SCfj{}M8A)Wi z7IBWh@%Z@EV6DusOj+k$YAfDtyir_YVu_)|gOF^_d{y&YrLuC$p$NvYR@Z~33*XA4 zxWWD3!4y#U&7K`rTx3Uvi<qego%RZ^<wt83%Zq*%%f&^AfxldSTMlom+5O(Cyl;QE zww4pjTmtC#>N%mfVxB0DxUZ99+HuD}4DK|u*P83&kvBU+ChhvC9WBV!=H5$sp5SGB zpRcQD<^eTf)6;7l&lu!>mK?MFd_z;efiVJo{N!EX29AQ4gPlXvSBgnpGXXAg3M(X1 zK9;93F<l}bG2(9oUf;QvN`P@@P!rX0WAfPpN4ahdL?8##bWm*s2+$Z0_FgXg*^mh_ z#!GAqMjoB&-Ls!=B$fZ8KVz1Y_!zI8@HO)8(ORi0AJX0LYCYt<cNM$;4{~y+RExRC zXg35JG~WNILG#C6H!)roIOf{tKkSY&)L%Cf{>X_c2+lmXQaxYVUk2&I;}*ym$q6Qb z8%NQNFzl#>XNh(V#PNASN9j1fw7@}T)xnoC8$*!qzH>{RnWksDaNmZT9WLh1H6An{ zj;wg2ARub3(hqj)|Lhz}{I);mOw#*MopzP4MP^KBNQSM%CMH>ENcx7OPhiJHcFSUX z=P$e6_@*rNc-J_!?KscHZcoNCQP9=bfOcwqYXiS%){bA2h<?avmyw;kl43K6QeF0E zIv+5cY@sce5?h!29+_Ua)Hveb`=+CHo5ClOh;oz&9A3Y`75`NinIkLf$S=$UCG%B@ zY`*%+^3B278!|V+;XOGOk#vKz>Q8aJ{1M*Kn>-2eOw-t}y<^^|u2p8abk}L24CWKr zdU|H2)KyHLv+Il?9jlyoINPa}ID8yy%((;|71uE(K~!>k^WvlleudULmy}Rz^$Gay z65hDq>Wk%3>jgo?;X^ucSjpE?l__=1>94#-o=eB(#ph6X{?)@FgrTyYzj&#-U$4t2 zUKTx-8YtXmEL1*VQU;UQ&-J|O%^W`(TjTfaD+w}P$1%R2o{)iAoj5CR{oRIIu1Si% z2tKNLK3+566LE1kW{dvBhk{e>z8%$jIo${B7}!7j)k74YqEdAn{l{BP&Uf^`YZ7Ha zRU1fV9#iLv6HYw6iUb}Wp29|4c0Zj7&kH=2^%*SLZoUlxz4T?{s>D^;mk&ey*3j#W zX``xY&GLEIOrHL!^OA*=7bwEwiv5R-@%fYVB@}QzneNGtx4Z<Ym~CZs7mhHP+kKXB zkT6$SH-diG%m-Ofgx-<N!X_>0f%v1(Wf^lL<(+vH-dh`ghzB;@U0QgTQUl?}Lf!f& z<#e>mox=AEcK7U$+Ov+KUrkq+>`0Y_%H~%{HYgysWhtCK!s`rhT%#jZN!JbNZt0yb z2P0+Il1^0xMFHMBQS51_R<)@KX?6+-u&r!fOb+(?CDuqyF&|7mADoV=f(1Fwb(bcf zspQbntg_^i`!xBA#T)g>uU>?_^*9F;S*9f&-pPa8OpnUz18Gb`5BFwUXl23Feq%<v z{K$DKjbOQly#vCG&D`h4ks5nOuGGds4q(0tDF9(V>-v5|EXup1+C^7VNQJ$<cEq<; zb!)E0t+|<kcwHI2y`2@|OJk3rP_=J4pP068HMX$pQG_Y#2NU46x3+8W19(Y?&t#o9 z>%QQ&vokps4%Pj1G!0zGZolx<fn^8n*h%*wAN&Rm%$Eao-s<|+V#)5lYC`*Jpq(<w zVIwm>{+*7gX0Y&4K1Lnh=>a^06ONkX)ap<9*LaHob^DR1XK8&{b)R3RY%C!YBcr&C z{7Y*3)ZZ1XIj>$SZp1w$ppbX_i@GC4l5_hQBDv%4(OZ#L%Fp?1_YK!HLJVHq5}MoZ zsFKt1@LAWH`)SoNU%iNR;9ZN-H_ZS3G7!Vs=l8GAouYr$n38Jm>}aNkJ<5!~U7cUB zJEF@#VZXLr7R`h?Di%ij%KGkPQ>ci7vOlEj1}v#T&qLEOg^ZF051)`}kEdqfjDSvr zr|Uv$<dPbbQ0@4$#4H${kC%jWNGtL_daqfak>yF{-Md%tE%%<+TMYEWYWRU$(h0$t z&i5lV=>(>vFnt#oLdH#^kJ=S{v1yI}dH{NDXxiBP>C+-P$Gt8G9{gE1Nu$uzIOtlc z)RDtO?JJ)?fpc#WB+%~@;ZSo(2<J7gg}JuWWTyBd@&z<gWeidn&qs@H!6T#}Z75+L zzF+qVT_cwK(5e3>Dm9g#;kN$`s@?GA?!MXfVrBT{aP9HQEoKL(sooV4f%UY{@7r@F zyr;n|4e_9{`*X^(6!TA(6N+f=by)V-FUa_P_Cwx%tcXb1<qv!@%bT!tNB$N2ZhE5G zqs?o+uJhGPg%3PF@9~R+)zPq<69&K3s?KJ#d>2n99m&*8-gO?hGJ|**53F}i2&9As zOqdiLpEgDo%$i%)?lT^Sn1CMM$~qr`GmYVYSNr0G%Nvs|v4YDx__U2JH_&8q;5yY0 zLm)r#pzZel76H=XKG-Thu)N~g)Y%z-0{?N6`Qa#b0|RdI9>Z>Tgbt==?G^`5HVSHj zveVqRaR%rsTzh=K)lOBr7i2PnP?NV#taC5?76qPzcF-kC0kukT<^Cn?hPj}fG_Tde zAkU4Z0A(Zr4dJx_oi?gz$U_^Oybq1}Dsoz0Rz@Hd+@2MaqMAE7%kx9kmg9a>MQNz2 zv@{%4wR!Rwi9zQIxF3ho$fYG!pf2=;ezy9m_0xl}=EAlvww53=`>#;P_6*N&T-*u9 zB$3>Z&63#RLl97YtUv#XU;W3otqZay2iwjMk-|K&AI(4S9D8VAs^sx*?>6PlB$hMm zTIn4N?aP<8q_(#9eM8zLf(bYeRGL7@C~AH?IY%8h+B7?Ck5(^VE+<HAS&IFxNqIYt zx4Lt1@Y+Od-O`#$u>%=g>gJ7nzm64CwKTV=5>4w9dwUoA^`^|C;no3}h0Vumf&6Y| zcVUKW74x>2y<eJ4&9N}~d<e<u=ui56=Dq5oGvdBaK-M*V8S73iKmOSpIQiz|3;HW} zC-rwCyxH?9Zxel&H_ED-#S8GJKXdXRRvk-?rc%#t4g)6BklpF>ULe$*x8t~X7?}p* z`maGjW+py!zEYrbHVhgb)aNTTpgpv?cWC@}@Td2^Jw(nCbXx;*{o@)#Dza)QG&H<{ znHidEwTEj3)a6@ye~EK;{$`!MhP2DqnlP5@tBv419AwdtGy+(LrW->WN1-sG+ZttF z(RLjsE;(^u$e?|{VaK;xDI+~FLQ2JUC8!OmGYbuLU)u`K9VKra+8xE(xSjYk9lQ#J zlMmP`{y});FZ_lHb(qv=xu`JXX%NUXtG6~*8;Mf82V>ru)(`OA@8-IoMAsM(&2-o} zq|>{4@cT#D30vu-SXSP8{dM1Eg8$$nqSza%s_jgokN$El)=vh)2*!pl5&SmvKn-#C z$57B3Ch+hsC|z+BCn=Yb+Vpp1QMFs3a4Q}frYvWFT+g?3^7@0MW5jQ}3d1)<w1aV* zDJ68Y3YHMaH`Ztf?5bDT<#x9m9FzfQhj&-+AWy$)N)lOSca4c@TQj~+AgJ4C=wLBq zELZT(bHwz{xL7qbnyuqZ-dym^nYN=G;(dP|^IH07zD(=Oq>#9{Hd+2oM?^OXJoB+2 zFQ_+bP=n3-*C|IjWIcjBwSnHZqS=4@oYZ`H$ZToK7;GxuscF+hHN~kF40B-fRV(nJ zG{hUGDc@7IF*x0k&*>01!h@8P<1mNtzU<H!ojsP7=m}`MgN?&N*b3a+r8XvV_OClE zeB&7?96%n`FTF{TNnZavsd8OleRETKcUj|y)4YWF7}amG7szSQc6~}_W>6)Pr*7Hx z)hWv8CSi_h32)XU{l(hqYFx?>?jatN2s!+~xfBw^uM%;nKJa?qSJaPe8)DgsKM<2r z1k9)larJ)s{jzfRb<r9y4$}3$BNt-DI-V|5-)Jm(?sgn*b%waG-*`AGNk7zZ4R$q* z#6yGk3b9iyoRL%Dv52P_qVN2Lq7lm-0Rwme$JXXZ!=`I}tL~>3Tkss|QbGnjpX}I2 zwZS9Q8ct4u2HV%ZN^+%ltHbhPer_ajyddWVwTz1|{RqClkV{5WXt6dQ&_zS_bK-~y ze8vwlPrpt_vP38Lqs$W1PPnw_V;r)3O8X>vpi+6X+SP?z-g-mdwB%++0$)j@WfuPe z&e01-?Y2)c_`~YY80O}q$G7dSk@`6|`-KG={l9%f1L`bO9gMR;_<`%66;LeI#L&<m zff_(EzZeFLq*b4M$^bChIcR5Hl}uVH^7A%>I$lAbXR^J_`PJ9gU~t{kZ_E~ri~G*e zRtSaqG#k9AWK!1$X*!J^kYFR}b~Fq66b`ARIsV|#Z?D;?10^RB-ABk?yr7OTO3!tA z-!nePa^QJ=?)n-0lcdvwesuBf+2k8L8L;2q*m`$-!U`TKl^iT2U)CwX^VhccK~_Q` zyn7V`F6o|E-4R^+!JS?*l1!}@!-9Upuy@4uYVyn(w79zG3I(sW9!ru;K@o+XF)}zK zsjqT>Q;Gi^G&gWG=0Kx+i6^DOFPPp6jo~E|_^g04rflBPvGbRJhn+2gnsK3&IA_VQ z+nB8(e^IXqXBF<Yq6ZX<axyZbv$J#p7u&gA;d}^1j3)Pi$$jAPsI+32Zs&%<jI2~E z`Bv*bW7=Wk$)9Tq;iVT(BtDelcK(iba&bWivsYkDG)RZ)zQ&Sxd5354uqBv{lK^-k ztf$xEXt~`N)Bn=g9@x3Pc=65{>?s%*Knq$&gkcfEIjyFGL1i_NHz+3;!ImZbz6#<? z8V~){-KGXTHW5Le^D@G^=^-O}^7sX)w^lV921+afLCm-}(scThc~0D#ni@mzO~l6D zM;%{prDPI&+KA@mVsw<dqswql!r$h_l`o+!|AiULUYw-%+4jc|C)`)VPFSx6WGB=4 zKb9P<%QL;TOKURE=8$@4m6`mGSgK!Y>n3lX&^p&vjvt55>!$jrao^M9Gm9dA8ylNa zT3uF#TaPEy?vVLksF~Hy7_GxDY-%7eMMm8ozGhg@BYG3nX_LvNHZ*_8jS4BVxR7{p zpGk3#Ee!ja6d&IWeBU1VvX_?HZe0?|teY`sjgN+MsqH)SUmad)Z@8B}5BN4V_=x=^ zao?k$sjBMZOtnSq)lnyQXnFHV|BtcFKA+ti6~oB(yuC<L=Sq}d`><%RRc-6f<1&nY zNk-5@Yi13_WS$VoFouSy4j(7Nv)=}Nd1zz+-#{tUhdj35oH$eX_#xbk@aRx5pLOQ< zKL0yusFgYa%wJOn!0QY02e$ftil)TwdvJz+Hl)IGTzO1H{!%pkos&3K{EE>T^*T=N z=724dZwn9f=hwvN@Dmv>RlyTO!O_?Ry|O`CX6%9to-;lEgX?mMYZXgBEyuU+N-vk5 z^HBWcg_IYj_=~X$(nW8$pn!P;chf)P&`A^YEpT<Tk;4<YEe_X%Y1vQy9pd1eG~)J@ zgm#mRQe<!kUVT76j!ad(hXxaGn)L$7K5T>cg`M&J>FWl@h;CCy4lepGp9t7iwRKM& z%5YT{{EhfKHX-AjUoV`YoUS#7)@6>jzfQWZ5jdL9t}H3frOiTPxUMxf%T%3G0vYT0 zM>mU;gP*_1zK~0pC*S74*oukgl}atyoJZQyNQe<AcM*)oAq}Nxi?PE_bM<(MQ7Z;} z3)?tJ958HM@6$^yxnDS$wjiive9hangneIy?h8iD?eMXykm|R+JSUr>V)f4WAAGR6 zZc)|NS}r|fQ(MZmV8)zaXA*tS7}A->Q~Hf>!NozM)f5;PZC|&4nyq;Ht9kZB<utkg z$4BbL{Zn|)l&xrn^IN-S{IEdv!oFDO0xngTaF-ABiL<EoJE$}hrCz$93d6a>2XgbC zpWC5e5=S=7@Fb|_3u_IfAra2Eb=W~hcse*~OF#cc6ACwu&5ogjAq;=ZM(~c;Y@1^# z&AN}7m~D?vk{n#Lx|;Nm*p5W?WMQ-mQSAnKu<tj*l{uM`4+QT$la9OW&U?Fl79Laf z$!#g8Y>K|Pe*yCAN^2P0xL@f04J7)a8&zgGJk*;Mx7`E(yubKE*St0RY9xq+jqv2H zsBF=!4AYBy#|_~US6_#D?yPEFk9n?LWzY9}9tB1Xi|x<1zE2?J6lzuQZ_)iU&F-GF zW^J&<ART$0Qs)ZEbh-AKyAT}5U8Pt(42OG49-vn7vhjh2zpW}ma3|e;8g|UWUF@Zn z>R~!VXuU;a1sn9H!yNv7{RYMJW&>_9?^;8=Dtua-I@ww>lzcT(c)=s_7IydZ@RYv| zbWnS{t2a<at^Unl=3k9+AVd-048h3t@RvVF2A1gPNR3#Dg?G-;Xtt*#eem*78C39D zn7!h38%JS$0dJ4-P7T#mWks_;(|Y@xO%O}Z4hZ;Luy^Sx1^a+6_)z;&A%vC`{)SUN z+4xN28=bAs?G5v>fu*hjx@fJB{Cgp$3dDi^gSAZ16|1|@7h<D@S-9Kp)({WVZPrBG z(TRyM0ut=(98994E25Bg=$c(?!*6>7rf+ap56f`i4_~PPP<h#`-x%x-y&FyL_Al%* z1P4@?iFZ{(2ng-ls4%haro%jQT69egV)ntkuoAuF^Qk!LE<@gPiBS5J_(MV_yagnL zy2B#w&UYYbUI7U{K7oOY2v3Q|PV{dkn#nupOWL#H91Ybh-Hg*5nyoT(W0t%SgDpM- z=Y(R_$MGmrg(fLV44p17N~}?1-H|3qc2_OLV+k&q{M2j?!2r?K#q%{H4#KfU2Bx{O zSH{*Ok)K}I&<-rF2>#?GZ?^`NC@W2*qK7vPEG-d%l&O_nBbnf`>&@*OFQfLK{K=Qw zxx1IMEv%o0E>AAGdk}N|nBh1+u4v3wXWz!Y?7m}e8hPBFH-FwTlgW+dPZ^R!t4)LH zM~huPje{&oOHZG|<8krBP)lx{Y=2Pm#XUC)Tw?_J<3|NrFhE9S#7TlX%h<=KMRZJ5 zj-u#3r8jFtIN0Lyd_R08u^=L_AaaA@!AEoxaRf0LY{_5q#6iFCpL+}!7{L%zCK7>p zaN0#YTetkKp(!p}_Vv>84;j*G;P*F($#%2MN`F3X*qo$!az1(_>9cr}F6}$8q>`z2 zU&h@;i3&Wf-rfV^87fjSP-tGTJE-`sY&u~ds1<cW{smJlS;oDN*sJo0WXmHJ`^? zL_rDN^6H3a(*n>&tbR>DN&=;RE>aTo=|EJ58w0L^84#7ew0(;*3PFv+r|6zhL23-w zqqOmi!{$1y{jpf}4&#Zy$f@@~dOVa=*Gv4V^;oj!L%&)B%*$tRgUF~t-k?wXSP}vK z`TMZ!W$(I-MesM7h*hN_JCrpH2jWnyP69eM0*d#Z?oSho^+>`PX%U0nGPWcT)sdb? zJ&rX)d{~7d|D2;i$&tJF0x^kT>gc|;AHGOMTm)~tbg!E%rBuG5f->g7DF{ex6|}X1 zXaD8lA#4%;`Rq|-Cz2vw6uIbr-W|nfph}Wb>8qy=S@EYtZrRjQQF#Xn{F%geL(+I> z%XmZ;@efl3s$EVFSw(akTRJ7!9Wr#vkwon6?VIEZUokVwRb(cm1&_aEo7QZz#s|Ih zI8z1k<Bb!W<@S1NYVFCNS*~ClO4g8p-$-xV{o>Y%9y|5ns6VLJKI^d2DVlb*<91ZV zjvBA~O(Gb*)T5_g*=Vu*h@g$$jPwL4hrlI$D-_#y{nL`h9-ZZC$E$C|jxn5{qP46J zm)lYg5%hw^`Y%8GT4RVHO0sSxQR6<z1<tdv8I-buQ+5^7^RF#@b@h2fE}nTsTqDJt zevnD%*C-sXaN1EC8z1ijg=n+%ae=FaFtAuUrx1`k?L}+kgNljb)RwEO?Vq=Gt#|!= zt@0WV`6|0N^}TqiHJ)!}zo8n<RRnE_1F@4#fsTtm;xtR-JVJv!bPtB^*8xzk!7VW5 z+yS!WlF3SsOIwKQj}p}}d>L@NZA`wpC4&$?=Nsncwt2MNQe`t1(iCm5Q0s=dZrZVG z`~|M)ze6bdZ}W)jJS~#{AqvwWrNUM+{Pfdj<i#hsqvy0c9&U&82yghAFr`-JsN{NQ z74FtU^SpSvHXOZ-cL-jVF>joeYkgCXf<&PrJJ?b+B=cFWWUpC|_f(abp{}j-5S4fZ zqrat@@41<oWJk6RbKqrB5WPAbrijXLGTAwI2VU_Ity*gXVB!BmUGbfl*WJZriJHe0 zGE7xnea0nSt~a_7FT_ht)|L=82PrN!W!)ia{N(_<tYpN%bm4t+9!Dl9TV3h0uL&tG zmi~O$a#@i7DygOojG&S5AC|r$Ye<!Z@gi|;x3aS0y=J(aPYmp;ah{VRe8d&NkyA&5 ztW@C6{4qB${7fVPjlN7}j?qznf))J`t?(?9l~!ARJ!D5r{B=@Da`g}M4Y@(rYw>ZP zYxE+!OCxf&x5h-0r}~di9^?BR_3b)<a3<4a-=2_t99Vfu3S8i76(>6G{iPhGp2wy^ z<?h&uhr)*6wYGQLi0~>r;y`3-YS=Y9YB}`6X5oZDhmicocVI@q1PjT54-|O;2^Bp( z?>BsaSv0Eun-?LgX{zoG83$0f_aD#GAv%xlhV6OG0~5B_KIxgB;bOk~@#MiYx<MF6 zGo+e<L1_fMHh!wX@Hktp`zrc86S_WdPGVcWe*s74R9AQ0eUhJ-ZyZAuE8Y>X5xn*i zc?yjIL4=G@>hsUEt|Y24CAMqBYo*5d*M(`|O(0&IkWYouw$337G2rQy3X^(26ZclL zF(i9Mag2Q&Oemv?%Kcfv{RN-;B_|F2c>1A`J-(6KBM>nQ+js_=Wa9klLu@aK0K{AO zIy8rtmRrl7xq~^&#K8;$wQ2c+-*znkTL`lARq%238k|3?Dt4NefPi2M;iLSlX;m_4 zh(S{edtJ9C-EtcBVeG7mis<5E`ntk93ll^;$QCtRnCp6a`s8YNy`pT(1yb&KPSjDh z_(iZK)jn-I#1SFR7u5XY>DAWJdU5};arWv~8_9ZjC`d}8DW8v+AYLS?jfN1V-t!tA zcgm?_<WiqBGO+DI3^~KclmzwhwI9bZvbkH9dDWDKOf3$YqH0&0^o$I%r;_ZY{*KJR zt37jmMcfMY$9us>cxPuWv7ec-dV9C(qoN}<EiW*PkCH{)6Q|}q2bhkId%L_hY@hPq z#JT!b=ryDsOvA-and+imaSHM!X-2=Gyh%G%Yjk@pOY&d20Gejz6G^v>%6g*)_hrQK z((jyW+5$t<tLxGN+IWRE_8|^SU!Uz3^D4O-YC6U?3nrzDXg9SE$lnu_aPG@)fl*mm zPazxLnBj-e?bio0(|UeV(Ou6oS{)wrdqXXIJo);ni;j)M@@)UHQ+GqzFbnOla2I@Y z{m>B-XZGhYz62^|mpD$s^Pr+;<WPg)CW`vhy1Evxvnidr9$X?C0R$c_JAO~6UA5Yi zMB!FZB?rEu9t`ch!?$F_NLi%#y_bQ-M<Pqec)qz8+%*jnP`8Pw(XjzU>gm={{08&C zodgw8De%JgK@%@n_1m{JGM;5_UE{VnfedP%;*y}r#rNX3-^Y+9rfj;L2AI-#>|Y+p z9U!9`vnVe+j!=AZg=EO50=?43g-gShW>&9X&4*2(g2S0pp??O{Dzin?y8#C<NNW?5 z95FoKjvI(v%<cH(k1G-9Qiq%PHZJ-i7i_$kH&)z+XZ;Y^k&wcbMz2#%_I&E(EblEd ztyA#dtu)QAiX+~liz$M+UoX6oy<Ol^q4{c|<gJ+a27&!c&Y+)u%=gs4J94mvk(c{Z zG?~w_a0rOsPxd&c+48-eU1dulO)UbN2-GMrwuL@ZdFDCh`E_ipn`6qS?Te#-Acm3@ zzta<39yoW&)o99>xE|XcxdVdrYLu6lOJTt{xzBG263+`8JZEM8cHpC8zl97Ih_X%6 z8Lua>-uU<o3}BhH`2;__5}^`GGL+#yRDGAKM!Iv~!odI=Ffu}@qF5C^KY=IH&|m*% zk;_pkQYcdH_Xg|nS!>mcxB4hF9ubZyeXS*kCO)8m`l?`E+S;_oYH&n^sgqM2@Bwn- zOE(<1POuc)8p*_VA@mf@S3;wYx74mhQ*r~PKsrFEo8!K7)8HO<{8BER?->YG+q&FO zKk>yaaS6t=BsZWIEXnl%vQJ=l_6g*GZzMS<mg9I`lH8vaB0<&}84AnmSoDYGr$BCa zci1ChCr&BMq02u_e!rn)In3;`yuds%@N{b=SGA;wLdQ4lqT*}1cm75yF0SE3U29;w ze%6H;_ixwIP5Gug7`lOijzZh^Eqo}S#g>wrhOpPphjf(kY$zDjK9wt@sX8@IVA0_k z8I4zCrjhx?-n6FjE<K|Kglf@)?{MHnSUCI#a@kF}ft{tZ<7t?Z+$*K|i^hZrRi`X! z8?LMf_N~vJJzH=b;Qb@mqHgapJ3DL6K@#@<70^S4d~9~?qk&zoz2o5KzO{L1OhaR1 zD$AM_V0H*(gehHBj84QRCv#15+-5w$hE$m*DJ6xzBX0cmCOx{p^~0ThH9@v&2{5s0 zH)dOL;=4ol2NPRvIB{wSz??YU6F~ra2BT!&5JLWUn5qz49)QM53r5J+R^9F0{Q$J+ z6i;$Qg~a5ZOBRj?>}sdOCvlS@7)LE7{|H;?oFy2;`wQT>;7najlGW$C^XlzJQ+s%Q zOcKG#hfS^TejlFv?K9aE?JtJ2VkP(w+U194JOI;<_}<>+vCmnN>?Mn}OZkiVIJaPM z9hT2msyK{_d+i3{SiVrRy`OcJ6tT@YasB#q_S%Aj1hg7a;doy})5p(y*`8e1Gi}_h z$CwX4jj%VW)(-H2O}hk3`3p9-7_e^f9gKQPPA)4Zh6r(KO23mxBeNaa9Lz`OlX)g^ zDxR-p*R21cHhX&4ZS$Kn_*+_oa{J1Z^#z5!Vck3e5DQWA%|R`a-@@#??}ea9gJYH! zx7)PO+R8hXCjdsRP`BVq0elc8t02pFZEIwNOJ2yTYo=s|$NOHuUV{Y0B|dss3PU4? z9y5=-H6+Hw`(cP^O_x6%mm~Ywlk|*0x>M=K=HTre5Hj2I<eBif0Ki+atM(1Bn`KwZ zsQr(r>^6D{su(v#ijO7WJ1&xXBnr1>wL*3<!7YBqCia+lRdI(L9pRzt#ac1<r#7HE z>c&a2?*v3#5kG-hhn|{>O20z=6JNTMYxSoh3TEuc-*a;zzs;%G4`TZYPrB=$@0Q<T zl5+jDY*0?HgPvl6dZWk-y&mC2%Mq34H-`R)FykF3KDPIARjyl7LI=)Eh10tlH4d+} z4r8dPEO^`}2A+9-1f$xBPY>j3F`h&>ZExW8f!>PAWBYR8+-j3D(zn-}KI?AlB@DN2 zI^>d@svC4_@ZFga5eBwwqz@29Rh7UQl9&x%J70awfdrs0PraFCS^Z&I+C7jTHdYp> zrd*3BK3JVTFfP|1VF4Zy0JvBVy;2#hEX$o6cxT}UOa}rP+C?j%xQeH%$!nI{w~9J+ zAhzf(_o%Ct`##}FlKb8{*}~Yw#NOrk_2vB687_I4juiw<4)!|mvjQ!xiAo>xOvnHH zk#nvH58R0oeA>x`k;c<guqkoYiv|{uLf7lDA$XQN?s1v$=44=|mSBBQxZQi{aIurf z(_+SYyJWN3N5frD4%!q61?$uLFI*rLB_bw9$nz{xrU#yA54}vT)%9!a9UTu@%tskn z*=GThPpG+l5VXUjv)S(GNA_sfB%nM}Dk{%_+aGYu@6LGcec8_d#JAS94I?;st3Icv znXHielUJ{NJUyfKnvI<F>f5R)Qq*m?ji=Y|sb!zK1o(kM#J1O~d@lb5P^+m_ftPGB zJu#57l+`^(AZnaI6CcZydbv;bK$!gHB6{ARPUZSg@v}r8U<5pXWO#DG&;!)9*qY<{ z!O)R2`7}UzTubps_O6j2n3S2AtZpxmkzt_#*dODvo#b%uXj8ZaGm6?rf;mu4hxc9( zhKF&J<#|sc5@=shbG2E@ikD2rxO^YByUl<>tF%bQ8%yMiuemH@^tDYzMz05?<%88M z)7m##KD1Ue^5+%8@b=NZE4zS<_q@X%<OBNF(53x(36sVE7nZ}|&0^5NqjPh`3xf<( zD(t3@Bzozw%J_pPe%tzjsZ1d`DXj)00WeICKXkzUbr3<&nB&Yt<^^<db*`fAF|Y%P ze5K#d(t{dv-$})4Gq5MiP|=Lo2y9o42r&r3n{UMrxRHG9u1{0|=9w(_b}rL6r)%-s z^cgx>eIURmiB=7VPzr_GJLSZ_gufe%?3xf@C=Jp6shvK>NMznu`;dd+8}k)VTQG+| z{isvmu;&H8gAC}EZTL-Z3cYFcV7szexO)9VwNDlFYj7Ei9G`AU$p;rM8RmoU+_&gB z4*=Jgg?<GrOzEo%u8iRS{F3_l1SgOl6stl4<yq;Nn7S=%aA<EUTMh;8^9(!VeGXs8 zcIX3?`6wOwT0p4?LG05thCgM33IW4M-9GuT*}#qQG?<R-Vt1?8ZGDTWZ%d&B@^xBe z|0*vuD0)9&-Pc$Hr4*Pj=b)2bi7gV2{)lrA^=Y|1t2Vl;!2a}ig09`P%Ajf%6&qVZ zE$xG~G*#KDA~iKl<GExS3+Ux0%+gUk?cD|9ISj+EfuR)dqT>$abgyb8gc}cTmYF^u z^?mjPTlpx~xzq_I1Uj;oZ>v%J#CI*1E2Ru;%&ROM=okStjV}ynjNlSisZ`d&$O2{q z?|83D^`IFKxfq5rpw8PD`UR=WhKKh!cus64sQM^tE7SM4muIiMlK$`^-fRA#Df}!? zJpVE6G@{AmT+_~O)4E$9Z&CT-QxJA8ziqvUf6Ba7`abt}Oj44#TlZ7&uEjk<!uXq^ zj{1!p(2($+a6QAVE@Uurfa^$)IElji8DV@#_q+U6@QjkBFX*ZR=cXgfjB1SyO)dya zb#@e>6d-le&xKvLds=2D^q@|^&Xug3X0qE+R3Bl_gsNLkGHur=@B?;tq;bzF5DOGn z8$FR9LL2Y9y%a2qtI-n|a644WTXxqa7t!kG^xjzco}8O#N&J;Nnrj-i=<TzJ9~UAO zgdKH4U`Ij1$U?WU4bNZKDW#qphvnq*ebe@s{_V?P-VLiSLIbO(Ciky#DS?`$1tldI zKp_pJpMFJ}nv^DQh=6S}2!~+h{+0x>`Pm9q(1RuUmrx{Y@^u8qCiE%fxnu`bI41|* zK}uCWyzP`wXH>n>l%u=-mt9YmKBnD`(4z0w5q!&`L!Rcn!ux&a@A5j;^!P@~$le~~ z#ldW^AJXk{HOp47o{5=R!?B(Dm8AP2YL+ynH0Ee*AZ!#@=Du<`&039mPDe@QrHgB| zf~v+~i1VZ^)*C2CDhOOO@@vLzI7CdOe@YdYrMLxI2W>(I8;0`Oa1QTev$8HFC2im* zpOaUg1RgvkrFfg5I`FxR7L=(&sK7pI>wcvimuOTqJ6cD&&@Wz=ZGOT&x_b^r023_$ z@HKvLNLZe*FN{%csV&*InN}$(>JB3jMh?!s2Wn$V{v{h%Te!^WlFOEh2s*W!o13HM zJ-~`}&^w#%;q-Z~n|L#gGO~3_q9^z4kK3ND5F!8+{legTVEv5xg^g?hFLx$b!@o&T zqfA0Ed*bg`{HPePM3+ilUS20>XMniJY$&p&V#OW5{I8(7n{ZN@1=PUcp$GOSKU6UY zLZ9h)J^|40ae!ZkOp#P+K~~#7xxPWcnRg|?dg{6>uBW*_z|x#(fT7@+wn9=ynvp3@ z`)H)Pw$?%W*6{@6WN{Cu4I;o62f0w)=kUIuX=-ULUKu?H_8O9+qXHs@ouZz#T$I;e zcNkak3@he>{QH+wPQG+fa-M7d&2*5y{Nup_gs*KAL#{<Wmfwin+Le6PE#S-T0UV4= zJ!APFW~*FTgn1pm3VK{tx{Xs$NMT&x?UtiV2({&syBJLV)@dGH*yEIaQ}aA+w^sib zr=7#6<Af!`lvE98C&EaVnXUCRopd`BlYGOisxCdbI^lNgvXP}pId5-ok?SUh@5RMW z1KQy!NGo<aEt)XeYm^6m{3{sMunbF@GgGQ?$*!W3mn}tYPYF{JO928@7Qn**>W);Z zQS}~p4uCW7;NSp;t-`9R*sx&Q>ITaMVx~R&h{k*xz@wt$jMI#aepv|bt<`gMuUJ-g zVUpUW?wKwGn4Sc+g6$eLl0At{_v!l3f{H;1DzyI^7%*zrgY(%u?*|xnQ~PlSLz;vY z0j*o3B^Ov{fW=DQcjf*I#as{Q@))!s9tq`Q+^CuM*Y)XSD+^39UrAH5A6z2&4odlK zq@?Vdix{C-U(~-g=KuKxE@8UsyCHBfsH2pEz~=DuVVLscg}HqfLnEX3_I5Bp<o&2j z>RK1ypqpLN_071@F}+iZh=mRurX!jxeFTQkIohYu<HpdxX{K-|BP|7Y1m+@oT)_cK zuGeEsQ2Ka!{eX(MutjI~6X=1mIVjwXE1xOE#Hdjz9##|CxIa%uEE`MxjbZpxt2x_g z$YL?FC<q(K%gc-SFVkdtB8q@I;JBTM>iqafl7hG<G~4tZ)*KEg@|hQ<gvR!YMKj*D zDx;tY|Nhks>v<0H7hs-2KSBOuMX$bCYDqz_zS3|!)XH(P`OZ6l&8$GUT|QyArnXG) zb;fShPuf@C9K8q(_j6~Aa^nv}*<!BNS5>UJFj8jJ!(8}D!U@9PgW|cp+pN0y>z+53 zaCexGRm0ypO!=X%oZioh51(uIIv?V<Aso9-T{<3a<8K!96}XXrx<c3EnfH0tc<&TH z3HDOVPgk+Hj<~91?Ker|AcGS^HzeOPEL5lK_Tltnk(B`9M6$?~3e!`0XRP`b3<ufB zS!=BC<B0=oDWBys1a@jc5}KZdM&I_jLtgtjg{%PZT|6Czf*>NOrTl~lzWZ1t$-$oz zb1)$t4mc73Oy7PpLbAX}9MDerL$^gUE<hjn<_BSsqnl?lPML<Hv9j7)K;j_l$)<V_ zce6Qb0s-=}T~^LVfe(<IkL5CFNQGe@;OF&yKU8;isoEt=)+*XpQnTJ=BVraY{Uu(d z)E}HM70}S62Dx~2BB5qk>7kfvI+5?*T;0BO(@ui1>AHxVa47qw-2Z)F!%~QlG<C{8 z>bK=?ab!w?sI_)%$_?T+tA`(Hh}0xr@)I@8?p#+0g$Ug|6m16tKIkF(;BYvqk1Xsf z@7@>);<6)=Qsk8D)%C-kY+74pRT?utS89m^C`1CYV|@r@^Jrd=8NH#)1b5<l4Gu+v z?K2jmX+`i{kb6pBM3_TWCOL8UTfrgS{YxSibcYNs>w3)8q1BE4>8bN8yS?3RJ<_tq z=b`#XmnvnkNB!LCbu`ENJL9#7fAzJ~qxjgv!yfI3YK3d7_V_y~?z6#5tVlLH5q#zz z2p@FzYQ$oe$fhg>09!K+X*RwgF%u6juNDQphcpUmus}uwxw>Uz|3KU12dY~VJ@ihn zC)6J{Jfd~v7;kO&(p{V`^g2eaDr&<eDD@8fM~WifC;GFd=DgAE^xdB;l(DbnjEH@3 zcY4}ByaD>q_~((3_|PgyoUR3c68LfJkGj!*U8oRC>F$@X#rRt;eXJaxTsO<=8=+)1 zap%6)r(=CBTCq!l<6i{G)gmKo3m+me^vaQoi1E=&*<N|FXJs3oQXNl!lja{gTLeY? zo|$9%Rn@v3p6FkRQ&RX}!1$5doBC!i>T}SDe%on??1|2lHrkPa<re69mChPe)HL)A zirlp>7?ey{DM@LPwag6L7Y2We)M{CLuxq{4l7~!{iKR|s?CfGRzO%(_mR{hk3g@Q= zLPuf^n&>s3At8+s)o?3KRvSNdeT-vg`Ahp3_9M=GQ}!AM0Dk`)J8#TtHpRGtlst}e zzk$zf`rmoEDU6g}T0yJ*Z$6Ag-v0}MH`NZwvxQ&QUzm7hTrZ)50ynE|en_@U=Zoa0 zraqltF(Idxr<&+ppCU(M08ZS%hVwpZ1BnrO`2;@~4zf-i4$tLLW5Cs*L_$1Nu7t7e zx)V?A)Knm3a^$hKq5I=vIo#`{0Q(O=n+06r%<D=*NHRt57Qi*N@+V_v90muDKD|5F zf=L$!H<s(+;o;zb<L=t0fVp@x7ytSB1<D<{ww@hSK_P~wvC@3cDlJh{KNy;q`VF3j zNGWMlb}@Lq4zY}M#2096NBMZCYw7l<cJarBj*WN5Ri<4NB{=EdZd?MUQ}vc?6(X95 z_eZE^uSW`X8W=Yjj_T*09J@}NrNh(yAYk>19}iUKgG`uBV&}&}t270eb65p{B6b6S zERZ{_{~zT1Nk)HDs5xP%Wu;TP)x@KdRZ*Jc;wv^vDVg!@?n}IdO^SH99$_+$@@?6T zz)7MVkK63Chf`|dk@@<2I;D{8ZAMJ5L0?MbbKgJKL%rzuM>~n|LYt+J01kqtz3qMU zhkw4u?+l-fjo`$<@=r6b9xsk(Qi{a;9x<%E!Xv=M4k)nyAO)Amy2b2Jye_D}+uv=% zuXc#qUy6;E|L~*Dp{dgb?$8vFpzi0vcCr=NxfSjsDwUCxt;isF^Z*>{?k<;npksI} zZ*#Hg@nZIormL}$yIZ;4HhEcJ8~kZ(rzxQN#Ps}uH#mWdz>5U+un3IU72m(3MosC) zaJug}D4_TUtV41M<(NEjRX+%aRhf-AYz`)8&9t6RX)U5l0k43I^~z67D88LR*eHxl zm0mTPvZ_i%hneO^Ue0LHn@F9GI=D+Jtq;^ZSz!!U@;2k9`IrS<wnl441+un#4Te0D zv8QuE?-A#y&Mf9HCuF!v)oet4u&MallKWo~aS89Az^nH?{+g}|7ea`XBwqyLD@kTL z4>jP0?S5=CUT1Qc^_t2QAEK<=^{5cGdx|W2=6Q1hGHc_4rmax@DS?}vEbymMtzas& zh;T721(e?B`X5%GJVqk&2wZIlqcy%8ygSCv0Q?2^6|Qb+Pk)KgBCZGah=X{vGhaFz zsUIckS`O`3u%d&2pTj$go7U^-z#Oq5A@WJTvjGQg(tZ~4v_R8e#y1a64W39>Re$Ts z(T`o#K;i)u29giV65&65XixUmPd-coue67|;?Uv!9eI|^$;U8{t_ul=O)I}Sz!95T z$na|OijB47<{Sfrh<^wiRf0(en3$VbMD$S@R#>^y$TJ|In;G;xtG7xfAOt%NDlCC~ z#qN7Bb5T}N85#)30jU7kFYa+xu`|6Ma$-IdOD_<-)^2p71Em4;Yikqy{ohSYPs1T- zPFd*foTq{Qlra5*M}&B>c%2E#@iLTxHjh+Z<;d1b89L-_$sS=HJuC1&D&zKJ*|6t7 z5cZ}nKaU3xb0r;!fR$8Lzp9pO4EDKfy!)9}pilpAz6CsQ2nRmG<CDqXuD!csIFP{P zdFZiZ)Ez<}L1tkLlAl;0y}mB65_E<~I0OV20Wg^7M&BCA(|}3j)m^*<+7O>l*K>Z# z1j|}(3s}Db<}B^q9AKRk_dj)Ve?t^hRK(n_(S0pUo`$(1Jfy&|?_(TiCisGnMD@wU zI<r1~R_Av`7TlB%Jrv*HG!wo}PP-N!{G8n&1wk$xzm}Mek18oHu7}^>#=9-A?*rlh z5dX_I3k9l3Ud26Gxv*VLYG(8<W4C_JS~ZtXyWN@gyDOQ;k?^axXYMWYe@EL%u%Cg^ z`k^;*dw^^+i+iC*BET<$_vCMgBd!YqQ!Kxh$jqa<C3{i|&m#mG!Q(5^yJP_<InRIi z82>+ftcVwUdTglJ<Nep4jf`?Ru73=~{;Fp4<Mwrog^z6RU@w=)_BLkBBQy_B8lg71 z;9Z>A_Sn;NXX=(078hI2k@@*40b2Nw6!jL?U~zT3fT4U~nVPL=bWo+>B^q?yG^Qyt zIf+Qf>@xPp0ShtF4S**l6bki<vXocOGzBVw8~g2h=zDYL8fs~wt&1XG-^+T8yE*ZZ zPZBC`L(9zcMXnJBh8|ZjVPDS}YTIW0f9R9&ebxf(;Y2)qag+Nf;+vg|`t$8Sl#mL^ zQRlc$K6m!I!vB_|jvP!MFa4vqSV;){jH`T#-_*awf7ugKW&#k8c)axMGIh1my!Kb* z_X!fwyPWI0CCc>2e&ve{#me-G;EJ1#A1C@D|4&BGLrzb}QlZ?NlaC|p^2#T<dTHVy z(|btrxt<HkD=rL^*Yv~HQYvF-@8bD&%6|h<5w`AhR1nCTTNTpJf-m%upVUS)!qZGa zSqu489F-@dvCCjZ)$L)++gpCwg-cF8w7pHcwzg&)`?J5~X{NA`Zj#I;sbk;aITfmZ zmQoRNyfmjR@F;3==1*Wh%vLG_OWiL)K@1kKprOtOo{+}p+<)kRdW?M>lzcs~!EzYX z=F)Yv=WCyPik%>EJz#>fD(w1D^=*5@vL!KgoiOYFLJZrUY6c1sGKyE6B@pMaH}>E9 zh}_d={!e3H85UL4Mmu!3lypg_G)R|#q@*C-2na}bcZdi`g9sKa4MQU#jdXXH^e}Tb z-*@BJeeU()L1D(3bKW_7pS{<5*ILfPwQAGHs14)nLKGvt>_7ZAdZbY<iQ*lUK{kUC z2j|bbD~_x`!@~e#0fv8|O<x~-bC@OnWILIBY+>Qx7h!q2fhM<U(@S6ir|?rBn3sq3 zTg#>Se2m=H?Q6L#pE$H-YdnsY2u94adR;qO)j6mExD?6Vb#XZ5O^oEv_RjA*KN=?q zlz^AUuTPno6o4PmD4nRtUa?)5ruvf(ZQ-SmJyBZcRV&eX>*OE;fUg7Cpx%wCx=fC% zq9WSWf_sv;CU4v74FN7Lsu1P?Y_s6%LV_thkO5w^P4|TyRhu;q0GsW3Sq5KU9!M~o z4*p`*7>kM~>gzKsc$M(yNuqqCH8C(FU}Rtj&C@+ThNukkVti(`G7~u5g@K)#!y=UY z|DUOF(8TwXC43h$%(7#qIW{&1Ol=_M_4BjA-Ti=(7&iG<(DkwdTwEN7V_=$HMqI|y z)ch*^{01Gr{QY3iZ{hCVii39H_nld4q=4hFMG&!iHPeJdM4*CXmOvriwVtg%y}<&y z?lp;;pSXiVqL!tqidReeyoY?ovNqGhzlU`%e=qM_zNj!kzrzQ}E5~%`YS3&&S(ywl zyg%CQ30;*|`x6<=$1)GDEx?_y(0qv_43@rDRyRi0R$#@fW+H39FX5G$%}rgXV|-6? z=oi=aPnxh#iFCW3o*P$BgWVvJ<a24sc(6^#Cx5R4!T)HQTE=JH7q=K1XPw3!j;IB4 z7Kpr0QNR(u{l8Ea)jgmt|D`lsG$HOM@{dYjw*~)UFmBu-OF`Q-ARwB}bZ`^xAO`7( zE&dCyQXd@^Rn|{Dkw5Jnx}b8`8+-{-NVgT4yKcMpCI6evuzdo6{YkrK%&?gFKVY$E zEu|QlNbmwtvq_+HlAVZ`{LgoD<!i`!zU=hc@h;5e6~mMQK=h3oTR7;2Ali>2OVl#r z%GK}J9;yU75=$pi`Q1OYN@$+F1!yB7V)it7G`6S!TvgjWH%(GV0FJ1}(G4L}eP?Fp zIg|9I05^V0&T)<6Q>V^aZ<kTFP#EEUdn%z~7lwp4m+^ixiOI$9csgYC#@<nny?Yu? z*XE3iSRL=>sAA=to006VWo735TS0L_0laqkL9rA5WHpFI+q?kxJ&gJ0zh7DYS1*9u zzcPW~T)UHr^;hQ`V9hJ)zJUq+Ai)@f5W9grKIo<zk<{+*zZ!O{mX3@XJn9%RpsFtK zk(E+%fkS=|lrc+)=TsAu(!68CvDv%u<GK8I(roa$!?KD^sK!b45n9Gdfhdp@O6%B~ zgy(CT*mf<ijy^RP=7bpp?vqPU1@Nz-U>M1+ONZO8nI+;Czl#9TzaWC=D^Fb&A5FEg zWrIy9N#9KE4ga<?qMtS2(@NY9?lJ0o6W+~c_@|&8#;a7Kl@*k3=k?(f%(AeBb8>1N z!#2r`c@bx=q>G*))S-ib&G3z|!=sd<mMLM4YUA*mZ<AzP-#F=w)mpk_WNoSczC~Iq z{#rRpfi6h8f8rVT)Lz9a2=XmQ2OlvnGU_CVJp?EO%9^lZD^iSU8ih|><`100LxK>9 zPjOk<ehf3QsWJo+U@zMSO_Q1>jCbPxj=41k8lT+lQBxQ2%4)gXO{=T(QIn0NTzq@~ z<mT%T5EbO)NJ^|vyS3%pz}s`e@*l?9>JG@d3BEeI)_|Y6)(A1}ip%oZ!zvgw;jD8c zT3-(Yg@m3jCt@w=1&~95BldtN#vzhP;bPiu&h;G-;S6$q#_)gVmjzWVDdH3-c&8ly z{)_pk2oRlIT`gC_n3#U5iX;419s;dTv!DXD3aoKqv|m20hMX4+3DYZ&A9T7a9d;Ss zHC0}|0|Hdg0aoNiQTCeoWQsR9OBw1ek_;M6RB<M|bK%J}^kN;LNqO2m2qJ&R-?g<w z)BlZG<`xMV5Y<*RwQFvoF&xe-IPc74YIGjEoLwAExb%ey8vT^+I0mj=VSjA9Y-@;U zX_LxDGiE-hJT#dl`2xUiWqQ(i-YDqGI{>IrIb5kFm$Aso?;fLluhaVF=GYky>K^+d zRsj$VK0c!EO?DT^Chl#jPje*uR_(H&(j6n@@Yw!Xmk!td!{rAdpT{PF`ua+vggwlZ z*(4lVng-o3Z=M0jeEl?T<<-9!`g~n|BgyS6nd(3{JMmX=cuVvdK%$bnZ{DkxbiR8% z^j{eqSdo1=3s?!o2%$=bPH~_?|4T{$J<mWD*w+K|X|sv8`GWqeu!0|;ib4P4(`t_q z!Ti)8ZCl=oQkT)7k6W&`Nt9f{HKp$bA;}9+w4WSN^BxBSLXThj!8)>*kRBSppOxQn zjMH?ND6YDRx`|Rt-v67JiB`J4Tdm1itXN%X3V-<PIC|u)Vl@kxxN)qkk3T7$I4|D9 zNcr>$yPyTrd#dJGyc7+ZxZfuHiey4im+*tXOb=`Kx|`?@RI)uXZ#Q7GcEBM&-6ZFD zH|@|x<jyV&Vd5C%_6GhyG8BW(xWt#~fT-Xne>$<rf;o&6Jk31Q)pC|G!H8J=UxbF+ zx632HJZbk$Gws(>{_r56Vd8F;cliZ1pMngks-@qV)xG<CgbH3U$IH0@h+(boZ!ahk zd#T<_x8Iy^0|gC$y!j<1B{|^}ws<F70U&YJ@V}Tp+o0=jv=ui|6_q3=F+IP>sk!;E zX*xW7Ls1>?um|78{L1ms(RS%Xv#l)7st=FIf%!BWJI})p-MxJ&B~t>l{Hh)vPXR-s z^0efR2nL~T@QH{!14gP;w_YfA8g(Av$b^K1Cc?~+QgS~1wtUf&J&_-8y9OK`DXa0S zBt>w4awxHTi$THDLB19EuizD|U3yJ(j+N7V@43$Nole4?&NHIW)L>}Lc7$wjm1!@W zu=8HJYxos(q;gTi)lRxS0rtoC=}pP(2R*Wh#jzr;jN%Vay7z;|TftSOc7I_|#QpJI zdQ{dm%Esm<zjOWhZ>D6>@5-P3=l8FVGJF41c6WAm_F>EZMG$(3C2tB0_)IH~tV~Z$ z^(6ide)}BDN!a;wdAT-LSUHdyb_qF!zApXq_Fdbi+DA9o^;_aJlEz8t^fLeB){Gdp zuOtqLO(b-T&);^EgJD+nP&gYf#&nq0P}kV_e*yOEO(x2Edg*2z1S@0s&6RsQJg@Ct z&_55OgL@|k64q_AjwOb<WUJdLSTp}eLHEfAAu!^JzlufNcOBtFtbnn6*NhPx^I>jt z6NU^h|DkWi%|5kVQdi`oJYLd+u=~Tr6`bJEuRN=v8z8O2t?dSSvy}~b(8RTKB7ifI z`M|8{o}KZ{9aG~Eo4cCL{EUp!4Xg4`vC``4f3jWMc0Ufws10|81vo%Jue5GheEr#F z#{ZGav0NjGa0MI9!Q>_#g#h0YcmJTFv(?u8BT8QOpqHC7KK*yP{=?89@!jY^YMMq{ zkR9{wb@a~TL|f;81dw%mTlt=Dd&Lgw8-9Gh7#??iH|x42Q-4;T3v|MI<(yFRtU~e? zmv-z*`@^JM4C$Fhd64OIiS$_NR)sSDtU)yr`x-DGoM<*QwH)W2{Wm8il@%;E(Vtac zkZzK%xPNkVauf}MiMq4y@Rz3j4SKuH+RG692U(ZeIEjX2qm(m*_8b!dzcur@(F}e! zSfN^CsRr>Yj1|E`$l&(2(gr8d86@Ee28RIU-&R_%tZb+#KYz#final(WGV4PL`e`Z zr0R32*VWhmf{Pz~Xv%7n9?Bj(&2tSu85tZb1}SO(>^^?Xx;_TWrPqNMdbEB!44s{w zkM2T0aK;DwoE<M*?s_&k++1WpK?lVzV{WiR1PWjf(l`3Zns7D20<l_7^&a~Dp(7~_ z7cg`{MTa4?S6rYU|0K=9*tlHm?Ov5tUj)DkeuV3<b(Y{`fyu$Tovh!-lb9XnoKnQ> z^VI-qutQQopQM}<wBfu&#QS_ayLmAuzp62*7Upi^f8(p&5|99XQgre@XxZ*NHm9j| zZ>oB64L%FE?2A_}_$g47?nqV(npz!wBkIvzA9KfnV&DP_-Z3FJ(4^5_arP>50GUx2 z$2-W9x^rsx?z>fA5*DPCYCZxyEeD_Vk3rE6f3jtLBF9a7GbhHl3)sI(5x_V(IJ$w9 zP+USHvX3_K5rdZ;dvMD2vGm%;P}bA#-d-KhpAKiz*fgEo?G<Lw+T@KZI=f3dG)qQ+ zpF74S6pU>6OXA5vHUzu6y1JIO_UcuEPZl)ii&|^zgFMcp!7UWLK5z$2_e7V=<I)hR z!!j%5a<g(iIKcUjCawVu3IKN``cBGXY7eHf;O(D?weQQ<0uXRDQ;b}trlo~<m=gjv z3nbwIe(>)Pqo;==Zi`d&CZQm`Ee=>zGKdR@7Q$(P(LY$GfP9>|A;m%aHp_LAbwY=p zeJ|t&acQHpR)}47wtGoU32^5KP?yrwt@15xvV0osNa<JHC%JZEQzMC|VQl<qjVp|y zQQs5HG9}v?0lHx2x`&P)A$A2j*9IA;B>D@81`3cZ?AgHQb;-U-WM2xp1xvDX5nTk* zT(&kgRo=(1kyg~5_G_IQKSIasAIhkD(~Mr&_@zTPZ@P&rc(%>1NdlDnMYeG4gH-N% zfU{yq?2Y@+?sv4qplV<<!ei3VPUF203Kg~nG*9_y4n1br&f^2*9>i#&eCH=2r|!Hw z+PS$o&>H`1=P~By+fWfk!~|>d3#tGpP`y<FALJ0w6@yPBF34>vRe?#MgY-Kqk$XPD z%03149T^rD7HD}`Bj>Ulo1<|_qxXLsWP!)~48ED={IIe0D`4e@n(VIs{A!5N-bmne zbbal;?8WIkB8TM(Ie9Yeo+7KD@H~B2(fi)q?q+ehaFZ87_MwsfDcR?E2<2eid(%LP z)<4HqqOfS+et&=_6CyNAVbX8zmd026p%wMgWtTQ^EBxKdlnJm87rB$FpwR>PGicf< z?jMl>>EE_j6)G?EES{QngJl#I-JghG*_uo6U3@DKnlt5(yr5kVY~>74z8Z+X`cO-m zy??!Nn17U6=~X<Sq9b6|C>r1S&MXZ*%9dGM-$)%mv&%1N+En1H4uBKiuuI7lXwCMl z{E+!x##v6V>XcuUX4sc98km=qk4OZk4A5!$v7pz$Y(V3V&0W3-yxMen&YtgG%~}4` zTI_5S7r6JNr^h6>+!PT~k`NTzGBPp6s>Pi9<t-e%d$!H`9UK}I^|RTo^IIp5v<hAn zSLZ{rh)TXq|2iHg;n`C)(CMV7L=4t(=Z*&YCUVq7sYD9B3aEjXSVo{95c@P^fbMgT z#db0E#(wje_dVQqjkiY2hB@;3u4DOlD*V+IT*6{3*6@zkLg>Q$={wG+K_)kd`MbX> zb>BP=?OwTaQ7v!GBr(qFbD3=@R4vYEsEA@YP_RTe@MvM?*0GCfeUe|v{$hg8Mv32r z`U#&q;}`{-nqK3%n8z)VJCmTO)Qbl7@{bH{EN6<byzgn|tDKEg;%xkL>0UYc?_09I zzx-Hu`LuY<#_4!_asStJvG>o5wtXGb$tksW{16xMo1;tr@W!Kl@A`ct>({L>y(b<X zxLm@Y0b$DRPQGs@5C>TPjc+Q!zB<kQZ=^9gr-~<q6h?bp^pY+L?|9}ZRQgLAq7=F9 z4I=P7_%r`HVl?pWq9R`at_h7oatZlg+U)7=F9V1O$!A2n1A@55e%c-@ykSFuIRV~x z0=MF&=CrZeUyvv&dXz2rDCjjcyW6K^6_7!cEmAbi&NbAKsz@g(C(PHn;U3i_w#5GK z?ARWK@r={07r|u<J3b6vzOp<+Sq?_TW9<dE@!~#<qC`aRA<XNNr|qXu^SF0cXT$Ok zuZ#7fYq{?UBJ-u#SOXQ}rt7({g-0*14O|dkxAIRB2?#qFqGA(KK-OXC@4Qe)6#yKU zF3)MR%hC#T`;T#q(~`r=hvQJMO;XEb2-E}bG=-qNwlL`=O2o+Z!~0PYgME`PvuRfE z&-Pg$jGaCO^Tk`vx8vy!VIs(z7<}x~5bbM}j;lP9_v=h&nknTfELi=gnL~7PR=o&# z<|#rHyxcm1?i<3Djezf=Dy`4A3>H3IA5h>{_88?ZH;($9R-3P{>i#*7j}?tZKOpKy zQB_ImQ#fQm-+oz-czJ$j*^2-Mmhk*jX#{AxLxihF<aglO@`dl>JDhrzPf&{?KJDO` zwYjb=OY^;ZLmxrIfJMLPm{-w;6co5|{#pd>g+RX$MU=(a`FS5`Z4-5I)QyppWomE5 zc?(VJ*uR~2@Ye<(Fr~VIN_;(u(cX1_$@dBeRWzB8p9r29qpx`>PLfI0*L)XVdqdB? zq+z*D78$rKTOxbXaSRiDjORl`c)!2mnxF^~#CV>1?12~e1Y!jeoC|2oMVqCT*{*50 ze#R;TS$pi5{Q_aTMq#@vPA6Z2cJY|o6dOepB};?~I5<cGv0UfyaSQF2Y=j*j%G_=; z^KQe4b>2v+9OPOK7g9Y5i<wy)q+x%}e;rOH6J?>|;J^<2LFy^3<P%euv2+*=*L<aL z3fj+al_X??w(BE;Wxh{67J7`gwzeh;kNAw*@CG$C26^YBpr;!C*O%Bo_2a#l?gk5g zLW6utN2VhQW#`D$Bw-TB0j!P|4oGIGid~*p(j)k5?v3<m{Qyp6qD4{{f@+kW-;Rxq zjuL89fu&w*zjcag3DGJ6a}b2@{pa`wOx5`MG#E0?+}(nC(QNKx`$w5(1te1+Wfs~S zFp<{qV#oK-dw3V_@Y!|Th$J9&>(5nGL&_Bfv5>p?q9HJ1nY``&S`^NZtCYVA4K(mv zGujZdqlL!v(SdYMAjJc)>!_C1#uKHlFDxy=QLegP8=9CTq;ncr_P=KVb^<*HW`V!D ztoDgVo-O>o*FbN(-sH!vu`0q7A$d<+MD~#^AvCd0p~v$=8sy3_`M!8zulYv#wQgEI zMGPM3y4rfd0M3vJ>gcTCWyM4$B)qoT+Z!_navY!Ey=l#yo{Tu?Rf2JJ!j>_vu?gGb zWc~AB2@c10C%1hp+3FJEASH(F-<{Q8HHs18Zhewf4Dl?B^%D1-kjD;+bRjq+gpC>$ zI92kVomIMTszPKO9FRCTIqwe$pJK06$O&YrFWi@#L1{spQ1^IA$@Sj%il92n9_(cm zK4%3*#d~#d$z1Kt|IHhrjA09zSVTbPZ_4dm`{W>HNFPx$*LOphh|s=HIqHlqB@LVz z?r`Q9qMG|!F@X=t!O4jv*9>%nwtRU)jiF^k8!tqvF@waFs6_>`b982wlDxW$s&f`y z22EEVPCYk{Ffo|<d35UEdpL&s5%O(!=4JlEM|)+?nE4(>S@qh4L@mY2NTv2C-cq0K zA&?{zbH(2@8BC(Qbb_}@UbXJ|r*HTg&l%L-VUS{>(;$sg<BDS_;S|4bMmm#}!S@e* zwlF-h|5%z6<bn=oRKfN$POsNT-ZCn@A>yR#^&U<RuGsKh8U4}abF-Q8_O=#@Q~$@c zYvC>upG*DSG0dMEG+_d(p$2iE9BIMFQ5Kn1u{>lvUy2dz4=1bnrVkS0195sb;tQEZ zQVz@ag6VBmiQ=q?hFng1l}$OG76)hGD66*5K2&0T<z6)wLWVSIAli794xXpeIrrp= zlJS+*MmrhIez&3}4<(L~;9Kqp>LK~mu-$L#?dKR&u<qmr(-eGRR5j8^I~TF@J<pog z-B*$ZE#|ky-w@&NT(HwEqqn{3ptna7q`+n4=Dt`;e*PW3hCqhqYD^hoELkz)mzUU3 zB~~@^Y<V+(9(To+LKMe#*+StS&Zo4xC2p41k1Ec~f{w|6+iC{&|A~?r*na5!qnF$) zK=#eEcq-^}|L8{J@N8LGnXS3xK(+BtK8ju^$eFh)nFrC3=RYX#0^}gCPrDNNQ7pbF zA;(}JQz7WB7k@n9!lJd$Ez^g@<>>q<{S`n>qp7G)@eEJ5we};bU&Vs-uCay^G4Hn( z(17mUiv#~0xnJj$XUAJeXMfXp(OAMjB~t410<iY$C52XfnVySFpRO~?q^|5aA(L>Q z`;C@01gUW<;X8Nq<SG`Onk^Vbq@uhsEdP6NLUlq{PG7uSAg;=R3fk)S1Hg@>@^S`r z)oOV)K4QP>N75`!T#=B*o;wZqrddDuWoC7{sROhc0lI;-wc;U4-=lzVB)6I^SDHp& z&EShHPe$>9JG*<(;F5=t5haiJ>rSAG{@N-RLl;RDl4_Az1F7`XqYOD^Fyv79=fNM1 z_)>#F0tWbr+NRot)e)qvybx;kWJMdSf~KOd8TphC`Mgq)5Mw)qYozu=udbrXO2*&v zHojcw3R^Dr_U7<vb1>2jyW%0~i>ii?$Ql;c{sbr19z_do^QaszB<erGdUwfIEATvJ zsgY_try0gb_i(}7a%-+8O)|rZUEOr}aXgo#Z_(c>JC1+e9{bHYdKZpCfGz%*&|W1~ zDKH~h5^1}or>sVq!TTPi=pJvYJUHZQjdF*WD?bmNZ&*CKYxmz+!b$2C*W;x1GpKs6 zFsKd%^iAZYvKU{`{6I2xLLNpg5uPG$z=*@%aeWbVxgC2HdXL#B^$b5z2_-FclO=)= z+A5J0LL>Z$8nz&^Y!7h44tv4z9x6G4PAVh6A{&Zcwv55nJ;G1wPjaMQbNflHfLj3s zn2!i>q{qGd_^Q!D)TW*|cWXH22jnyCW6`N!OzMWKlam#2bBr;vKwqJWoU*Y|>_n9Y zHM+!*DfN+tT((wXdrQ~TF>RZL7hgIZou{5x$QrlM+`Ts3ytuc)KtyywR){*@@FHjj z@!?oAr_s-ScYIx+-4MgaL}I#{5j);Xzi*}~z&$?<qP?xMA9UbvK`QLBz_z!HLMk0X zlQ_T-URf)I6dAeTUFMeU4P#(_g`7+0e?$FYFQC>B4pTP1LJ{-!{euG{sh@NL?mVrT z?AOX4rnfObx&z2;K5_9qy@>Q9)rGk^j!WVIC7z6@?u`K-pd{5MJkkBuVG4|^&H)>& z_y>q5<PWN<`6nEHBk*!m-Zo>DMw6poG;vdokyDPFNhqC4mTkT+B&X*LkH8|V56FZ1 z0hu`DF(i}fy<Gt=H3dc@A?$3&AnYdWbSl4#6K^jirHEY<wrO;tmD2Ax(Am3!<toMO zWsDU%--Q~{Ph2nguScr;jEGQ9PQ|W13on7+LE672YOWOSNf$4v!-fm%oOzbx<a&H2 z4W_xfmg2mT=ZJai*TmZ6mgBRD#o7jy^Hy%dK(rzHNm59CE9|a7F$EuGf)42)tf@&H zxe{@H9(2Z9j+b|j5Y|8qe?FA|5&|-kpL===j*pM8xHp1eHXIu{lC3XE!P^!2O|9Zx zaCne50!v3nrvaTWOTEE$@wy?{fX<w9K-t*%v9$oDpTGaAS98}M>Mn9-zN@;DvIk9@ z%Mh+%peav=)lC?_^%m(G6d!-IQB=0O9`v1fb31mFUYv_n4Gs-O=zNU;l0eX>&l<N+ z_PQPJ>aP9j6_xNqIb}1J%m}_&u@`xEQvwI-mZso=Yj(g|8_mtcNQS(^dhCES^!qpc zLUM>P>lN2Wyz#Ze2z-z6;XJa!0vi5j!^b}L<)0MG=VswR2e*yG5mB>F+2Rq9DUmTJ z*FooZac`nRw1HDl^ZoDsjEFzo#vI6nOgW{2qph%5PNO`dgLvcl1(}-C6q@{t#z0$^ z>d+7E?e3<RlFDnXoQSn5UA%7MC&4pSv_InRtbuZ_Mzvjcxm$+1gAO>!yJlj+E3(4E z@0eyHwrevEA~_mfh8$8-wEX=17H_pr(*`$1Z&|ud&-6{)M{4nsg8D=7wWD4YM#Sao zeC-C+0Tn$xPwb!3&%<kdos2>21MzF6ogb)q_@!I(qNvBFzJjuHF$gM5!DgSBMLZ%9 zz-4!Kg%%!vGPnZqT=Jtg<iCsq<<~GETVl2yH|%BC+{ju41+pcU1dn<;CHtsT^~wOd z>!aA-V#n`X5XMB~9Kt2EtO@&}&zX%XHPb#!bapnn^`vT~BaRM1?T2UfszG_!be&*% zBz!2gnKsAtmz&oVqZm)zI_e6m!oy&W_C};;_iaSIbtU{4&~|;3rz!T8rvI&WPGE=m zxR?w$k5?{jln}R-Q3jwDMGo<9%lMAhAWt4nn{}N_7pYV%3%s-P?+x(Ub}yxD1+v_L zM_q#l%Bz%(jjX2(=huImCx6EG?v;#{34ekClN23cV!#_1dU<@MC!%MFVCUg^a(a4N zIqM7xv}0c`Z$RhP!yg6&%0S}-4mqUpYsg?04&1wIGye#VVR-rqbp<=biB#iwDq3pP zKPlVb3g=@+>6GL1P}buY!Nss&wqs|=6``g#eo{;*w)c8Tx@IUQLxkLSQC&MbWz#1W z)jIftkKbN)t>YxQj*HR#%k->7I>8)CI;cm+H$x9k9%;<-CsR(_KF(3}dOg=0n?qNc zOk*M*(MQI>DC@FB6cTu()a^~v9b$zG%0%Io;F}ny-Ap<a+$%hC;>vd@GqQ~SF!HUk zG$nM(HyYS*Ymb!OO&%S1h#=?L8&)dvft{vk;H@Ar2}vW%k|3i11+LFdVKf8+dS5$F z_~zNaeEv*W71aR-FD7Zuuu(tTbDH)V>FL!T1E+>W;ulXy#Q)f~)ccD7Q2*d^lr!Rl z32Z0ghFYv4@7Tg=J~EKk8gl~y<v^|1&<ivHQvoiW27bvk1G=Zy@IG4q1d_ruyWy2| z14nI;ArL9OD-TzbR-8CqR=iKWv47eGx+S#y+mLt<187-Ca<H<Orx7>4=llYGiRTC~ zVq{;~pg7*XXW9zB6(@#cgnawKW#Zu4#}@L9cqH0$25;&3yK1k*24L(fec0RXjwD`w z?2|KMSJsO?Z-PNWiVPEINuu(Tfq?TLGOfR1)%P>p(CUTUFppbsed7j3_K_=A9mGwl zme@05wsZcGDby-x&c2_r`DI+F#Rl<VwFWND1#U1B)BU6Q42$LM(i7Ny{0S`2wc#oi zLJD<yj)N2(JSilRC)=83o+T!FT3o<rc-*K@Z=z-#V?Alr&QIp9y-#H<-~zM|^Ab`B zSp%86U%!wbKr#t|7oqZN>FX<jts?->%zqgJnkL~g(-&Nr=havcFlhp*59&H?wOGOM zxSPpTua9W1M!?-+J&+WZ3HOF)-Q%<vkYn^5P{?}Qmw)@#>EG<Vo<3~`7zEOf<s4l< zjB5B60&p~bh$9Vt4fuEQI&#saYcvH9+`8||wZI^-7ZC1pv77%;_YO?Rb5>gxAe!D2 zp*u>)lzJkadnKVm8-JUCJNgJUF!Ac@pU}!y0l+lDR7#E(HR$?!kzi7sh?KPF)IT<# z0J>+04Z-X@#>p6r9C#1Gki0A_FN^q$gE>V?${GZ-_JK~O@O31^Ez$QIM+~I=AlQ+} z?v2#oJ15<<cA9v~AJJfBNK`L(>iPSO(e?CgFAV8PbbxU(V_~R_<LwM;?{;-Kh#Z$c zG{!imRmOXUGqWHM*RmJwf<6k33T4OG#3fI|UICmJW%D9F_=;6PPSj7F*|6u?#-$+d zn4Fx9<zb>=BX9SLfHh^R8Kg4^i#>k)^D%KO>g16YxeOn!yeEsX3Jbqsvlm`e)C|7R z(~42e74S)g6e}mMUH05x|5)l7g-M#m3UBy|4iL0|e@ge5y7T0O&vrAnJ2@Fa@j|Ii zD^BNYXBZles030(4?)5m;;ckCDf}2Q(QCpiPKuogfe_R_SCD<l%%Y%h4WZ}O>u4pL zM+B55l@t^gho`DALt4@*Z@S)tqXJg938QjgJ$klQYN)%~?drowpQ<t=h?R_~gnf%0 ztWAbP92-F*U9oB&dV{$Bcb~I@E80u%Q5(`=x<m0{r9v<FVL@Z|U3`q64e4!jOB*XN zJQ@?ilzw$hL{BPj_Udyu-u3##6^`Q|SQ%6`25_QNTbX2!s$?=QteV9=Oiq3^-sE4j z*c!a(+!8E2ZuDCk*!e&2n~5N+Kes?+?Z{zDfly*hAhzm|{ktxl&C1a9Lw(eY8bp>x z#4W$6U+n!UE*aSJIQV{2`X+r&^$h_U7~ZS2ah<^U#O-W@oy)KilI0s|@(D#6ZDnVy zxWRoBTj0Fc!~9yBxKnoFzz9UW_JRt>VdJdAh9iT$1q*jGiCOh?Lv)15RZFn3uwvP` zjAPJn$l6`%nOrWpj-)zeK@XJ9gslg4zz@@A^!wapS&rD%07mP7YK4EyWNL44euFm$ z!;NVz7?RR&ef=Vmgyc=-+g35Ls)7nP%QulE-yxYu(o_^t9j+WXDg96K>ao!TvT&Uo zVbT?6lPp3b{5S(5={}Crv<o#Zq~kR+2)cbYYVRNAucB_K;2}*%r<Wytbh+o~<#Sm0 zxYCT7+!#@G9pG{<_E<VuD<Y!%72a0bH&L^-p7-wi$z=Jnu-R%*{Jgne82+3~9b0EV zO%!f7mZXj(UK#u$mR#E~OLOn1=AJQWBYk*WxB1fC<K}Ncg}*6MOZ~YZsEtMayoEqr zVPWrYQaTMaHF<x32`(}mm*zuZ$ddLaEqf;?d654J03gu4V=j<YFr<M2aZ$^e==(mV zWfjpsgWkNDRMaWAFz+kQ+}2|wLIMFM1ERiXkDTimC?0DR7B}KI5p#n{<(#<v04-}Y z-F|G$r0-3J!XXw$?N7j#u2NIUmCh!xDpjn^ey?I1bsU?Yk4NVAM`UGDULX9{eyK+z z4?O(HrCam0WbQS^uHn+))nDeNhp?Z$1X$!Som|H>xo4iHIzm^aL}v(jG;1j~ApuuF zSh(%CyxHo%yKPD;Dk`%gUizH@jR7+~+IW7*awzxU*5ERDrV;I3WW<=gHILu>MRG$f zEgH4eD25V9^=-96MKpFuuE)QawraqNywY7&&^P;NUIg-ti8zj^d#C50whs6c)#KP{ z*2JFJX$Bwa1#YelGxFS$R5Mew>QB?doPFVNMM%i@vDt>*AbB!}*4ypMg1UpBJ{Zqj zD|&v1a?hknNNuRjcUNBN@dV1VjXI4v>GD8kQvI=+FzO1n4}Y29Tk|!PL!=fCtX;%v z2qc_lV~5AbbzIP_JsF=CVq%k`eJLp+n(GIAO<`**&Ev$V{e_!(lCjQF2`8twgIR$- z4YQQB<YXC(>ce{Z7B4wSqoSNEXQM_Z1CX$uW9{rwk(cBHH-?x*8w8fa_WTt2OrBPU z>psBx9#&DTu5DC3Jw2jlvv$|=@+e6GmmpQ`3|Okfth0Vg(c_zrH!IOuHMyXC@{;H? zJb2iR40Ptd7Jg3B*WlY1<U}{1nqgja_(?9bg7<T*)k16RX0Vi!lG2R3U>?h50MZYR zWJQF@@o{ouVpY7LqhaWyAHp^eIKZ8#b8#xf3qH^(R@tA;@REHSu#&}GErOy}re2*r zdF!osk|@WGjq}&1X!ZKqr$f=qOIK1yXSUi^KpCh0Vz|klPEPX<jc-hV2V3>I-rCeO zBGwymyxPx0Nh}5T7s?Abc$45e0Mi*p_#8iyg8vhRuea*H26uZlT>O7U&}KC)iDAjF zTdya)klNpL2`Y<WKw8|%yU<$6T7`oLS=;ae=3O3%)M9R}+OpQ<5k{56ffU)W=^L(m zxV#Cof?|r2qntum{gNN2_Sct{#y@`#41`Us=EnROv*!~OjVSp(Amj9MVAK5vYXp`W z>;on9)2Ap8U4sq&&%EXm?<BtxDisrf&}#8q{O=h`>uvAGM7`z??KI22^I<V0xV}PZ z@7FDLTkFR9z3J|J^+Rj%t{z&rJb;gLeP(BCD^oH=zZ$pVCzq+OTa%AK5*F|jt0<gv zBV!V_P<@MjhPGKuIEQFkAqzYqYhe3p4F*YsTw%zrG4>;Dw7Z}e!u47u-y%#)*i_yO z7~74)%H9>}46QA+pt0U!v+m^&M|GXU15*c2pO@$``}&Y#qkULZWtPo+qa3hG@mS78 z4*B+uD`mu;{+W}MK$_CqktRL1mkpIiOVKG=f^q+T+<?alpd-j3q%ZiL8`&*{i!%9# zKmM4shhqF<iKCSFRBvIcgUAGXlY2w?!!O(}gdT1mCRHXxFJWv;Vp2okpARz~c;GEg z8h9^@SlBzYLf^nFix?B0?WlaN3_tpe!NQju0AqgWq~uWrJ0ifj?i?QCedl*+z0h}G z?L>pf$jTypPU6XdP96)9ch~nh{)%E2pM#-w&rJR<`#|~mhcgxz*;DYf;V~;+;Mb+t z>n$6rQ5vrQy$6WtIs=t3Eq3_qTURY-f-zxEXdJOy65Aj1Md-Ym@y;4gE4^k5Uw$ii z`Ay3-kjz$%RsQ(tqgTi`()whqY#4l1yh9%~l)&etks<Gf&_r!|Ukw1I=W1$9<7PEP z+nuHvT9B1s9i;t=8YBqQF<xPPea31&6B!iNs%H4N5C7Q{h$umU%P=*Fk;fT0jt3m6 zTs&UFB6)aZGfyFW*LmpHUXamd22%GTDwtulfrSoVo-sA#h>&+OFM>N-njZ2hLhRkF z)dJ$R-`@Z(qb6!FfhFc$;w)S}+<o@`pf>0EE1wjNK0H?wT1kqdhr85p#&*@n$&=y# z$Bbdldyh2A6-p=!_>MHNc?f{3JOQo=l@`Z7-~PNW86@&3GpwAd2z47-vlo!a>-dGY z-5MoJ@aChrn;T(06j<)`8EW~4$YRm+z0P<KJ<}|;%J^JYUtbK$U{qy^R>+u{nHj?i zh3Sl<7t-+4y~LC|gn=7y%%V%UYxMr$pxHr31*WW;N32nb_@kh7f$$SFumvVsjnSn? z+{KwUP*0ynQox}^z@qv6!C(C{NC4auw5~3<?Gq1wLGF4kX7AuY^owlggtx^YjO?%p z6;hU%f_W21(DM?zU`BZKk2$-2o7s?gYX;=r-PvCOb;VV?;${}v=NNr;&xyE%*4{nm z3X`BUII9><n)W8RXi=i)S$uIn)-K|7ZIj6m3D>VBZn<MrqpYwHsdozpOaYy7q@0+h zG#pXaC7e3X=W=Ej{DYJ!G`8*P=L@DQ^0Z)V*EcS;6L^neV<XLP{(RJkT1tBj{WQ3V zLmCP@_7tOM?z3(q97Kp9*U$gaH$J^tz+LHVGSseLFD!UI^XQkRUGe3vGjya!4xk)N zH*P+XyR;!2U8^y%`5AaEH=0#%3hoYW^dkz7^Hm59U?HbD?X1LgnvU_A{>aGAEEEPN zJmoCh8<(riuP&p?asn2({lnK=Kh_eKH<;8Bt7BsN_GWrDd0zM5<l=xc+SxrKxu;`b z5TmUUsT%&$Rk@0tGCSVS#nTLI8G^*n&Kp4F0HoMD2;Gs#(_Jih;J|a^(Gb&5a$cMz z^bgB7x$*Px=#h%CZ>$@o^3nf(5niI6L3=E>t~(nqF9H~%5aF_VSOvFk6n&T$02EZw zE7))&8Z-5c<%AvRQHaYG+{C=}tYLN_TEF~dv0AQH#(`ALtXo4$5=qe*oaP=|w{K%l zD1KqZNKFxh>OHrN8o_=}<@eP1r~dB=lGKzBA?h!p`2M1Xs=q+bj>yepGu-wrzr}rO zwEaSC*S0dM7a!eR#5z$yVsw9^Ec$HXD(y6zJ9nsY?`as82R)*>&x9~;T`7>^Gom6I zz}+sh(uW~|X%kFnW<jzBx#;1>rRFxvVI2Uo%fPStf*!Uli5~y#%!-I41bi<#S0|5P z4)JT1I$(jz71h>0@@ozH_9uoSU|wpxEwdb6DqnE>SUqtDRR(}(|Ad^4<(Q+)TmJ*D zi?Lvx0NBOLz%Nv-V3ExdefIGOn1I6sr80>bLe@P}5Y-rL<0@f#%u&+*O?R0O6!FR) zy&qRAfXU5w_!XG3S3J&E?_R41wFis%g?B)F{TRJXoYf5wx-ZiqMu9|RR1o0OO{9wy z&`#z4u6Z%$A0bzCks-Z+ZgSe378Yyut%B;!N&BJ~?r9D6!W~i{1<w(eTt|{Ib1~Xq zBpgN|tUafA-tIb<wtad4C-@z9@_5wBm=Gk$Z`oVKyZHl}Pd;F}Bc+`5Ql<J=Ulgqx zZ+GU^Crof@JPnOtBhGnZwE|O0t9mi%mFWnN<uipL0^1v50fr%1Oru{Z;&L2)NW00f z0IUISCFbq?z0Y=3<>#ZX%-cJ*wr<K(5<YOZ5mY%-iXk4$i>)=|Gul?>`J*=93Ybt` zFL*kA(Q?N0B}$lbR0RBIy@*K@W4Zz(a)Aj}zjIKYQt@egOt*|ihot3URbg%IWODK{ znI%tHmTHihx(H$)FkL&d8Lo^8Nl9^a1o_54pA;7ti|)+^v1y??zFth8r;G~VIde3W z;=)!_@CrSNY(p>OsA{i%qW{lg^rGBgmYnv5?`7nvDFJO`Fj^2PT0*pRMU2Z}4R1^G zLS%^>E?&p@--v|^0=|c-SM{CL8Zq&xj%$1T$TPM$Zh(BBuk9Tlb*|4J$;i_|TD)2( z&}5%4?~j(C1PATYsb~*fI7XXSkb*RBK(hm}tZZIhjHk_G;`i&R<tn7D`1FS`K$xVI zvUXYvSWJ9*QRKb_24&jmO`Re*XW9ACGnC8^bRlf8P`+H4rnj6Kz86MRtT{Nd%XvSv z<tT8dg1hA>d2#%J<}xJj#i#GEe1Ugj^|Tp@SNAdHYarhPtF?RYNOGiy6KIycA^Uf_ zl~*CTh77FJ!hJkO3|8n$`?oF42N|PU;4UoVq*;|07pSnLpA{Ipaq17hs^cOap{on} zh&X-YZGOeNyjEPlth_BPO}vQ6MZjVL{$1Y9-1pb}1kBUCu8RmOAX!Daep4l%u}y$C zqnM9TL}PyNLI7$xVYwN)2~LjW^u;8ZoRY;uf57e*FjiECm^)Z8l_OC=MsxBBfWrpp z##(#juKpwqa2VLOgVxlkEBQmT#(^x&RYc0F5KBVo+k}m0n#_#NP=+DvzKFW6X|lfG zqCLUWiTu)>31`(T8mbC4Hbr+XJ4nNydM*&er1GA-p~;c%6$qSjF-!I@#78O+@aMUr LhC;cVdD#B|Z^6W% diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 66683758beb85ec4c58fab7db548a71bf59cd09d..2911e0a035c55a2873fcc481f1a92283feb0d7ad 100644 GIT binary patch delta 7551 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 delta 7251 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 Yc_Hz>IO7llB0Wa>)aH8Cx(+e_1AQ)Tw*UYD diff --git a/icons/obj/supermatter.dmi b/icons/obj/supermatter.dmi index 1e60e4f9b2db58a501c701a50a5b83b509ba980f..6d4429a9d9fd739154469c5ddec4ed7a2c57db88 100644 GIT binary patch delta 12740 zcmaKS1yEc;*X7_YA-D&3*C0az2_6CjcMA~Qokx)15Zsvr2=4CgHfV5n2^t(`mh8Xw zZEfw;RJ~WXdtTq}ckj79=XApe!V(nWI|Fd!{Yl$Z#=^zS+1k<7+QA+K^305mtFlMr z#s0Q;%gUi$R@{Udj;m8FJ&SXOIcSF%j=s$L!KYc$FBF$&`^Uxh&cow_(dN=_+mcDk zpY<in@Fx_`^a9I|X0D7s`chCoot={ouhE4>%0^-h+_~<m`5Fc|^J3}F{J>3v8cqP4 zn2DF+%(Yg7-+z81|F{r)zB!Ro9(O%36YG}QwE5fIN;x0%d*{L|hFdQ3_(_b`S{Ow- z)yJRQe1B0m55E~6?5aZ^88c1Ou0!{yN8L&yb|Xm5y-B}(KY*P7I+Im8w=92+qquym zYuiBehzL7K7qwiK!Uch7LGm(hK6z%=5F?li0c~EMl(R`U@V18EhO=M(v{>k^o&{QL zp;Yn;@rZ0t(PCjpGm#>W;(tyZO>p8FmD(I??QF$J*tx;N_*#kmN{L`lN=_TqcJ#AJ zRP@cecnh8C-@nUOi%Sl(Z(@_p7Xnt|8LuKW*7gnxN?J-z3+z{X?6aCR+{T@)cl{KG zB7nDIQ>##Z#TAG1`%uD+Wq2K191oi~phxw&e35iI4Y6Oaazv7Lt?1Ep1{fs=RyE^i z>nhDO_D`tbB}H)Pc};zMW(%=<A?8Zl%-!-1qPm707D>EDDiYoI#tm*mpW15z7n8L_ zIlx6#gczIcy15B{9ei|1Gj7NPy^qfWoXd5$HIz3rI4|mtzBlEw|E?N)Ret-ZIYz-* zgYDmi#cnqB=NIr`-nFa;hHJGcW<PnGAJlNsR1wj17aTEH$3Z%9$mVLlXYZ(7bT~d8 zfh7!04ehJK77s9LmL=nE`p7&aH=EBl4zRYXODwRs7`Xx!MseAkUL4QRx@c$srTI54 zjfYp-S9;PY44hs*%^Ph7cNY%M(1#1gk-AI&wq@|moM_v&%LAF&B8LC#BQSBa5#_Bv z-+}8U5lG5o?xc$4x~AupbiD!ZEJJ;7gx!d-Llg0Ch@26~Ky2%z@UuSQ_jugd#PWAc zIe4n%pKPx2swmj4i^NQ}=)wl{zAQwrhI#``n9%`j19E$a*Hx|lC7qQ-YPqVYV>l@) z23DLc^=jt+RPRTt7aOkRS2t<Zms@KrGRQxffY#%YOMR2XbuoGq>=})Q0@}~CACm@S z?b|<}+#NaaU%DHmEcpK@Yd*ehiR5a0jr4h5O_7+0>Q8z2&bwv*ak54rz-l<EXn{$d zVF0^d1E*OwjdQHcG-k5{6{Dy6_03=T_D5`{mRnvQqnujmc0+C~MS@!p*zO9f=QaPH zE&G~=$NLls6#Sa$H~fPb{Mpog0X9CSS@(#J;&#D6Z+wFQNxUip=C2-Zm%!G?N4H!4 z_3#Dh!`eD^gDzGgML>#Z#&wj~eKfgxe1rv>>ap~y=>DlOYaX0Szit?&W3(lz{xma3 zU`Aj`_(y?<vu8v?l-yRYQ-FijBN<+o41q62NKP$2al8nZ!VO7XC&(HFu3PNlBr<H~ zH%N|VSW^gF_##GjgNFBe@Mud(<-2rX-RplTjvk|1WCT>zfyGnzvH0Qk&Y(U?%urJ$ z(<oC3CUrlq6WlMAApuGFYQI0hAL=@ubSz$?_*f9HHshav<WB(iL)PzO^Cw9@0AUPs z&b31Jh@GMDS3k-Uy2*N&!e5bLrNriML(z@IWz@!<YpGX}J#QxlX$~WD%0Dw-3+IpT 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 Q==mf6?t@JETjRk02DblK&j0`b delta 12200 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 bS8(tfB16f{CyM~k^G{wzMY>GV_{;wRY*RsD diff --git a/tgstation.dme b/tgstation.dme index ff25aca2330..ab54d402115 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1848,6 +1848,7 @@ #include "code\modules\events\carp_migration.dm" #include "code\modules\events\communications_blackout.dm" #include "code\modules\events\creep_awakening.dm" +#include "code\modules\events\crystal_event.dm" #include "code\modules\events\devil.dm" #include "code\modules\events\disease_outbreak.dm" #include "code\modules\events\dust.dm" From 6be21fc97ec157cee7cefebc7993f785dd6b8da9 Mon Sep 17 00:00:00 2001 From: tgstation-server <tgstation-server@tgstation13.org> Date: Sat, 29 Aug 2020 19:56:44 -0700 Subject: [PATCH 36/40] Automatic changelog generation for PR #52941 [ci skip] --- html/changelogs/AutoChangeLog-pr-52941.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-52941.yml diff --git a/html/changelogs/AutoChangeLog-pr-52941.yml b/html/changelogs/AutoChangeLog-pr-52941.yml new file mode 100644 index 00000000000..0e28557da2c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-52941.yml @@ -0,0 +1,4 @@ +author: "Ghilker" +delete-after: True +changes: + - rscadd: "Added Crystal Invasion Event (with all the mechanics, mobs and item related)" From 90b678bc16c957ad861c9f1d6aa1dd3cddf14045 Mon Sep 17 00:00:00 2001 From: Dennok <Deneles@yandex.ru> Date: Sun, 30 Aug 2020 06:12:13 +0300 Subject: [PATCH 37/40] Ladder radial menu reopening on use. (#53083) When you use ladder you automatically search for new ladder and open its radial menu. --- code/game/objects/structures/ladders.dm | 49 +++++++++++++------------ 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 60ff6964990..6081f2c59f2 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -84,39 +84,42 @@ user.forceMove(T) if(AM) user.start_pulling(AM) + + //reopening ladder radial menu ahead + T = get_turf(user) + var/obj/structure/ladder/ladder_structure = locate() in T + if (ladder_structure) + ladder_structure.use(user) /obj/structure/ladder/proc/use(mob/user, is_ghost=FALSE) if (!is_ghost && !in_range(src, user)) return - var/list/tool_list = list( - "Up" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = NORTH), - "Down" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = SOUTH) - ) - - if (up && down) - var/result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE) - if (!is_ghost && !in_range(src, user)) - return // nice try - switch(result) - if("Up") - travel(TRUE, user, is_ghost, up) - if("Down") - travel(FALSE, user, is_ghost, down) - if("Cancel") - return - else if(up) - travel(TRUE, user, is_ghost, up) - else if(down) - travel(FALSE, user, is_ghost, down) - else + var/list/tool_list = list() + if (up) + tool_list["Up"] = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = NORTH) + if (down) + tool_list["Down"] = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = SOUTH) + if (!length(tool_list)) to_chat(user, "<span class='warning'>[src] doesn't seem to lead anywhere!</span>") + return + + var/result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user, is_ghost), require_near = !is_ghost, tooltips = TRUE) + if (!is_ghost && !in_range(src, user)) + return // nice try + switch(result) + if("Up") + travel(TRUE, user, is_ghost, up) + if("Down") + travel(FALSE, user, is_ghost, down) + if("Cancel") + return if(!is_ghost) add_fingerprint(user) -/obj/structure/ladder/proc/check_menu(mob/user) - if(user.incapacitated() || !user.Adjacent(src)) +/obj/structure/ladder/proc/check_menu(mob/user, is_ghost) + if(user.incapacitated() || (!user.Adjacent(src) && !is_ghost)) return FALSE return TRUE From 61ed645d54434805f92720690c11a7a1ddf067ee Mon Sep 17 00:00:00 2001 From: tgstation-server <tgstation-server@tgstation13.org> Date: Sat, 29 Aug 2020 20:12:17 -0700 Subject: [PATCH 38/40] Automatic changelog generation for PR #53083 [ci skip] --- html/changelogs/AutoChangeLog-pr-53083.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53083.yml diff --git a/html/changelogs/AutoChangeLog-pr-53083.yml b/html/changelogs/AutoChangeLog-pr-53083.yml new file mode 100644 index 00000000000..e0191ab9974 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53083.yml @@ -0,0 +1,4 @@ +author: "Dennok" +delete-after: True +changes: + - tweak: "ladders keep its menu opened when you use ladder" From 864239669415f7185f6d95355e66b54cdaf24e52 Mon Sep 17 00:00:00 2001 From: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Date: Sat, 29 Aug 2020 20:29:20 -0700 Subject: [PATCH 39/40] Raises the spice levels of the supermatter (#53233) --- .../modules/atmospherics/gasmixtures/reactions.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 15 ++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 5fc436c7ca3..f4cf36121e2 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -235,7 +235,7 @@ nobiliumsuppression = INFINITY else ASSERT_GAS(/datum/gas/carbon_dioxide,air) ASSERT_GAS(/datum/gas/water_vapor,air) - cached_gases[/datum/gas/carbon_dioxide][MOLES] += plasma_burn_rate + cached_gases[/datum/gas/carbon_dioxide][MOLES] += plasma_burn_rate * 0.75 cached_gases[/datum/gas/water_vapor][MOLES] += plasma_burn_rate * 0.25 energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index d0e2f516379..7e0620cc49c 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -14,12 +14,12 @@ #define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty. #define OXYGEN_HEAT_PENALTY 1 -#define PLUOXIUM_HEAT_PENALTY -1 +#define PLUOXIUM_HEAT_PENALTY 3 #define TRITIUM_HEAT_PENALTY 10 #define CO2_HEAT_PENALTY 0.1 #define NITROGEN_HEAT_PENALTY -1.5 #define BZ_HEAT_PENALTY 5 -#define H2O_HEAT_PENALTY 8 +#define H2O_HEAT_PENALTY 12 //This'll get made slowly over time, I want my spice rock spicy god damnit #define FREON_HEAT_PENALTY -10 //very good heat absorbtion and less plasma and o2 generation #define HYDROGEN_HEAT_PENALTY 10 // similar heat penalty as tritium (dangerous) @@ -37,7 +37,6 @@ #define BZ_RADIOACTIVITY_MODIFIER 5 //Improves the effect of transmit modifiers #define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage. -#define PLUOXIUM_HEAT_RESISTANCE 3 #define HYDROGEN_HEAT_RESISTANCE 2 // just a bit of heat resistance to spice it up #define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts. @@ -201,7 +200,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) ///The list of gases mapped against their heat resistance. We use it to moderate heat damage. var/list/gas_resist = list( /datum/gas/nitrous_oxide = N2O_HEAT_RESISTANCE, - /datum/gas/pluoxium = PLUOXIUM_HEAT_RESISTANCE, /datum/gas/hydrogen = HYDROGEN_HEAT_RESISTANCE, ) ///The list of gases mapped against their powermix ratio @@ -539,7 +537,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) removed.assert_gas(gasID) //calculating gas related values - //Wanna know a secret? See that max() to zero? it's used for error checking. If we get a mol count in the negative, we'll get a divide by zero error + //Wanna know a secret? See that max() to zero? it's used for error checking. If we get a mol count in the negative, we'll get a divide by zero error //Old me, you're insane combined_gas = max(removed.total_moles(), 0) //This is more error prevention, according to all known laws of atmos, gas_mix.remove() should never make negative mol values. @@ -550,20 +548,16 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Prevents huge bursts of gas/heat when a large amount of something is introduced //They range between 0 and 1 for(var/gasID in gases_we_care_about) - gas_comp[gasID] += clamp(max(removed.gases[gasID][MOLES]/combined_gas, 0) - gas_comp[gasID], -1, gas_change_rate) + gas_comp[gasID] = clamp(removed.gases[gasID][MOLES] / combined_gas, 0, 1) var/list/heat_mod = gases_we_care_about.Copy() var/list/transit_mod = gases_we_care_about.Copy() var/list/resistance_mod = gases_we_care_about.Copy() //We're concerned about pluoxium being too easy to abuse at low percents, so we make sure there's a substantial amount. - var/pluoxiumbonus = (gas_comp[/datum/gas/pluoxium] >= 0.15) //makes pluoxium only work at 15%+ var/h2obonus = 1 - (gas_comp[/datum/gas/water_vapor] * 0.25)//At max this value should be 0.75 var/freonbonus = (gas_comp[/datum/gas/freon] <= 0.03) //Let's just yeet power output if this shit is high - heat_mod[/datum/gas/pluoxium] = pluoxiumbonus - transit_mod[/datum/gas/pluoxium] = pluoxiumbonus - resistance_mod[/datum/gas/pluoxium] = pluoxiumbonus //No less then zero, and no greater then one, we use this to do explosions and heat to power transfer //Be very careful with modifing this var by large amounts, and for the love of god do not push it past 1 @@ -576,7 +570,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) dynamic_heat_modifier = 0 for(var/gasID in gas_heat) dynamic_heat_modifier += gas_comp[gasID] * gas_heat[gasID] * (isnull(heat_mod[gasID]) ? 1 : heat_mod[gasID]) - dynamic_heat_modifier *= h2obonus dynamic_heat_modifier = max(dynamic_heat_modifier, 0.5) //Value between 1 and 10. Effects the damage heat does to the crystal From 8a8983d84d7cd98d98b1eb514858a2f19da7e1c0 Mon Sep 17 00:00:00 2001 From: tgstation-server <tgstation-server@tgstation13.org> Date: Sat, 29 Aug 2020 20:29:24 -0700 Subject: [PATCH 40/40] Automatic changelog generation for PR #53233 [ci skip] --- html/changelogs/AutoChangeLog-pr-53233.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-53233.yml diff --git a/html/changelogs/AutoChangeLog-pr-53233.yml b/html/changelogs/AutoChangeLog-pr-53233.yml new file mode 100644 index 00000000000..7731205c44a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-53233.yml @@ -0,0 +1,5 @@ +author: "LemonInTheDark" +delete-after: True +changes: + - rscadd: "H2O is a bit more spicy in the sm, and plux is now a danger rather then a gift, filter it out you nerds." + - balance: "You feel a great shift in space, the spice rock has changed"